本文最后更新于 396 天前,其中的信息可能已经过时,如有错误请发送邮件到 wuxianglongblog@163.com
MTR 是一款强大的网络诊断工具,它集成了 traceroute 和 ping 的功能,并且会收集更多的信息,比如连接状态、可用性等等,在排查网络问题中,非常有用。
mtr(My traceroute)几乎是所有 Linux 发行版本预装的网络测试工具。其将 ping 和 traceroute 的功能合并,所以功能更强大。mtr 默认发送 ICMP 数据包进行链路探测。您也可以通过 - u 参数来指定使用 UDP 数据包进行探测。相对于 traceroute 只会做一次链路跟踪测试,mtr 会对链路上的相关节点做持续探测并给出相应的统计信息。所以,mtr 能避免节点波动对测试结果的影响,所以其测试结果更正确,建议优先使用。
| 在 Linux下可以直接使用 yum 工具(以 CentOS 为例)进行安装: |
| [root@iZbp1377m2iy8ro0dbnt1kZ~]# yum provides mtr #查看mtr命令是由哪个安装包提供Loaded plugins:fastestmirrorRepodataisover2weeksold.Installyum-cron?Or run:yummakecachefastDeterminingfastestmirrors*remi-php80:mirrors.tuna.tsinghua.edu.cn*remi-safe:mirrors.tuna.tsinghua.edu.cn2:mtr-0.85-7.el7.x86_64 :AnetworkdiagnostictoolRepo :base[root@iZbp1377m2iy8ro0dbnt1kZ~]# yum install mtr -y #安装mtr |
在 Windows 下,建议安装 besttrace ,这款工具带了 MTR 的功能。
在 macOS 下,建议使用 brew 进行安装。
mtr 命令用法#
mtr 命令最基础的使用很简单,直接使用命令:mtr ip 或域名即可
| mtr-husage: mtr[-BfhvrwctglxspQomniuT46][--help][--version][--report][--report-wide][--report-cycles=COUNT][--curses][--gtk][--csv|-C][--raw][--xml][--split][--mpls][--no-dns][--show-ips][--address interface][--filename=FILE|-F][--ipinfo=item_no|-y item_no][--aslookup|-z][--psize=bytes/-s bytes][--order fields][--report-wide|-w][--inet][--inet6][--max-ttl=NUM][--first-ttl=NUM][--bitpattern=NUM][--tos=NUM][--udp][--tcp][--port=PORT][--timeout=SECONDS][--interval=SECONDS]HOSTNAME |
| 常见可选参数说明 |
| • |
| • |
| • |
| • |
| • |
| • -4:只使用IPv4协议。 |
| • -6:只使用IPv6协议。 |
| 另外,也可以在mtr运行过程中,输入类似如下的字母用于快速切换模式。 |
| • ?或h:显示帮助菜单。 |
| • d:切换显示模式。 |
| • n:启用或禁用DNS域名解析。 |
| • u:切换使用ICMP或UDP数据包进行探测。 |
| MTR 参数详解 |
| -F, |
| -4 use IPv4 only |
| -6 use IPv6 only |
| -u, |
| -T, |
| -a, |
| -f, |
| -m, |
| -U, |
| -P, |
| -L, |
| -s, |
| -B, |
| -i, |
| -G, |
| -Q, |
| -e, |
| -Z, |
| -r, |
| -w, |
| -c, |
| -j, |
| -x, |
| -C, |
| -l, |
| -p, |
| -t, |
| |
| -n, |
| -b, |
| -o, |
| -y, |
| -z, |
| -h, |
| -v, |
示例#
| [root@iZbp1377m2iy8ro0dbnt1kZ ~] |
| Start: Mon Jul 26 16:33:13 2021 |
| HOST: iZbp1377m2iy8ro0dbnt1kZ Loss% Snt Last Avg Best Wrst StDev |
| 1.| |
| 2.| |
| 3.| |
| 4.| |
| 5.| |
| 6.| |
| 7.| |
| 8.| |
| 9.| |
| 10.| |
| 11.| |
| 12.| |
| 13.| |
| 14.| |
| 15.| |
| 16.| |
返回结果说明#
默认配置下,返回结果中各数据列的说明如下:
| • 第一列(Host):节点IP地址和域名。按n键可切换显示。 |
| • 第二列(Loss%):节点丢包率。 |
| • 第三列(Snt):每秒发送数据包数。默认值是10,可以通过-c参数指定。 |
| • 第四列(Last):最近一次的探测延迟。 |
| • 第五、六、七列(Avg、Best、Worst):分别是探测延迟的平均值、最小值和最大值。 |
| • 第八列(StDev):标准偏差,越大说明相应节点越不稳定。 |
Loss%(丢包率)的判断#
任一节点的 Loss%(丢包率)如果不为零,则说明这一跳网络可能存在问题。导致相应节点丢包的原因通常有以下两种:
・运营商基于安全或性能需求,限制了节点的 ICMP 发送速率,导致丢包。
・节点确实存在异常,导致丢包。
结合异常节点及其后续节点的丢包情况,并参见以下内容,判定丢包原因。
・如果随后节点均没有丢包,则通常表示异常节点丢包是由于运营商策略限制所致。可以忽略相关丢包。
・如果随后节点也出现丢包,则通常说明异常节点确实存在网络异常,导致丢包。
・另外,上述两种情况可能同时发生,即相应节点既存在策略限速,又存在网络异常。对于这种情况,如果异常节点及其后续节点连续出现丢包,而且各节点的丢包率不同,则通常以最后几跳的丢包率为准。
关于 Timeouts#
・有时可能看到 mtr 输出结果中有 (???),这可能是一些路由器将 ICMP 丢弃和没有应答产生超时导致的,或者是返回线路有问题。
・超时不一定是丢包的指示。 数据包仍然可以到达它们的目的地,而没有明显的数据包丢失或延迟。 超时可能是由于路由器为了 QoS (quality of service) 的目的丢弃数据包,或者可能是由于返回路由的某些问题导致的超时。
命令参考实例#
使用 - r 参数显示报告,默认是动态显示的:
使用 - c 参数设置每秒发送数据包数量:
使用 - s 参数指定 ping 数据包的大小:
| mtr -r -c30-s 1024www.baidu.com |