MTR 介绍
mtr
是几乎所有Linux发行版本预装的网络测试工具, 全称my traceroute, 用于网络联通性诊断.
mtr将ping和traceroute命令的功能并入了同一个工具中, 实现更强大的功能.
相对于traceroute命令只会做一次链路跟踪测试, mtr会对链路上的相关节点做持续探测并给出相应的统计信息.
所以, mtr命令能避免节点波动对测试结果的影响, 所以其测试联通性更正确.
mtr 参数列表
-F, --filename FILE 从文件读取探测的主机
-4 只使用IPv4协议
-6 只使用IPv6协议
-u, --udp 指定用UDP进行链路探测(mtr默认用ICMP)
-T, --tcp 指定用TCP进行链路探测(mtr默认用ICMP)
-a, --address ADDRESS 设置发送数据包的IP地址(一个主机有多个IP地址时)
-f, --first-ttl NUMBER 指定初始TTL, 默认为1
-m, --max-ttl NUMBER 指定探测的最大跳数
-U, --max-unknown NUMBER 最大未知主机数, 默认5
-P, --port PORT 目标端口号(TCP, SCTP, UDP)
-L, --localport LOCALPORT UDP的源端口号
-s, --psize PACKETSIZE 指定发送的数据包大小(单位字节bytes)
-B, --bitpattern NUMBER 指定有效载荷的位模式
-i, --interval SECONDS ICMP回显请求间隔
-G, --gracetime SECONDS 等待响应的秒数
-Q, --tos NUMBER 指定IP头中服务字段值的类型
-e, --mpls 显示来自ICMP扩展的信息
-Z, --timeout SECONDS 指定超时时间
-r, --report 启用report模式(直接显示统计信息)
-w, --report-wide 启用wide report模式(显示完整主机名,适用于主机名较长的情况)
-c, --report-cycles COUNT 设置发送的ping数, 默认是10
-j, --json 输出JSON格式
-x, --xml 输出xml格式
-C, --csv 输出csv格式
-l, --raw 输出原始格式
-p, --split 分割输出(简洁模式)
-t, --curses 使用基于curses的终端界面
--displaymode MODE 选择初始显示模式(0: 默认, 统计信息, 1: 无延迟信息的条形图, 2: 有延迟信息的条形图)
-n, --no-dns 显示IP地址时, 不尝试映射主机名
-b, --show-ips 显示IP和主机名
-o, --order FIELDS 指定要显示的字段
-o 选项的字段
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
-y, --ipinfo NUMBER 选择输出IP信息
-z, --aslookup 打印AS号
-h, --help 输出帮助信息
-v, --version 输出版本信息
例子
# 使用tcp方式, 并显示AS, 指定IPv4协议
mtr -rwzT4 google.com
# 输出
HOST Loss% Snt Last Avg Best Wrst StDev
1. AS399804 45.59.126.1 0.0% 10 1.2 1.2 1.1 1.5 0.1
2. AS53667 198.251.87.9 0.0% 10 0.5 6.0 0.5 21.1 7.1
3. AS??? 172.18.0.29 0.0% 10 1.2 4.1 1.2 12.1 3.9
4. AS6939 100ge0-70.core3.lax2.he.net 0.0% 10 9.9 13.9 8.5 32.5 8.8
5. AS6939 port-channel8.core2.lax1.he.net 0.0% 10 8.9 15.7 8.2 46.4 12.1
AS6939 100ge3-2.core1.lax2.he.net
6. AS??? google.as15169.any2ix.coresite.com 0.0% 10 9.8 13.8 8.5 32.9 7.4
AS??? 206.72.211.148.any2ix.coresite.com
AS??? eqix-la1.google-2.com
7. AS15169 108.170.247.129 0.0% 10 9.8 9.5 8.2 11.7 0.9
AS15169 108.170.247.161
8. AS15169 142.251.60.127 0.0% 10 8.3 15.9 8.3 38.1 10.4
AS15169 142.251.60.129
9. AS15169 lax31s15-in-f14.1e100.net 0.0% 10 8.5 13.2 8.3 44.8 11.4
mtr 返回的结果说明
- 第1列(Host): 节点IP地址和域名
- 第2列(Loss%): 节点丢包率, 数据包在每一跳的丢失率
- 第3列(Snt): 发包数量. 默认10, 可以通过-c参数指定
- Last、Avg: 探测延迟的 最近一次延迟、平均延迟, 单位毫秒. 一般主要看Avg的平均延迟
- Best、Worst: 探测延迟的 最小延迟、最大延迟, 单位毫秒
- StDev: 标准偏差, 越大说明相应节点越不稳定
Loss%(丢包率), 任一节点的丢包率如果不为零, 则说明这一跳网络可能存在问题.
导致节点丢包的原因通常有:
- 运营商基于安全或性能需求, 限制了节点的ICMP发送速率, 导致丢包.
- 节点确实存在异常, 导致丢包.
可以结合异常节点及其后续节点的丢包情况,来判定丢包原因:
- 如果随后节点均没有丢包, 则通常表示异常节点丢包是由于运营商策略限制所致. 可以忽略相关丢包.
- 如果随后节点也出现丢包, 则通常说明异常节点确实存在网络异常, 导致丢包.
- 另外, 上述两种情况可能同时发生(节点既存在策略限速, 又存在网络异常). 如果异常节点及其后续节点连续出现丢包, 而且各节点的丢包率不同, 通常以最后几跳的丢包率为准.