一、MTR介绍

我们一般常用的网络检测工具有 ping,tracert,nslookup,这些一般用来判断主机的网络连通性,而其实 Linux 中有一个更好用的网络联通性判断工具,它可以结合ping nslookup tracert 来判断网络的相关特性,这个命令就是 mtr

mtr 全称 my traceroute,是一个把 ping 和 traceroute 合并到一个程序的网络诊断工具。

注释:traceroute默认使用UDP数据包探测,而mtr默认使用ICMP报文探测,ICMP在某些路由节点的优先级要比其他数据包低,所以测试得到的数据可能低于实际情况,但这并不妨碍他是一款优秀的网络监测工具

二、安装方式(Linux)

  • Linux可以直接运行命令进行安装。
#Debian/Ubuntu 系统
sudo apt install mtr

#RedHat/CentOS 系统
sudo yum install mtr 

三、使用

  • MTR使用非常简单,示例:
#测试本机到qq.com的路由以及连接情况
[root@localhost ~]# mtr qq.com

在这里插入图片描述

  • 具体输出的参数含义为:

Host: IP地址,前面的数据表示第几挑,例如:1. 10.0.2.1表示第一跳经过了10.0.2.1
Loss%: 丢包率
Snt: 已发送的包数
Last: 最后一个包的延时
Avg: 平均延时
Best: 最低延时
Wrst: 最差延时
StDev: 方差,稳定性

四、 选项参数说明

(1)-r 或–report

  • 单独使用mtr + 域名、ip地址时,输出的数据是动态的,并且如果不中断的话,会一直运行,也就是会一直刷新数据。
  • mtr提供-r--report选项,使用此选项时,mtr会把得到的数据打印成报告,中间的过程默认是mtr向目标主机发送10个ICMP包,然后直接输出结果,通常情况下需要数秒时间来生成报告
  • mtr报告由一系列跳数组成,每一跳意味着数据包达到目的主机过程中经过的节点或者路由器
  • 默认使用-r来生成报告,即默认只发送10个数据包,当然也可以使用-c参数自定义数据包的数量
  • 示例:
[root@localhost ~]# mtr -r qq.com
Start: Thu Dec 23 16:03:35 2021
HOST: localhost.localdomain       Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- gateway                    0.0%    10    1.6   2.9   1.4  14.1   3.9
  2.|-- 10.0.100.6                 0.0%    10    0.6   0.6   0.5   0.7   0.0
  3.|-- 111.206.233.193            0.0%    10    7.0  31.8   7.0  69.6  22.1
  4.|-- 10.255.255.5               0.0%    10    3.7  22.6   3.7  85.6  31.1
  5.|-- 10.255.255.33              0.0%    10    2.2   2.3   1.9   3.1   0.0
  6.|-- 10.15.82.33                0.0%    10    2.3   3.4   2.1   4.9   0.8
  7.|-- 61.135.194.101             0.0%    10    1.4   1.3   1.1   1.7   0.0
  8.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  
[root@localhost ~]# mtr -r baidu.com
Start: Thu Dec 23 16:13:19 2021
HOST: localhost.localdomain       Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- gateway                    0.0%    10    1.5   1.6   1.4   2.2   0.0
  2.|-- 10.0.100.6                 0.0%    10    0.5   0.6   0.5   0.6   0.0
  3.|-- 111.206.233.193            0.0%    10   42.0  20.7   3.8  71.9  22.7
  4.|-- 10.255.255.5               0.0%    10    7.8  11.9   3.8  45.8  14.9
  5.|-- 10.255.255.33              0.0%    10   30.5   5.2   2.0  30.5   8.9
  6.|-- 10.15.82.33                0.0%    10    2.4   3.4   2.4   7.1   1.4
  7.|-- 61.135.194.101             0.0%    10    1.2   1.2   1.1   1.3   0.0
  8.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0

(2)-s 或 --packetsize

  • 使用 -s 来指定ping数据包的大小
mtr -s 50 qq.com

转移:100 bytes 数据包会用来发送,测试,如果设置为负数,则每一次发送的数据包的大小都会是一个随机数。

(3)-c

指定发送数量

mtr -c 100 qq.com

(4)-n

  • 使用-n参数会只让mtr输出ip,而不对主机名(hostname)进行解释
[root@localhost ~]# mtr -n baidu.com

在这里插入图片描述

五、MTR结果详解

  • 当我们分析 MTR 报告时候,除了可以查看两个服务器之间的路径之外,MTR 在它的七列输出数据中提供了很多有价值的数据统计报告。

    1. Loss% :展示了数据包在每一跳的丢失率

    2. Snt :记录了多少个数据包被送出 (使用 –report-r参数默认会送出10个数据包,-c发送指定数量的数据包)

    3. Last、Avg、Best、Wrst:表示数据包往返的时间,使用的是毫秒( ms )单位表示。

      Last 表示最后一个数据包所用的时间

      Avg 表示评价时间

      Best 和 Wrst 表示最小和最大时间。在大多数情况下,平均时间( Avg)列需要我们特别注意。

    4. StDev: 提供了数据包在每个主机的标准偏差。如果标准偏差越高,说明数据包在这个节点的延时越不相同。标准偏差会让您了解到平均延时是否是真的延时时间的中心点,或者测量数据受到某些问题的干扰。

      例如:如果标准偏差很大,说明数据包的延迟是不确定的。一些数据包延迟很小(例如:25ms),另一些数据包延迟很大(例如:350ms)。当10个数据包全部发出后,得到的平均延迟可能是正常的,但是平均延迟是不能很好的反应实际情况的。

      如果标准偏差很高,使用最好和最坏的延迟来确定平均延迟是一个较好的方案。

    5. 在大多数情况下,可以把 MTR 的输出分成三大块。

      (1)第二或第三跳一般都是您的本地 ISP

      (2)倒数第二或第三跳一般为您目的主机的ISP

      (3)中间的节点是数据包经过的路由器。

六、网络丢包

  • 如果在任何一跳看到了Loss%的百分比不为0.0%,就说明这一跳可能有问题了。但是发生丢包的现象有很多,例如:

    (1)很多服务器提供商人为限制ICMP的发送速率

    (2)网络不好

    (3)互联网设施的维护或者短暂的网络拥挤

  • 如何分辨是人为限制还是确定有丢包现象(常见判断方法)

    • 当出现丢包现象,需要确认丢包的下一跳是否有丢包现象,如果没有,说明这次丢包现象是人为的,如果丢包的下一跳,甚至与之后的几跳都有丢包现象的话,说明这次丢包是有问题的。

    • 但是,当我们看到不同的丢包率时,通常还是要以最后几条为准

    • 互联网设施的维护或短暂的网络拥挤可能会带来短暂的丢包率,当出现短暂的10%丢包率时候,应用层的程序会弥补这点损失

    注意:ICMP包的速率限制和丢失有可能会同时发生

七、网络延迟

  • mtr可以看到本地到目的之间的时延,因为是不同的位置,延迟通常会随着条数的增加而增加,所以延迟通常取决与节点之间的物理距离和线路的质量

  • 示例:

    在第5跳之前的last所用时间都是个位数,但是在第6跳时,last所用时间达到了100+,这个时候可能的情况有:

    (1)第5跳到第6跳属于不同地域,物理距离的增加导致时延增加

    (2)第6跳的路由器配置不当导致

    (3)线路拥堵

    当然还有其他情况,上面的只是常见情况,当遇到问题时还是需要进行具体的分析才行

  • 高延迟并不一定表示当前路由器有问题,延迟增大的原因也有可能时在数据包返回过程中引发的,所以一般需要进行双向的、互相的mtr测试

  • 注意:如果对ICMP进行了速率限制也可能会增加延迟,但是一般可以查看最后一条的时延来判断

八、结尾

当然还有其他情况,上面的只是常见情况,当遇到问题时还是需要进行具体的分析才行

  • 高延迟并不一定表示当前路由器有问题,延迟增大的原因也有可能时在数据包返回过程中引发的,所以一般需要进行双向的、互相的mtr测试

  • 注意:如果对ICMP进行了速率限制也可能会增加延迟,但是一般可以查看最后一条的时延来判断

八、结尾

mtr的检测报告显示的路由问题大多数都是暂时性的,大部分的问题都会在24小时之内被解决,当遇到网络问题后,可以选择对自己的服务供应商说明自己的问题,在联系供应商时,可以发送mtr的检测报告,可以帮助供应商快速的解决问题。但是在实际环境中,路由问题还是比较少见的,常见的一般都是因为物理距离太长、网络拥挤等,可以去选择购买cnd,减少网络延迟等

Logo

更多推荐