前言
相信大家在平常经常会遇到网络不稳定、抖动的情况,面对网络抖动,大家往往束手无策,本文介绍了一款实用的网络诊断工具——MTR,包括 MTR 的安装、功能和原理、使用方法等。
原理
介绍 MTR 之前,先来简单介绍下基本的网络测试工具 ping 和 traceroute。
ping
通过 ping 命令,可以判断网络的通断、丢包和延时情况。Ping 使用 ICMP 协议,当 ping 某目的主机时,源主机发出 ICMP echo 报文,根据实际情况,返回 ICMP echo reply 或 ICMP 差错消息报文。如果返回 echo reply 说明源目的地址直接可以通,并可以携带源目的地址间的延时;如果不能通信,则根据返回的 ICMP 差错报文,可以判断不能通信的原因。
traceroute
Traceroute 工具用来定位源和目的地址之间的路径。使用traceroute 命令可以显示从源地址出发,到目的地址之间所经过的所有路由器。使用 traceroute 命令时,源地址首先发出一个 TTL 为 1 的 UDP 报文,当经过路径的第一条时,TTL 减一变成零,于是第一跳路由器返回一个 TTL 超时的 ICMP 差错报文,于是源 server 知道了第一跳路由器的 IP 地址;然后源 server 发送一个 TTL 为 2 的 UDP 报文,过程类似,源 server 知道了第二跳路由器的 IP 地址;以此类推,当数据包到达最后一跳时,目的地址将返回一个端口不可达的 ICMP 差错报文,于是,源 server 知道数据包已经到达了目的地址,traceroute 结束。
MTR
MTR 工具集成了 ping 和 traceroute 两种工具的优点,可以看成是两者的结合体。
MTR 工具首先使用 traceroute 得出经过的每一跳路由器,然后使用 ping 命令,得出每一跳的延时和丢包率。通过 MTR 命令,可以很直观的看到数据包所经过的路径,以及路径网络质量。
MTR 的安装
本例使用滴滴云的 DC2 来演示 MTR 的安装和使用。笔者购买了一台滴滴云的 DC2 虚拟机,DC2 可绑定一个独立的公网弹性 IP,以方便测试。
DC2 的系统为CentOS7.3。
安装 MTR 十分简单,使用 yum 安装即可:
1 2 |
yum install mtr |
MTR 的使用
笔者安装的 MTR 版本为0.85.
以目的地址为 8.8.8.8 为例,最简单的使用方法为:
1 2 |
mtr 8.8.8.8 |
输入完命令后,MTR 会实时显示网络情况,可使用 ctrl+c 或者 q 退出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Keys: Help Display mode Restart statistics Order of fields quit Packets Pings Host Loss% Snt Last Avg Best Wrst StDev 1. 10.85.134.145 92.4% 67 1.3 1.4 1.3 1.7 0.0 2. 10.85.244.49 0.0% 67 1.0 1.7 0.8 10.9 2.2 3. ??? 4. 125.94.53.93 0.0% 67 3.5 27.2 3.3 70.9 17.2 5. 113.96.6.142 0.0% 67 1.7 5.7 1.4 15.4 2.8 6. 113.108.208.189 0.0% 67 5.3 4.2 1.8 17.4 2.6 7. 202.97.94.150 59.7% 67 3.4 5.2 3.1 21.6 4.4 8. 202.97.94.98 1.5% 67 5.8 10.0 4.5 21.9 3.3 9. 202.97.89.54 1.5% 67 83.4 84.4 63.5 109.0 9.5 10. 202.97.62.214 1.5% 67 7.5 9.6 7.4 19.8 2.1 11. 108.170.241.79 1.5% 67 15.1 12.9 9.6 21.9 2.6 12. 209.85.250.133 3.0% 67 12.3 15.2 9.4 49.0 9.2 13. 172.253.50.219 7.5% 67 21.6 25.4 19.8 74.8 8.2 14. 216.239.46.231 1.5% 67 23.6 22.7 20.5 28.0 1.6 15. ??? |
在交互页面按 H 键,可以显示帮助:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Command: ?|h help p pause (SPACE to resume) d switching display mode e toggle MPLS information on/off n toggle DNS on/off r reset all counters o str set the columns to display, default str='LRS N BAWV' j toggle latency(LS NABWV)/jitter(DR AGJMXI) stats c <n> report cycle n, default n=infinite i <n> set the ping interval to n seconds, default n=1 f <n> set the initial time-to-live(ttl), default n=1 m <n> set the max time-to-live, default n= # of hops s <n> set the packet size to n or random(n<0) b <c> set ping bit pattern to c(0..255) or random(c<0) Q <t> set ping packet's TOS to t u switch between ICMP ECHO and UDP datagrams y switching IP info z toggle ASN info on/off press any key to go back... |
几个常用的按键
- 按 p 键可以暂停,空格键恢复工作
- 按 d 键可以切换显示方式
- n 开启/关闭 DNS 解析
- r 清空所有统计信息,重新统计
- c 接数字,表示循环的次数,默认无限循环
- i 接数字,设置 ping 的间隔,默认 1s
- f 接数字,设置初始的 TTL 值,若设置为 3,则从第三行开始显示
- m 接数字,设置最大的 TTL 值
- s 接数字,设置包的大小,如果数字小于零,则为随机大小
按 o 键,可以选择可显示的列的种类, 根据提示设置即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Fields: LS NABWV <sp>: Space between fields L: Loss Ratio D: Dropped Packets R: Received Packets S: Sent Packets N: Newest RTT(ms) B: Min/Best RTT(ms) A: Average RTT(ms) W: Max/Worst RTT(ms) V: Standard Deviation G: Geometric Mean J: Current Jitter M: Jitter Mean/Avg. X: Worst Jitter I: Interarrival Jitter |
例如,选择 丢包率/发包/收包/丢包 最新/最小/最大/平均延时,则需要输入 LSRD NBWA:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Keys: Help Display mode Restart statistics Order of fields quit Packets Pings Host Loss% Snt Rcv Drop Last Best Wrst Avg 3. ??? 4. 125.94.53.93 0.0% 50 50 0 4.3 3.7 86.3 26.0 5. 113.96.6.142 0.0% 50 50 0 7.5 1.5 10.5 5.7 6. 113.108.208.189 0.0% 50 50 0 2.8 1.7 6.9 3.9 7. 202.97.94.150 61.2% 50 19 30 10.7 3.1 10.7 3.8 8. 202.97.94.98 0.0% 50 50 0 8.5 4.2 15.3 10.4 9. 202.97.89.54 8.0% 50 46 4 68.6 53.6 94.3 77.5 10. 202.97.62.214 2.0% 50 49 1 12.2 7.5 32.9 10.2 11. 108.170.241.79 2.0% 50 49 1 10.4 9.7 21.0 12.3 12. 209.85.249.156 0.0% 50 50 0 9.9 9.3 54.5 13.9 13. 216.239.41.7 0.0% 50 50 0 74.6 63.3 120.0 88.7 14. 216.239.51.215 6.0% 50 47 3 93.5 75.0 99.1 90.7 15. ??? |
如果不喜欢实时显示的方式,则可以使用 -r 或 –report 搭配 -c 参数使用,来定义循环多少次,并在结束循环时输出报告:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@linux~]# mtr -r -c 10 -o "LSRD NBWA" 8.8.8.8 HOST: 10-254-116-169 Loss% Snt Rcv Drop Last Best Wrst Avg 1.|-- ??? 100.0 10 0 10 0.0 0.0 0.0 0.0 2.|-- 10.85.244.49 0.0% 10 10 0 0.9 0.8 6.0 1.7 3.|-- ??? 100.0 10 0 10 0.0 0.0 0.0 0.0 4.|-- 125.94.53.93 20.0% 10 8 2 12.7 3.0 36.5 14.9 5.|-- 113.96.6.142 0.0% 10 10 0 6.3 3.0 9.5 5.6 6.|-- 113.108.208.189 0.0% 10 10 0 2.3 2.3 5.1 3.5 7.|-- 202.97.94.150 70.0% 10 3 7 3.4 3.2 3.4 3.3 8.|-- 202.97.94.98 10.0% 10 9 1 8.1 5.5 15.4 10.2 9.|-- 202.97.89.54 0.0% 10 10 0 81.1 70.9 90.3 80.3 10.|-- 202.97.62.214 0.0% 10 10 0 10.6 8.4 14.9 10.7 11.|-- 108.170.241.79 10.0% 10 9 1 14.3 12.0 14.8 13.5 12.|-- 209.85.249.156 0.0% 10 10 0 13.5 9.4 18.4 13.8 13.|-- 216.239.41.7 0.0% 10 10 0 79.7 78.8 96.6 88.0 14.|-- 216.239.51.215 0.0% 10 10 0 83.0 83.0 99.8 93.0 15.|-- ??? 100.0 10 0 10 0.0 0.0 0.0 0.0 [root@linux~]# |
总结
本文介绍了 MTR 的原理、安装和使用方法。作为一个 ping 和 traceroute 的结合体,希望 MTR 工具能为大家排查网络问题提供帮助!
本文作者:王晓丹