ping不通或丢包时如何进行链路测试?
问题描述
在云主机上访问其他网络资源时,出现网络卡顿。执行ping命令,存在丢包或时延过高的问题。
丢包或时延较高可能是链路拥塞、链路节点故障、服务器负载高、系统设置问题等原因引起。
在排除云主机自身原因后,您可以使用Tracert或MTR工具进行进一步诊断。
本节内容导航
>Windows操作系统Tracert介绍和使用
Tracert是路由跟踪程序,Tracert命令用来显示数据包到达目标主机所经过的路径,并显示到达每个节点的时间。Tracert命令功能与Ping命令类似,但获得的信息要比Ping命令详细,它可以显示数据包所走的全部路径、节点的IP以及时间。
登录Windows云主机。
打开cmd命令窗,执行以下命令跟踪IP地址。
1
tracert IP地址/网站地址
例如:tracert www.baidu.com
1
2
3
4
5
6
7
8
9
10
11
12
13C:Userscindy>tracert www.baidu.com
通过最多 30 个跃点跟踪
到 www.a.shifen.com [112.80.248.75] 的路由:
1 1 ms 1 ms 1 ms 202.120.2.64
2 5 ms 2 ms 1 ms 202.120.2.97
3 28 ms 6 ms 2 ms 10.32.73.253
4 20 ms 3 ms 2 ms 10.32.31.241
5 4 ms 11 ms 6 ms 10.255.38.58
6 4 ms 4 ms 5 ms 10.255.38.1
7 9 ms 10 ms 10 ms 10.255.38.254
8 * 4 ms * 202.112.27.1
9 5 ms 6 ms 4 ms 101.4.115.105
10 25 ms 23 ms 23 ms 101.4.117.30
对数据节点分析如下:
- Tracert默认最大跳数30,第1列为起跳顺序号。
- Tracert每次会发送三个数据包,第2、3、4列为对应三个数据包的返回时间。第5列为跳转的IP节点。
- 假如某一层中出现了“ * request timed out”,那么则需要定位这层的问题,可能这里导致连接不到目标节点。
Linux操作系统MTR介绍和使用
MTR 是一款强大的网络诊断工具,它集成了 traceroute 和 ping 的功能,并且会收集更多的信息,比如连接状态、可用性等等,在排查网络问题中,非常有用。
MTR默认发送ICMP数据包进行链路探测。您也可以通过-u参数来指定使用UDP数据包进行探测。相对于traceroute只会做一次链路跟踪测试,MTR会对链路上的相关节点做持续探测并给出相应的统计信息。所以,MTR能避免节点波动对测试结果的影响,所以其测试结果更正确,建议优先使用。
安装MTR
MTR几乎是所有Linux发行版本预装的网络测试工具,如果您的Linux云主机没有安装MTR,则可以执行以下命令进行安装:
CentOS 操作系统:
1
yum install mtr
Ubuntu 操作系统:
1
sudo apt-get install mtr
MTR命令用法
MTR命令最基础的使用很简单,直接使用命令:mtr ip或域名即可
常见可选参数说明
- -r/–report:结果以报告形式输出。
- -p/–split:与 –report相对,分别列出每次追踪的结果。
- -c/–report-cycles:设置每秒发送的数据包数量,默认是10。
- -s/–psize:设置数据包的大小。
- -n/–no-dns:不对IP地址做域名解析。
- -a/–address:用户设置发送数据包的IP地址,主要用户单一主机多个IP地址的场景。
- -4:只使用IPv4协议。
- -6:只使用IPv6协议。
另外,也可以在mtr运行过程中,输入类似如下的字母用于快速切换模式:
- ?或h:显示帮助菜单。
- d:切换显示模式。
- n:启用或禁用DNS域名解析。
- u:切换使用ICMP或UDP数据包进行探测。
示例
以本机到IP为www.baidu.com的服务器为例。
执行以下命令,以报告形式输出MTR的诊断报告。
1 | mtr 119.xx.xx.xx -- report |
- 回显信息如下:
1 | [root@dbnt1kZ ~]# mtr -rn www.baidu.com |
- 返回结果说明:
默认配置下,返回结果中各数据列的说明如下:- 第一列(Host):节点IP地址和域名。按n键可切换显示。
- 第二列(Loss%):节点丢包率。
- 第三列(Snt):每秒发送数据包数。默认值是10,可以通过
-c
参数指定。 - 第四列(Last):最近一次的探测延迟。
- 第五、六、七列(Avg、Best、Worst):分别是探测延迟的平均值、最小值和最大值。
- 第八列(StDev):标准偏差,越大说明相应节点越不稳定。
Loss%(丢包率)的判断:
任一节点的Loss%(丢包率)如果不为零,则说明这一跳网络可能存在问题。导致相应节点丢包的原因通常有以下两种:
- 运营商基于安全或性能需求,限制了节点的ICMP发送速率,导致丢包。
- 节点确实存在异常,导致丢包。
结合异常节点及其后续节点的丢包情况,并参见以下内容,判定丢包原因。
- 如果随后节点均没有丢包,则通常表示异常节点丢包是由于运营商策略限制所致。可以忽略相关丢包。
- 如果随后节点也出现丢包,则通常说明异常节点确实存在网络异常,导致丢包。
另外,上述两种情况可能同时发生,即相应节点既存在策略限速,又存在网络异常。对于这种情况,如果异常节点及其后续节点连续出现丢包,而且各节点的丢包率不同,则通常以最后几跳的丢包率为准。
关于Timeouts:
- 有时可能看到mtr输出结果中有(???),这可能是一些路由器将ICMP丢弃和没有应答产生超时导致的,或者是返回线路有问题。
- 超时不一定是丢包的指示。 数据包仍然可以到达它们的目的地,而没有明显的数据包丢失或延迟。 超时可能是由于路由器为了QoS(quality of service)的目的丢弃数据包,或者可能是由于返回路由的某些问题导致的超时。
命令参考实例:
使用-r参数显示报告,默认是动态显示的:
1
mtr -r www.badu.com
使用-c参数设置每秒发送数据包数量:
1
mtr -r -c 30 www.baidu.com
使用-s参数指定ping数据包的大小:
1
mtr -r -c 30 -s 1024 www.baidu.com
报告分析处理
以下图为例分析MTR的报告。
- 服务器本地网络:即图中A区域,代表本地局域网和本地网络提供商网络。
- 如果客户端本地网络中的节点出现异常,则需要对本地网络进行相应的排查分析。
- 如果本地网络提供商网络出现异常,则需要向当地运营商反馈问题。
- 运营商骨干网络:即图中B区域,如果该区域出现异常,可以根据异常节点的IP查询其所属的运营商,向对应运营商进行反馈。
- 目标端本地网络:即图中C区域,即目标服务器所属提供商的网络。
- 如果丢包发生在目的服务器,则可能是目的服务器的网络配置原因,请检查目的服务器的防火墙配置。
- 如果丢包发生在接近目的服务器的几跳,则可能是目标服务器所属提供商的网络问题。
常见的链路异常案例
目标主机配置不当
如下示例所示,数据包在目标地址出现了100%的丢包。从数据上看是数据包没有到达,其实很有可能是目标服务器网络配置原因,需检查目的服务器的防火墙配置。
1
2
3
4
5
6
7
8
9
10Host Loss% Snt Last Avg Best Wrst StDev
1. ???
2. ???
3. 1XX.X.X.X 0.0% 10 521.3 90.1 2.7 521.3 211.3
4. 11X.X.X.X 0.0% 10 2.9 4.7 1.6 10.6 3.9
5. 2X.X.X.X 80.0% 10 3.0 3.0 3.0 3.0 0.0
6. 2X.XX.XX.XX 0.0% 10 1.7 7.2 1.6 34.9 13.6
7. 1XX.1XX.XX.X 0.0% 10 5.2 5.2 5.1 5.2 0.0
8. 2XX.XX.XX.XX 0.0% 10 5.3 5.2 5.1 5.3 0.1
9. 1XX.1XX.XX.X 100.0% 10 0.0 0.0 0.0 0.0 0.0ICMP限速
如下示例所示,在第5跳出现丢包,但后续节点均未见异常。所以推断是该节点ICMP限速所致。该场景对最终客户端到目标服务器的数据传输不会有影响,分析时可以忽略此种场景。
1
2
3
4
5
6
7
8
9Host Loss% Snt Last Avg Best Wrst StDev
1. 1XX.XX.XX.XX 0.0% 10 0.3 0.6 0.3 1.2 0.3
2. 1XX.XX.XX.XX 0.0% 10 0.4 1.0 0.4 6.1 1.8
3. 1XX.XX.XX.XX 0.0% 10 0.8 2.7 0.8 19.0 5.7
4. 1XX.XX.XX.XX 0.0% 10 6.7 6.8 6.7 6.9 0.1
5. 1XX.XX.XX.XX 0.0% 10 27.2 25.3 23.1 26.4 2.9
6. 1XX.XX.XX.XX 0.0% 10 39.1 39.4 39.1 39.7 0.2
7. 1XX.XX.XX.XX 0.0% 10 39.6 40.4 39.4 46.9 2.3
8. 1XX.XX.XX.XX 0.0% 10 39.6 40.5 39.5 46.7 2.2环路
如下示例所示,数据包在第5跳之后出现了循环跳转,导致最终无法到达目标服务器。出现此场景是由于运营商相关节点路由配置异常所致,需联系相应节点归属运营商处理。
1
2
3
4
5
6
7
8
9
10Host Loss% Snt Last Avg Best Wrst StDev
1. 1XX.XX.XX.XX 0.0% 10 0.3 0.6 0.3 1.2 0.3
2. 1XX.XX.XX.XX 0.0% 10 0.4 1.0 0.4 6.1 1.8
3. 1XX.XX.XX.XX 0.0% 10 0.8 2.7 0.8 19.0 5.7
4. 1XX.XX.XX.XX 0.0% 10 6.7 6.8 6.7 6.9 0.1
5. 1XX.XX.XX.65 0.0% 10 0.0 0.0 0.0 0.0 0.0
6. 1XX.XX.XX.65 0.0% 10 0.0 0.0 0.0 0.0 0.0
7. 1XX.XX.XX.65 0.0% 10 0.0 0.0 0.0 0.0 0.0
8. 1XX.XX.XX.65 0.0% 10 0.0 0.0 0.0 0.0 0.0
9. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0链路中断
如下示例所示,数据包在第4跳之后就无法收到任何反馈。这通常是由于相应节点中断所致。建议结合反向链路测试做进一步确认。该场景需要联系相应节点归属运营商处理。
1
2
3
4
5
6
7
8
9
10Host Loss% Snt Last Avg Best Wrst StDev
1. 1XX.XX.XX.XX 0.0% 10 0.3 0.6 0.3 1.2 0.3
2. 1XX.XX.XX.XX 0.0% 10 0.4 1.0 0.4 6.1 1.8
3. 1XX.XX.XX.XX 0.0% 10 0.8 2.7 0.8 19.0 5.7
4. 1XX.XX.XX.XX 0.0% 10 6.7 6.8 6.7 6.9 0.1
5. 1XX.XX.XX.XX 0.0% 10 0.0 0.0 0.0 0.0 0.0
6. 1XX.XX.XX.XX 0.0% 10 0.0 0.0 0.0 0.0 0.0
7. 1XX.XX.XX.XX 0.0% 10 0.0 0.0 0.0 0.0 0.0
8. 1XX.XX.XX.XX 0.0% 10 0.0 0.0 0.0 0.0 0.0
9 1XX.XX.XX.XX 0.0% 10 0.0 0.0 0.0 0.0 0.0