跳到主要内容

mtr

mtr 能实现丰富的探测报告。尤其是它对每一跳的丢包率的百分比,是用来定位路径中节点问题的重要指标。所以,当你在遇到“连接状况时好时坏的问题”的时候,单纯用一次性的 traceroute 恐怕难以看清楚,那就可以用 mtr,来获取更加全面和动态的链路状态信息了。

  • -r:以报告模式显示结果,它会持续显示网络路径的统计信息,而不是像传统的 traceroute 那样只显示一次结果
  • -c 10:指定发送 10 个探测数据包
$ mtr www.baidu.com -r -c 10
Start: 2022-01-07T04:05:02+0000
HOST: victorebpf Loss% Snt Last Avg Best Wrst StDev
1.|-- _gateway 0.0% 10 0.3 0.4 0.2 1.2 0.3
2.|-- 192.168.1.1 0.0% 10 1.6 1.8 1.4 3.2 0.5
3.|-- 100.65.0.1 0.0% 10 3.8 7.0 3.8 10.3 2.0
4.|-- 61.152.54.125 0.0% 10 4.0 4.3 3.6 5.1 0.5
5.|-- 61.152.25.110 30.0% 10 5.0 6.8 4.4 18.9 5.4
6.|-- 202.97.101.30 20.0% 10 7.8 6.6 5.4 7.8 0.8
7.|-- 58.213.95.110 80.0% 10 10.0 9.8 9.6 10.0 0.3
8.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
9.|-- 58.213.96.74 0.0% 10 10.5 12.7 9.9 24.7 4.9
10.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
11.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
12.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
13.|-- 180.101.49.12 0.0% 10 9.4 9.1 8.3 9.7 0.5

输出中,每一行代表一个网络节点,Loss%表示丢包率,Snt表示发送的数据包数量,Last表示最后一个数据包的响应时间,Avg表示平均响应时间,Best表示最好的响应时间,Wrst表示最差的响应时间,StDev表示响应时间的标准差。通过分析这些信息,可以了解网络连接的稳定性和问题所在。

为何中间节点丢包率更高?

网络设备(交换机和路由器)在“转发”和 “回复”这两个任务上的工作机制是不同的:

  • 对于“转发”,大部分工作是卸载到数据面的硬件芯片完成的,这也是实现高速转发的底层基础。
  • 对于“回复”,因为需要自己生成一个 ICMP 响应报文,那就需要动用自己的 CPU 资源了,速度就会慢一些。

另外还有一些原因会导致这个现象,比如,不少网络设备对自己的 ICMP 响应报文设置了限速(rate limit),这也会加剧这种中间节点丢包的情况。

一般来说,mtr 最好在两端都做。