Introduce
当客户端访问目标服务器或负载均衡,使用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数据包进行探测。
示例输出
返回结果
默认配置下,返回结果中各数据列的说明如下。
- 第一列(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,注意前面不要包含空格。如下图所示。
单击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):标准偏差,越大说明相应节点越不稳定。
正向链路测试(PING和MTR)
从客户端向目标服务器做PING和MTR链路测试。从客户端向目标服务器域名或IP做持续的PING测试,建议至少测试100个数据包,记录测试结果。根据客户端操作系统环境的不同,使用WinMTR或mtr命令,设置测试目的地址为目标服务器域名或IP,然后进行链路测试,记录测试结果。
反向链路测试(PING和MTR)
进入目标服务器系统内部,做反向PING和MTR链路测试。从目标服务器向客户端IP做持续的PING测试,建议至少测试100个数据包,记录测试结果。根据目标服务器操作系统环境的不同,使用WinMTR或mtr命令,设置测试目的地址为客户端IP,然后进行链路测试,记录测试结果。
测试结果分析
参阅前述说明,对测试结果进行分析。确认异常节点后,访问淘宝IP地址库等网站查询、获取相应节点归属运营商及网络。如果是客户端本地网络相关节点出现异常,则需要对本地网络进行相应排查分析。如果是运营商相关节点出现异常,则需要直接联系运营商,或联系阿里云售后技术支持向相应运营商反馈问题。
链路测试结果分析简要说明
由于mtr(WinMTR)命令有更高的准确性,本文以其测试结果为例,对链路测试结果的分析进行简要说明。后续的说明,以如下链路测试结果示例图为基础进行阐述。
对链路测试结果进行分析时,需要关注如下几点:
- 网络区域
- 链路负载均衡
- 结合Avg(平均值)和 StDev(标准偏差)综合判断
- Loss%(丢包率)的判断
- 延迟
Reference
https://help.aliyun.com/knowledge_detail/98706.html - MTR工具使用说明与结果分析