MTR – Linux的网络诊断工具

guiyun affiliate

MTR介绍

MTR是一种简单的跨平台命令行网络诊断工具,它将常用tracerouteping程序的功能组合到一个工具中。以与traceroute类似的方式,mtr打印有关数据包从运行mtr的主机到用户指定的目标主机的路由的信息。

但是,mtr显示的信息多于traceroute:它确定了远程计算机的路径,同时打印了本地系统和远程计算机之间的Internet路由中的响应百分比以及所有网络跃点的响应时间。

当网站访问很慢或无法访问时,若排除其它显著问题,而检测到 ping 有明显丢包时,建议作链路测试。Linux 环境下,您可以通过 mtr 命令行工具(优先使用) 或 traceroute 命令行工具进行链路测试来判断问题来源。

MTR是如何工作的?

运行mtr后,它将探测本地系统与您指定的远程主机之间的网络连接。它首先建立主机之间的每个网络跳(网桥,路由器和网关等)的地址,然后ping每个网络跳(发送一个ICMP ECHO请求序列),以确定每台机器的链路质量。


在此操作过程中,mtr会输出有关每台计算机的一些有用统计信息 – 默认情况下会实时更新。


此工具预先安装在大多数Linux发行版上,并且在您通过Linux的网络诊断的10 mtr命令示例后相当容易使用,如下所述。

如果未安装mtr,则可以使用默认的包管理器将其安装在各自的Linux发行版上

-bash: mtr: command not found

  1. # yum install -y mtr

通常情况下,请依照下述步骤进行处理:

  1. 利用链路测试工具探测网络状况和服务器状态。

  2. 根据链路测试结果分析处理。

MTR网络诊断工具使用示例

1.使用mtr的最简单示例是提供远程计算机的域名或IP地址作为参数,例如baidu.com。此命令将显示实时更新的traceroute报告,直到您退出程序(按qCtrl + C)。

mtr-1024x212.png

2.您可以使用显示的标志强制mtr显示数字IP地址而不是主机名(通常是FQDN – 完全限定域名-n

3.如果您希望mtr显示主机名和数字IP号,请使用-b如图所示的标志。

4.要将ping的数量限制为特定值并在这些ping之后退出mtr,请使用该-c标志。如果从Snt列中观察到,一旦达到指定的ping数,则实时更新将停止,程序将退出。

5.您可以使用-r标志将其设置为报告模式,该标志是用于生成有关网络质量的统计信息的有用选项。您可以将此选项与选项一起使用-c以指定ping数。由于统计信息将打印到std输出,因此您可以将它们重定向到文件以供以后分析。

  1. # mtr -r -c 5 baidu.com> mtr-report

 

常见可选参数说明
  • -r 或 —report:以报告模式显示输出。

  • -p 或 —split:将每次追踪的结果分别列出来,而非如 —report 统计整个结果。

  • -s 或 —psize:指定 ping 数据包的大小。

  • -n 或 —no-dns:不对 IP 地址做域名反解析。

  • -a 或 —address:设置发送数据包的 IP 地址。用于主机有多个 IP 时。

  • -4:只使用 IPv4 协议。

  • -6:只使用 IPv6 协议。

在 mtr 运行过程中,您也可以输入相应字母来快速切换模式,各字母的含义如下:

  • ? 或 h:显示帮助菜单。

  • d:切换显示模式。

  • n:切换启用或禁用 DNS 域名解析。

  • u:切换使用 ICMP 或 UDP 数据包进行探测。

返回结果说明

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

  • 第一列(Host):节点 IP 地址和域名。如前面所示,按 n 键可以切换显示。

  • 第二列(Loss%):节点丢包率。

  • 第三列(Snt):每秒发送数据包数。默认值是 10,可以通过参数 -c 指定。

  • 第四列(Last):最近一次的探测延迟值。

  • 第五、六、七列(Avg、Best、Wrst):分别是探测延迟的平均值、最小值和最大值。

  • 第八列(StDev):标准偏差。越大说明相应节点越不稳定。

1-4.png

操作步骤

  1. 判断各区域是否存在异常,并根据各区域的情况分别处理。

    • 区域 A:客户端本地网络,即本地局域网和本地网络提供商网络。针对该区域异常,客户端本地网络相关节点问题,请对本地网络进行排查分析;本地网络提供商网络相关节点问题,请向当地运营商反馈。

    • 区域 B:运营商骨干网络。针对该区域异常,可根据异常节点 IP 查询归属运营商,然后直接或通过阿里云售后技术支持,向相应运营商反馈问题。

    • 区域 C:目标服务器本地网络,即目标主机归属网络提供商网络。针对该区域异常,需要向目标主机归属网络提供商反馈问题。

  2. 结合 Avg(平均值)和 StDev(标准偏差),判断各节点是否存在异常。

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

    • 若 StDev 不高,则通过 Avg 来判断相应节点是否存在异常。

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

  3. 查看节点丢包率,若 Loss% 不为零,则说明这一跳网络可能存在问题。

    导致节点丢包的原因通常有两种:

    • 人为限制了节点的 ICMP 发送速率,导致丢包。

    • 节点确实存在异常,导致丢包。

  4. 确定当前异常节点的丢包原因。

    • 若随后节点均没有丢包,说明当前节点丢包是由于运营商策略限制所致,可以忽略。如前文链路测试结果示例图中的第 2 跳所示。

    • 若随后节点也出现丢包,说明当前节点存在网络异常,导致丢包。如前文链路测试结果示例图中的第 5 跳所示。

      说明:前述两种情况可能同时发生,即相应节点既存在策略限速,又存在网络异常。对于这种情况,若当前节点及其后续节点连续出现丢包,而且各节点的丢包率不同,则通常以最后几跳的丢包率为准。如前文链路测试结果示例图所示,在第 5、6、7跳均出现了丢包。所以,最终丢包情况,以第 7 跳的 40% 作为参考。

  5. 通过查看是否有明显的延迟,来确认节点是否存在异常。通过如下两个方面进行分析:

    • 若某一跳之后延迟明显陡增,则通常判断该节点存在网络异常。如前文链路测试结果示例图所示,从第 5 跳之后的后续节点延迟明显陡增,则推断是第 5 跳节点出现了网络异常。

      注意:高延迟并不一定完全意味着相应节点存在异常,延迟大也有可能是在数据回包链路中引发的,建议结合 反向链路测试 一并分析。

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

guiyun affiliate

作者头像
南宫俊逸创始人

君子好学,自强不息~

上一篇:Linux vmstat命令详解
下一篇:CentOS 7 下安装GUI图形界面

相关推荐

4

发表评论