当客户端访问目标服务器出现 ping 丢包或 ping 不通时,可以通过 tracert 或 mtr 等工具进行链路测试来判断问题来源。本文先介绍了进行链路测试的相关工具,然后对测试结果分析及测试步骤进行了说明。

链路测试工具介绍

根据操作系统类型的不同,链路测试所使用的工具也有所不同。分别简要介绍如下。

Linux 环境下链路测试工具介绍

traceroute 命令行工具

mtr 命令行工具(建议优先使用)

traceroute 命令行工具

traceroute 是几乎所有 Linux 发行版本预装的网络测试工具,用于跟踪 Internet 协议(IP)数据包传送到目标地址时经过的路径。

traceroute 先发送具有小的最大存活时间值(Max_TTL)的 UDP 探测数据包,然后侦听从网关开始的整个链路上的 ICMP TIME_EXCEEDED 响应。探测从TTL=1 开始,TTL 值逐步增加,直至接收到ICMP PORT_UNREACHABLE 消息。ICMP PORT_UNREACHABLE 消息用于标识目标主机已经被定位,或命令已经达到允许跟踪的最大 TTL 值。

traceroute 默认发送 UDP 数据包进行链路探测。可以通过 -I 参数来指定发送 ICMP 数据包用于探测。

示例输出

ping 网关超时25%丢包(丢包或不通时链路测试说明)(1)

常见可选参数说明:

mtr 命令行工具(建议优先使用)

mtr (My traceroute)也是几乎所有 Linux 发行版本预装的网络测试工具。他把 ping和 traceroute 的功能并入了同一个工具中,所以功能更强大。

mtr 默认发送 ICMP 数据包进行链路探测。可以通过 -u 参数来指定使用 UDP 数据包用于探测。

相对于 traceroute 只会做一次链路跟踪测试,mtr 会对链路上的相关节点做持续探测并给出相应的统计信息。所以,mtr能避免节点波动对测试结果的影响,所以其测试结果更正确,建议优先使用。

用法说明:

ping 网关超时25%丢包(丢包或不通时链路测试说明)(2)

示例输出:

ping 网关超时25%丢包(丢包或不通时链路测试说明)(3)

常见可选参数说明:

另外,也可以在 mtr 运行过程中,输入相应字母来快速切换模式,比如:

返回结果说明:

默认配置下,返回结果中各数据列的说明:

Windows 环境下链路测试工具介绍

TRACERT 命令行工具

TRACERT (Trace Route) 是 Windows 自带的网络诊断命令行实用程序,用于跟踪 Internet 协议 (IP) 数据包传送到目标地址时经过的路径。

TRACERT 通过向目标地址发送 ICMP 数据包来确定到目标地址的路由。在这些数据包中,TRACERT 使用了不同的 IP“生存期”(TTL) 值。由于要求沿途的路由器在转发数据包前至少必须将 TTL 减少 1,因此 TTL 实际上相当于一个跃点计数器 (hop counter)。当某个数据包的 TTL 达到零 (0) 时,相应节点就会向源计算机发送一个 ICMP“超时”的消息。

TRACERT 第一次发送 TTL 为 1 的数据包,并在每次后续传输时将 TTL 增加 1,直到目标地址响应或达到 TTL 的最大值。中间路由器发送回来的 ICMP“超时”消息中包含了相应节点的信息。

用法说明:

ping 网关超时25%丢包(丢包或不通时链路测试说明)(4)

示例输出:

ping 网关超时25%丢包(丢包或不通时链路测试说明)(5)

常见可选参数说明:

WinMTR 工具(建议优先使用)

WinMTR 是 mtr 工具在 Windows 环境下的图形化实现,但进行了功能简化,只支持 mtr部分参数的调整设置。WinMTR 默认发送ICMP 数据包进行探测,无法切换。

WinMTR 可以从其官方网站下载获取。

和 mtr 一样,相比 tracert,WinMTR 能避免节点波动对测试结果的影响,所以测试结果更正确。所以,在 WinMTR 可用的情况下,建议优先使用 WinMTR进行链路测试。

用法说明:

WinMTR 无需安装,直接解压运行即可。操作方法非常简单,说明如下:

  1. 如下图所示,运行程序后,在 Host 字段输入目标服务器域名或 IP(注意前面不要包含空格)。

ping 网关超时25%丢包(丢包或不通时链路测试说明)(6)

  1. 点击 Start 开始测试(开始测试后,相应按钮变成了 Stop)。

  2. 运行一段时间后,点击 Stop 停止测试。

  3. 其它选项说明:

返回结果说明:

默认配置下,返回结果中各数据列的说明:

链路测试结果分析简要说明

由于 mtr(WinMTR)有更高的准确性。本文以其测试结果为例,对链路测试结果的分析进行简要说明。

后续说明,以如下链路测试结果示例图为基础进行阐述:

ping 网关超时25%丢包(丢包或不通时链路测试说明)(7)

对链路测试结果进行分析时,需要关注如下要点:

网络区域

正常情况下,从客户端到目标服务器的整个链路,会显著的包含如下区域:

链路负载均衡

如前文链路测试结果示例图中的区域 D 所示。如果中间链路某些部分启用了链路负载均衡,则 mtr 只会对首尾节点进行编号和探测统计。中间节点只会显示相应的 IP 或域名信息。

结合Avg(平均值)和 StDev(标准偏差)综合判断

由于链路抖动或其它因素的影响,节点的 Best 和 Worst 值可能相差很大。而 Avg(平均值) 统计了自链路测试以来所有探测的平均值,所以能更好的反应出相应节点的网络质量。

而 StDev(标准偏差值)越高,则说明数据包在相应节点的延时值越不相同(越离散)。所以,标准偏差值可用于协助判断 Avg 是否真实反应了相应节点的网络质量。例如,如果标准偏差很大,说明数据包的延迟是不确定的。可能某些数据包延迟很小(例如:25ms),而另一些延迟却很大(例如:350ms),但最终得到的平均延迟反而可能是正常的。所以,此时 Avg 并不能很好的反应出实际的网络质量情况。

综上,建议的分析标准是:

Loss%(丢包率)的判断

任一节点的 Loss%(丢包率)如果不为零,则说明这一跳网络可能存在问题。导致相应节点丢包的原因通常有两种:

可以结合异常节点及其后续节点的丢包情况,来判定丢包原因:

另外,需要说明的是,前述两种情况可能同时发生。即相应节点既存在策略限速,又存在网络异常。对于这种情况,如果异常节点及其后续节点连续出现丢包,而且各节点的丢包率不同,则通常以最后几跳的丢包率为准。如前文链路测试结果示例图所示,在第 5、6、7跳均出现了丢包。所以,最终丢包情况,以第 7 跳的 40% 作为参考。

关于延迟

延迟跳变

如果在某一跳之后延迟明显陡增,则通常判断该节点存在网络异常。如前文链路测试结果示例图所示,从第 5 跳之后的后续节点延迟明显陡增,则推断是第 5跳节点出现了网络异常。

不过,高延迟并不一定完全意味着相应节点存在异常。如前文链路测试结果示例图所示,第 5 跳之后,虽然后续节点延迟明显陡增,但测试数据最终仍然正常到达了目的主机。所以,延迟大也有可能是在数据回包链路中引发的。所以,最好结合反向链路测试一并分析。

ICMP 限速导致延迟增加

ICMP 策略限速也可能会导致相应节点的延迟陡增,但后续节点通常会恢复正常。如前文链路测试结果示例图所示,第 3 跳有 100% 的丢包率,同时延迟也明显陡增。但随后节点的延迟马上恢复了正常。所以判断该节点的延迟陡增及丢包是由于策略限速所致。

常见链路异常场景和测试报告

常见的链路异常场景及测试报告实例如下所示:

目标主机网络配置不当

示例数据:

ping 网关超时25%丢包(丢包或不通时链路测试说明)(8)

在该示例中,数据包在目标地址出现了 100% 的丢包。乍一看是数据包没有到达,其实很有可能是目标服务器相关安全策略(比如防火墙、iptables 等)禁用了 ICMP 所致,导致目的主机无法发送任何应答。

所以,该场景需要排查目标服务器的安全策略配置。

ICMP 限速

示例数据:

ping 网关超时25%丢包(丢包或不通时链路测试说明)(9)

在该示例中,在第 5 跳出现了明显的丢包,但后续节点均未见异常。所以推断是该节点 ICMP 限速所致。

该场景对最终客户端到目标服务器的数据传输不会有影响,所以,分析的时候可以忽略。

环路

示例数据:

ping 网关超时25%丢包(丢包或不通时链路测试说明)(10)

在该示例中,数据包在第 5 跳之后出现了循环跳转,导致最终无法到达目标服务器。这通常是由于运营商相关节点路由配置异常所致。

所以,该场景需要联系相应节点归属运营商处理。

链路中断

示例数据:

ping 网关超时25%丢包(丢包或不通时链路测试说明)(11)

在该示例中,数据包在第 4 跳之后就无法收到任何反馈。这通常是由于相应节点中断所致。建议结合反向链路测试做进一步确认。

该场景需要联系相应节点归属运营商处理。

链路测试步骤

通常情况下,链路测试流程如下链路测试流程图所示:

ping 网关超时25%丢包(丢包或不通时链路测试说明)(12)

相关步骤详细说明如下:

获取本地网络对应公网 IP

在客户端本地网络访问 ip.taobao.com 等网站,如下图,获取本地网络对应的公网 IP。

ping 网关超时25%丢包(丢包或不通时链路测试说明)(13)

正向链路测试(ping 和 mtr)

从客户端向目标服务器做 ping 和 mtr 链路测试:

反向链路测试(ping 和 mtr)

进入目标服务器系统内部,做反向 ping 和 mtr 链路测试

测试结果分析

参阅前述说明,对测试结果进行分析。确认异常节点后,访问ip.taobao.com 等网站查询、获取相应节点归属运营商及网络。

如果是客户端本地网络相关节点出现异常,则需要对本地网络进行相应排查分析。如果是运营商相关节点出现异常,则需要直接或联系阿里云售后技术支持向相应运营商反馈问题。

,