mtr对网络进行检测

MTR 网络质量检测手册

mtr 是一个集traceroute和ping为一体的网络测试工具

入门

安装

yum -y install mtr

参数对照

参数 说明
--version 显示版本
-r --report 进入报告模式,在-c参数指定的循环次数之后退出。
-w --report-wide 扩展报告模式,此模式不解析主机名
-c count (--report-cycles count) 设置每秒发送ping的次数
-s bytes (--psize bytes) packetsize 用于设置ping包大小,以字节为单位,包括ip和icmp标头。如果设置为负数,则每次迭代将使用不同的随机数包大小,直到该数字为止。
-t --curses 强制mtr使用基于光标的终端(如果可用)
-e --mpls 此选项 是显示来自icmp的response包的RFC4950扩展
-n --no-dns 强制显示ip,不解析主机名
-b --show-ips 同时显示ip和主机名,在split模式下,会额外加一个字段。在报告模式下,添加ip的空间太小,会被截断。使用-w 宽报告模式查看报告模式下的ip
-o fields order (--order fields order) 指定字段顺序 例如 -o "LSD NBAW"
-g --gtk 强制使用gtk+x11窗口(如果可用)
-p --split 设置为输出适合分割用户界面的格式
-l --raw 使用原始输出格式。更适合于测量结果的存档。它可以被解析成任何其他显示方法
-x --xml 使用xml方式输出
-a ip.add.re.ss (--address ip.add.re.ss) 传出数据包的套接字绑定到特定接口,以便任何书籍包都通过该接口发送。
-i seconds (--interval seconds) 可指定icmp回显之间的正秒数请求,默认为1
-m NUM (--max-ttl NUM) 指定最大跃点数(max time to live value)默认30
-f NUM (--first-ttl NUM) 指定要启动的ttl。默认为1
-B NUM (--bitpattern NUM) 指定要在有效负载中使用的位模式。应在0-255范围内。
-Q NUM (--tos NUM) 指定ip表头中"服务类型"字段的值。应在0-255范围内。
-u --udp 使用UDP报文,而不是icmp echo
-T --tcp 使用tcp syn 包 而不是icmp echo,packetsize将被忽略
-P port (--port port) tcp 端口
--timeout seconds 在放弃之前保持的tcp socket打开状态的秒数。 只会影响最后一跳。为此使用更多的文件描述符
-4 只使用ipv4
-6 只使用ipv6

返回说明

默认配置下,返回结果中各数据列的说明如下。

列名 说明
第一列(Host) 节点IP地址和域名。如前面所示,按n键可以切换显示。
第二列(Loss%) 节点丢包率。
第三列(Snt) 每秒发送数据包数。默认值是10,可以通过参数“-c”指定。
第四列(Last) 最近一次的探测延迟值。
第五、六、七列(Avg、Best、Wrst) 分别是探测延迟的平均值、最小值和最大值。
第八列(StDev) 标准偏差。越大说明相应节点越不稳定。

网络区域常规解读

正常情况下,从客户端到目标服务器的整个链路,会显著的包含如下区域:

客户端本地网络:本地局域网和本地网络提供商网络。如前文链路测试结果示例图中的区域A。如果该区域出现异常,如果是客户端本地网络相关节点出现异常,则需要对本地网络进行相应排查分析。否则,如果是本地网络提供商网络相关节点出现异常,则需要向当地运营商反馈问题。

运营商网络:如前文链路测试结果示例图中的区域B。如果该区域出现异常,可以根据异常节点IP查询归属运营商,然后直接或通过阿里云售后技术支持,向相应运营商反馈问题。
目标服务器本地网络:目标主机归属网络提供商网络。如前文链路测试结果示例图中的区域C。如果该区域出现异常,则需要向目标主机归属网络提供商反馈问题。

链路负载均衡:如前文链路测试结果示例图中的区域D。如果中间链路某些部分启用了链路负载均衡,则mtr命令只会对首尾节点进行编号和探测统计。中间节点只会显示相应的IP或域名信息。

结合Avg(平均值)和StDev(标准偏差)综合判断

由于链路抖动或其它因素的影响,节点的Best和Worst值可能相差很大。而Avg(平均值)统计了自链路测试以来所有探测的平均值,所以能更好的反应出相应节点的网络质量

而StDev(标准偏差值)越高,则说明数据包在相应节点的延时值越不相同(越离散)。所以标准偏差值可用于协助判断Avg是否真实反应了相应节点的网络质量

例如,如果标准偏差很大,说明数据包的延迟是不确定的。可能某些数据包延迟很小(例如:25ms),而另一些延迟却很大(例如:350ms),但最终得到的平均延迟反而可能是正常的。所以此时Avg并不能很好的反应出实际的网络质量情况。

综上,建议的分析标准如下:

如果StDev很高

则同步观察相应节点的Best和Wrst,来判断相应节点是否存在异常。

如果StDev不高

则通过Avg来判断相应节点是否存在异常。

说明

上述StDev“高”或者“不高”,并没有具体的时间范围标准。而需要根据同一节点其它列的延迟值大小来进行相对评估。例如,如果Avg为30ms,那么,当StDev为25ms,则认为是很高的偏差。而如果Avg为325ms,则同样的StDev(25ms),反而认为是不高的偏差。

Loss%(丢包率)的判断

任一节点的Loss%(丢包率)如果不为零,则说明这一跳网络可能存在问题。导致相应节点丢包的原因通常有两种。

  • 运营商基于安全或性能需求,人为限制了节点的ICMP发送速率,导致丢包。
  • 节点确实存在异常,导致丢包。

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

  • 如果随后节点均没有丢包,则通常说明异常节点丢包是由于运营商策略限制所致。可以忽略相关丢包。如前文链路测试结果示例图中的第2跳所示。
  • 如果随后节点也出现丢包,则通常说明异常节点确实存在网络异常,导致丢包。如前文链路测试结果示例图中的第5跳所示。
  • 另外,需要说明的是,前述两种情况可能同时发生。即相应节点既存在策略限速,又存在网络异常。对于这种情况,如果异常节点及其后续节点连续出现丢包,而且各节点的丢包率不同,则通常以最后几跳的丢包率为准。如前文链路测试结果示例图所示,在第 5、6、7跳均出现了丢包。所以,最终丢包情况,以第7跳的40%作为参考。

延迟

延迟跳变

如果在某一跳之后延迟明显陡增,则通常判断该节点存在网络异常。如前文链路测试结果示例图所示,从第5跳之后的后续节点延迟明显陡增,则推断是第5跳节点出现了网络异常。不过,高延迟并不一定完全意味着相应节点存在异常。如前文链路测试结果示例图所示,第5跳之后,虽然后续节点延迟明显陡增,但测试数据最终仍然正常到达了目的主机。所以,延迟大也有可能是在数据回包链路中引发的。所以,最好结合反向链路测试一并分析。

ICMP限速导致延迟增加

ICMP策略限速也可能会导致相应节点的延迟陡增,但后续节点通常会恢复正常。如前文链路测试结果示例图所示,第3跳有 100%的丢包率,同时延迟也明显陡增。但随后节点的延迟马上恢复了正常。所以判断该节点的延迟陡增及丢包是由于策略限速所致。这种情况下需要结合反向mtr综合分析

环路

如上图所示,在该示例中数据包在第5跳之后出现了循环跳转,导致最终无法到达目标服务器。这通常是由于运营商相关节点路由配置异常所致。所以,该场景需要联系相应节点归属运营商处理。

链路中断

这通常是由于相应节点中断所致。建议结合反向链路测试做进一步确认。该场景需要联系相应节点归属运营商处理。

参考案例

mtr -r www.baidu.com

另见

posted @ 2022-11-01 14:58  天雨流芳=.=  阅读(515)  评论(0编辑  收藏  举报