免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

概述

当客户端访问目标服务器或负载均衡,使用ping命令测试出现丢包或不通时,可以通过MTR等工具进行链路测试来判断问题来源。本文先介绍了MTR工具的基本原理,然后对测试结果进行分析,以及对测试步骤进行了说明。

详细信息

MTR基本信息

  • MTR(My traceroute)是几乎所有Linux发行版本预装的网络测试工具,此工具也有对应的Windows版本,名称为WinMTR。
  • MTR工具将ping和traceroute命令的功能并入了同一个工具中,实现更强大的功能。

  • Linux版本的mtr命令默认发送ICMP数据包进行链路探测。可以通过“-u”参数来指定使用UDP数据包用于探测。

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

MTR使用方法

在Linux系统上使用

用法说明

mtr [-hvrctglspni46] [-help] [-version] [-report] [-report-cycles=COUNT] [-curses] [-gtk] [-raw] [-split] [-no-dns] [-address interface] [-psize=bytes/-s bytes] [-interval=SECONDS] HOSTNAME [PACKETSIZE]

常见可选参数说明:

  • -r 或 -report:以报告模式显示输出。

  • -p 或 -split:将每次追踪的结果分别列出来。

  • -s 或 -psize:指定ping数据包的大小。

  • -n 或 -no-dns:不对IP地址做域名反解析。

  • -a 或 -address:设置发送数据包的IP地址。用于主机有多个IP时。

  • -4:只使用IPv4协议。

  • -6:只使用IPv6协议。

  • 另外,也可以在mtr命令运行过程中,输入相应字母来快速切换模式。

  • ?或 h:显示帮助菜单。

  • d:切换显示模式。

  • n:切换启用或禁用DNS域名解析。

  • u:切换使用ICMP或UDP数据包进行探测。

示例输出

MTR工具使用说明与结果分析_运营商

返回结果

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

  • 第一列(Host):节点IP地址和域名。如前面所示,按n键可以切换显示。

  • 第二列(Loss%):节点丢包率。

  • 第三列(Snt):每秒发送数据包数。默认值是10,可以通过参数“-c”指定。

  • 第四列(Last):最近一次的探测延迟值。

  • 第五、六、七列(Avg、Best、Wrst):分别是探测延迟的平均值、最小值和最大值。

  • 第八列(StDev):标准偏差。越大说明相应节点越不稳定。

在Windows系统上使用

WinMTR是MTR工具在Windows环境下的图形化实现,但进行了功能简化,只支持MTR部分参数的调整设置。WinMTR默认发送ICMP数据包进行探测,无法切换。WinMTR可以从其官方网站下载获取。和mtr命令一样,相比tracert,WinMTR能避免节点波动对测试结果的影响,所以测试结果更正确。所以,在WinMTR可用的情况下,建议优先使用 WinMTR 进行链路测试。

用法说明

WinMTR无需安装,直接解压运行即可,操作方法非常简单。运行程序后,在Host字段输入目标服务器域名或 IP,注意前面不要包含空格。如下图所示。
MTR工具使用说明与结果分析_运营商_02
单击Start开始测试,开始测试后,相应按钮变成了Stop。运行一段时间后,单击Stop停止测试。其它选项说明:

  • Copy Text to clipboard:将测试结果以文本格式复制到粘贴板。

  • Copy HTML to clipboard:将测试结果以HTML格式复制到粘贴板。

  • Export TEXT:将测试结果以文本格式导出到指定文件。

  • Export HTML:将测试结果以HTML格式导出到指定文件。

  • Options:可选参数,包括:

  • Interval(sec):每次探测的间隔(过期)时间。默认为1秒。

  • Ping size(bytes): PING探测所使用的数据包大小,默认为64字节。

  • Max hosts in LRU list: LRU列表支持的最大主机数,默认值为128。

  • Resolve names:通过反查IP以域名显示相关节点。

返回结果

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

  • 第一列(Hostname):节点IP或域名。

  • 第二列(Nr):节点编号。

  • 第三列(Loss%):节点丢包率。

  • 第四列(Sent):已发送的数据包数量。

  • 第五列(Recv):已成功接收的数据包数量。

  • 第六、七、八、九列(Best 、Avg、Worst、Last):分别是到相应节点延迟的最小值、平均值、最大值和最后一次值。

  • 第八列(StDev):标准偏差,越大说明相应节点越不稳定。

链路测试步骤

通常情况下,链路测试流程如下图所示。
MTR工具使用说明与结果分析_运营商_03

获取本地网络对应公网IP

在客户端本地网络访问淘宝IP地址库等网站,获取本地网络对应的公网IP。

MTR工具使用说明与结果分析_服务器_04

正向链路测试(PING和MTR)

从客户端向目标服务器做PING和MTR链路测试。从客户端向目标服务器域名或IP做持续的PING测试,建议至少测试100个数据包,记录测试结果。根据客户端操作系统环境的不同,使用WinMTR或mtr命令,设置测试目的地址为目标服务器域名或IP,然后进行链路测试,记录测试结果。

反向链路测试(PING和MTR)

进入目标服务器系统内部,做反向PING和MTR链路测试。从目标服务器向客户端IP做持续的PING测试,建议至少测试100个数据包,记录测试结果。根据目标服务器操作系统环境的不同,使用WinMTR或mtr命令,设置测试目的地址为客户端IP,然后进行链路测试,记录测试结果。

测试结果分析

参阅前述说明,对测试结果进行分析。确认异常节点后,访问淘宝IP地址库等网站查询、获取相应节点归属运营商及网络。如果是客户端本地网络相关节点出现异常,则需要对本地网络进行相应排查分析。如果是运营商相关节点出现异常,则需要直接联系运营商,或联系阿里云售后技术支持向相应运营商反馈问题。

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

由于mtr(WinMTR)命令有更高的准确性,本文以其测试结果为例,对链路测试结果的分析进行简要说明。后续的说明,以如下链路测试结果示例图为基础进行阐述。

MTR工具使用说明与结果分析_链路_05

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

  • 网络区域

  • 链路负载均衡

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

  • Loss%(丢包率)的判断

  • 延迟

网络区域

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

客户端本地网络:本地局域网和本地网络提供商网络。如前文链路测试结果示例图中的区域A。如果该区域出现异常,如果是客户端本地网络相关节点出现异常,则需要对本地网络进行相应排查分析。否则,如果是本地网络提供商网络相关节点出现异常,则需要向当地运营商反馈问题。

运营商骨干网络:如前文链路测试结果示例图中的区域B。如果该区域出现异常,可以根据异常节点IP查询归属运营商,然后直接或通过阿里云售后技术支持,向相应运营商反馈问题。
目标服务器本地网络:目标主机归属网络提供商网络。如前文链路测试结果示例图中的区域C。如果该区域出现异常,则需要向目标主机归属网络提供商反馈问题。

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

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

由于链路抖动或其它因素的影响,节点的Best和Worst值可能相差很大。而Avg(平均值)统计了自链路测试以来所有探测的平均值,所以能更好的反应出相应节点的网络质量。而StDev(标准偏差值)越高,则说明数据包在相应节点的延时值越不相同(越离散)。所以标准偏差值可用于协助判断Avg是否真实反应了相应节点的网络质量。例如,如果标准偏差很大,说明数据包的延迟是不确定的。可能某些数据包延迟很小(例如:25ms),而另一些延迟却很大(例如:350ms),但最终得到的平均延迟反而可能是正常的。所以此时Avg并不能很好的反应出实际的网络质量情况。

综上,建议的分析标准如下:

  • 如果StDev很高,则同步观察相应节点的Best和Wrst,来判断相应节点是否存在异常。

  • 如果StDev不高,则通过Avg来判断相应节点是否存在异常。

    说明:上述StDev“高”或者“不高”,并没有具体的时间范围标准。而需要根据同一节点其它列的延迟值大小来进行相对评估。例如,如果Avg为30ms,那么,当StDev为25ms,则认为是很高的偏差。而如果Avg为325ms,则同样的StDev(25ms),反而认为是不高的偏差。

Loss%(丢包率)的判断

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

  • 运营商基于安全或性能需求,人为限制了节点的ICMP发送速率,导致丢包。

  • 节点确实存在异常,导致丢包。

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

  • 如果随后节点均没有丢包,则通常说明异常节点丢包是由于运营商策略限制所致。可以忽略相关丢包。如前文链路测试结果示例图中的第2跳所示。

  • 如果随后节点也出现丢包,则通常说明异常节点确实存在网络异常,导致丢包。如前文链路测试结果示例图中的第5跳所示。

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

关于延迟

延迟跳变

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

ICMP限速导致延迟增加

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

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

目标主机网络配置不当

MTR工具使用说明与结果分析_运营商_06
如上图所示,在该示例中,数据包在目标地址出现了100%的丢包。乍一看是数据包没有到达,其实很有可能是目标服务器相关安全策略,例如防火墙、iptables等禁用了ICMP所致,导致目的主机无法发送任何应答。所以,该场景需要排查目标服务器的安全策略配置。

ICMP限速

MTR工具使用说明与结果分析_链路_07
如上图所示,在该示例中,数据包在目标地址出现了100%的丢包。初步看是数据包没有到达,其实很有可能是目标服务器相关安全策略,例如防火墙、iptables 、运营商策略等禁用了ICMP所致,导致目的主机无法发送任何应答。所以,该场景需要排查目标服务器的安全策略配置,或结合反向MTR综合分析。

环路

MTR工具使用说明与结果分析_运营商_08
如上图所示,在该示例中数据包在第5跳之后出现了循环跳转,导致最终无法到达目标服务器。这通常是由于运营商相关节点路由配置异常所致。所以,该场景需要联系相应节点归属运营商处理。

链路中断

MTR工具使用说明与结果分析_丢包_09
如上图所示,在该示例中,数据包在第4跳之后就无法收到任何反馈。这通常是由于相应节点中断所致。建议结合反向链路测试做进一步确认。该场景需要联系相应节点归属运营商处理。