vps mtr 命令介绍

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发送速率, 导致丢包.。。。。
  • 节点确实存在异常, 导致丢包.

可以结合异常节点及其后续节点的丢包情况,来判定丢包原因:

  • 如果随后节点均没有丢包, 则通常表示异常节点丢包是由于运营商策略限制所致. 可以忽略相关丢包.
  • 如果随后节点也出现丢包, 则通常说明异常节点确实存在网络异常, 导致丢包.
  • 另外, 上述两种情况可能同时发生(节点既存在策略限速, 又存在网络异常). 如果异常节点及其后续节点连续出现丢包, 而且各节点的丢包率不同, 通常以最后几跳的丢包率为准.

有时mtr输出结果中有 ???, 表示没查到结果, 也可能是运营商策略限制或超时导致.