# 网络问题排查思路

# 需要的网络信息

# 1.1网络拓扑图

现场环境的网络拓扑图,能够体现OA 服务到外网所经过的网关设备、代理、安全设备......等,这个网络信息是找客户获取每家客户都不一样,如下图举例:

举例网络拓扑图

# 1.2常见的网络安全设备

网络防火墙、WAF、上网行为管理器、IPS、毒霸、DDOS、高防、CDN......等。

# 1.3有问题的业务请求URL

业务开发定位问题时可以记录下来,后面查找日志和验证时可以有用

# 1.4问题功能的抓包

如浏览器的F12、fiddler 、wireshark、tcpdump 之类的问题点的抓包

# 2、请求慢排查

# 案例一:移动端访问慢

# 2.1服务器本机测试

# 方案一:浏览器登录测试(可选)

网络方向上排查思路,首先判断是否是网络导致;可以通过在服务器本机模拟M3的H5接口调用测试。

在服务器本机使用http://127.0.0.1:端口登录OA页面(没桌面的找与服务器同网段的PC),然后在同一个浏览器里输入H5的访问地址 (PC端登录界面seeyon 后面加如下参数H5/wechat/html/allApps.html)

若是服务器本机上验证没有问题,那么就依次往外移动一个网络节点测试(按网关设备分节点),当前环境就是OA服务器------网络防火墙------nginx------WAF------IPS------网络防火墙------DDOS ------VPN这样一个链路,可以根据这个节点访问OA测试问题时候复现(访问地址根据所过的网关后访问网络可达的地址),问题在那个节点复现网络上就核查这个节点(核查网关日志、流量转发有无丢包)

# 方案二:Postman测试(可选)

下载地址:https://www.postman.com/downloads/ (opens new window)

11fc101f63d3a517b0c0d30bbf4a8d2

第一次打开会要求登录账号密码,如果没有,直接关闭,重新打开会自动进入下图这样子无需账号密码登录的界面。(其实可以注册一个没啥影响)

55e3796d8c04944b76cf3d697fdafe9

下一步就是新建页面,如下图:

8b0657a1dd71678eacf5e6844e04ed5

# 使用PostMan测试GET接口

步骤:

(一)选择请求的方式

22804b1dcc4baa25bf74c8793fd3c56

  1. 写请求的URL地址

f7c9a9203e235ad6c86857f0f5b14e1

  1. 填写请求的参数

    9b0d027d22e7d2c57f834fffd4c73f6

  2. 点击Send按钮发起GET请求

    b96e6ac345e6714e5cf8098dc56d0ec

  3. 查看服务器响应的结果

    25bcf1048e06120f864f49ea3f41f83

# 使用PostMan测试POST接口

步骤:

1、选择请求的方式

2、填写请求的URL地址

3、选择Body面板并勾选数据格式

4、填写要发送到服务器的数据

5、点击Send按钮发起POST请求

6、查看服务器响应的结果

唯一不同的地方是第三步:选择Body面板并勾选数据格式,其余步骤相同(没有参数的可忽略)

43673c513f2238d4d80fdcd0f56b6de

参考链接:https://blog.csdn.net/m0_61843874/article/details/123324727 (opens new window)

# 方案三:Curl命令测试(可选)

Linux/windows下执行curl命令发送post请求

curl -X POST -H "Content-Type: application/json" -H "referer:http://localhost" http://localhost:8080/test/file/import -d '{"param":"20210608"}'

H表示请求头,-d表示参数

参考案例:

curl -v http://localhost:8080/JsonSendSms -d '{"mobile":"00000000000","smsID":"12345678999","smscontent":"this is a test2"}' -X POST -H "Content-Type: application/json" -k

详细信息可以参考如下链接,具体的测命令需要对应的接口开发给出参数

参考链接:https://blog.csdn.net/weixin_49114503/article/details/119679741 (opens new window)

# 2.2网络抓包(可选)

# 2.2.1Fiddler抓包

在PC端安装fidder后,移动端和PC端连同一个WIFii,然后修改移动端手机wifii为PC端的地址和8888端口,这样就可以抓手机端的流量了,具体方法如下链接。

安卓抓包:

https://www.jianshu.com/p/b90901c1f19d (opens new window)

苹果手机抓包:

https://www.jianshu.com/p/cf03ac3c51dd (opens new window)

http://oa.testxt.com/seeyon/officeservlet (opens new window) 如下截图这个是插件打开附件的耗时,耗时时间根据文件的大小而定是那这个请求分析耗时;

如下截图是请求的耗时分布,可以看到15:56:56.942 server收到请求15:56:58.077 server开始响应这个之间的时间差就是后端处理耗时。

# 2.2.2Wireshark抓包

下载地址:https://www.wireshark.org/download.html (opens new window)

需要在PC端安装wireshake,然后PC端发出wifi移动端去连接PC端发出的wifi来抓移动端的包,wireshake在抓包时需要选择wifi的网卡。

抓包完成后保存抓包文件

# 2.3负载排查(可选)

拿nginx举例,排查nginx负载请求转发耗时需要开启access.log日志,并在日志上加上request_time(整个请求的总时间 )、和upstream_response_time (从Nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间),从这两个参数可以分析到请求耗时是在后端、前端还是网络上。

在ngin.conf 添加如下日志格式可以打印这两个时间,若还需要打印其他信息可以自行调整。

log_format main '{' '"$time_local","remote_user":"$remote_user",' '"request_time":$request_time,"upstream_response_time":$upstream_response_time,' '"request":"$request","status":"$status","body_bytes_sent":"$body_bytes_sent","http_referer":"$http_referer",' '"upstream_addr":"$upstream_addr","upstream_status":"$upstream_status"' '}'; access_log logs/access.log main;

如下截图日志request_time时间较大达到了60秒以上,upstream_response_time耗时基本都是几十毫秒,这种现象表明请求耗时在nginx之前到客户端的那一段网络上,而不在后端,需要负责网络维护的技术支持人员进一步分析处理。

如上现象问题在本文举例的拓扑图中就可以排查WAF、IPS、网络防火墙、DDOS这些设备,可以根据对应设备的日志或者抓包核查这些设备上的请求耗时,每个设备都核查日志比较繁琐有时网关设备不一定有这类日志,那么比较单间的方法就是网络链路分节点测试,验证问题会在那个节点复现。

# 案例二:移动端调试在线文档

https://open.seeyoncloud.com/cmpdev/ (opens new window)

# 案例三:PC端访问慢

# 2.4服务器本机测试

# 方案一:浏览器登录测试(可选)

问题界面按F12打开devtools 查看network模块勾选上disable cache 然后复现问题,当前界面的请求就会在下面的窗口输出,输出的请求会记录耗时、请求具体的URL 这些,定位慢请求时可以根据这个筛选,可以保存当前界面请求。

如下请求就是耗时长的,点击进去可以看到耗时是在等待服务器响应

# 2.5其他工具或者命令测试(可选)

同2.1 的方案二、方案三,在PC 端外网测试测试时方案二、方案三 的方法也可以参考

# 2.6网络抓包(可选)

# 2.6.1 fiddler抓包

客户端抓包:

https://www.jianshu.com/p/fee9e102f787 (opens new window)

抓包文件分析方法和2.2.1 都是一样的

# 2.6.2Wireshark抓包

下载地址:https://www.wireshark.org/download.html (opens new window)

下载wireshake 工具安装后,双击打开选择需要抓包的网卡就可以自动抓包,完成后保存抓包文件

# 2.7负载排查

同2.3

# 网络拦截排查

{width="4.975in" height="2.716666666666667in"}

# 3.1服务器上测试 {#服务器上测试 .list-paragraph}

# Windows 服务器

浏览器输入http://127.0.0.1 登录OA 测试。

# Linux服务器

有桌面的可以在浏览器输入http://127.0.0.1 登录OA 测试;

无桌面的可以找与服务器IP同网段的PC登录测试,如服务器IP为192.168.2.10,那可以找一台IP为192.168.2.x的PC登录http://192.168.2.10测试;

# 3.2网络排查 {#网络排查 .list-paragraph}

根据第一步的测试结果分析,服务器上http://127.0.0.1 登录测试功能正常而外网登录有问题,那就是OA到外网的这段网络有问题;排查内网到外网经过的网络设备或软件(网络防火墙、WAF、上网行为管理器、nginx、apache、F5),常见的就这些;

加密设备根据实际项目去找网管或厂家了解

# 网络防火墙

属于安全类软件自带主动拦截,建议对OA的所有请求配置放行策略;

# WAF(Web应用防护系统)

属于安全类软件自带主动拦截,建议对OA的所有请求配置放行策略;

# 上网行为管理器

属于安全类软件自带主动拦截,建议对OA的所有请求配置放行策略;

# 金万维快解析

这是一个三方的动态域名解析工具,可以解析服务器内网IP到外网域名;此工具出问题时会导致OA外网访问异常。

# 3.3公有云环境 {#公有云环境 .list-paragraph}

列如:AWS、华为云、阿里云、腾讯云、电信云、政务云、青岛云....

公有环境的验证方法同步骤1网络排查方向;

# 安全日志

会记录安全相关的日志,可以查看拦截记录。

# Web应用防火墙

可以查看拦截记录。

# 附录1:常被拦截的请求

如下URL只是举例,实际的url以现场实际为准,参数会有所差异,涉及大多数功能表单、插件、选人、提交流程

表单:

/seeyon/rest/cap4/form/saveOrUpdate

提交或选人:

/seeyon/ajax.do?method=ajaxAction&managerName=WFAjax&rnd=5717

M3:

/seeyon/rest/m3/login/verification

表单:

/seeyon/template/formTemplateDesignController.do?method=saveTemplate2Cache&isNew=true&independentModel=

提交或选人:

/seeyon/ajax.do?method=ajaxAction&managerName=WFAjax&rnd=70349

表单:

/seeyon/rest/cap4/batch/data-revise/delete

插件:

/seeyon/officeservlet

插件:

/seeyon/pdfservlet

提交或选人:

/seeyon/ajax.do?method=ajaxAction&managerName=permissionManager&rnd=32887

协同:

/seeyon/collaboration/collaboration.do?method=stepBack&affairId=-4761895026113101571&summaryId=6565903392897453455&isWFTrace=1

提交或选人:

/seeyon/ajax.do?method=ajaxAction&managerName=permissionManager&rnd=32887

协同:

/seeyon/rest/coll/finishWorkItem/-358865116312286189?cmprnd=58797861&option.n_a_s=1

编撰人:zhangpan、het