使用 mtr 命令排查网络问题


共计 4393 个字符,预计需要花费 11 分钟才能阅读完成。

一、简介

常用的 PingTraceroutenslookup 一般用来判断主机的网络连通性,其实有一个更好用的网络联通性判断工具,这个命令就是 MTRMTR 结合了 TraceroutePing 的功能,提供了更为丰富的信息,包括实时的网络状态和统计数据。

Traceroute 默认使用 UDP 数据包探测,而 MTR 默认使用 ICMP 报文探测,ICMP 在某些路由节点的优先级要比其他数据包低,所以测试得到的数据可能低于实际情况。另外 Traceroute 原理, 第 N+1 跳的丢包如小于第 N 跳的丢包, 则说明第 N 跳的丢包是路由器的 ICMP 限制或其他策略导致, 不是网络问题。如果某跳后丢包呈持续增长, 则有可能是网络问题。但实际我们大多数情况,只需要关注最后一跳(目的地址)是否有丢包即可。

特点:

  • 动态路由显示:MTR在运行时会持续显示路径上的网络状况,而不是只显示一次路径,这使得MTR在检测临时网络问题时非常有用。

  • 数据包类型:MTR默认发送UDP数据包,但也可以配置为发送ICMP Echo请求。

  • 显示延迟和丢包:MTR显示每一跳的往返时间(RTT),并可以标记出数据包丢失的跳。

  • 过滤和日志:MTR允许用户应用过滤器,以查看特定的路由器或网络段的信息,并可以配置为将诊断结果保存到日志文件中。

  • 网络探测:MTR可以在不同的网络协议和端口上运行,以适应不同的网络测试需求

二、MTR命令

首先需要安装 mtr 命令:

sudo apt install -y mtr
# yum install -y mtr

mtr 的基本用法是在命令后跟要测试的域名或 IP 地址。例如:

mtr -rn -c 10 www.baidu.com

常用选项:

  • -r:报告模式,指定要发送的数据包数量后停止。(使用ubuntu时,命令行中使用可能需要该选项)
  • -c:连续模式,指定要发送的数据包数量后重新开始。
  • -i:设置数据包之间的间隔时间(以秒为单位)。
  • -s:设置要发送的数据包大小(以字节为单位)。
  • -u:使用UDP而不是ICMP来探测。
  • -P:设置要使用的ICMP类型。
  • -n:禁用DNS解析,只显示IP地址。
  • -s:设置ICMP数据包大小。
  • -u:使用UDP协议进行探测2.

输出详解:

$ mtr -rn -c 10 www.baidu.com
Start: Thu Jul 11 09:01:13 2024
HOST: wy2                         Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 9.31.61.130               80.0%    10    0.7   0.7   0.7   0.7   0.0
  2.|-- 9.31.123.100              90.0%    10    0.5   0.5   0.5   0.5   0.0
  3.|-- 10.196.18.125             90.0%    10    1.3   1.3   1.3   1.3   0.0
  4.|-- 10.200.16.177              0.0%    10    0.6   0.6   0.6   0.7   0.0
  5.|-- 10.196.2.101               0.0%    10    0.6   0.6   0.5   0.6   0.0
  6.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  7.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  8.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  9.|-- 14.29.117.178              0.0%    10    5.4   5.8   4.7   8.7   1.3
 10.|-- ???                       100.0     3    0.0   0.0   0.0   0.0   0.0
 11.|-- ???                       100.0     3    0.0   0.0   0.0   0.0   0.0
 12.|-- ???                       100.0     2    0.0   0.0   0.0   0.0   0.0
 13.|-- 183.2.172.42               0.0%     2    3.6   3.6   3.6   3.7   0.0
  • Host:当前跳点的IP地址或主机名(如果可用)。
  • Loss%:该跳点的丢包率。
  • Snt:已发送的数据包数量。
  • Last:最后一个数据包的往返时间(RTT)。
  • Avg:所有数据包的平均RTT。
  • Best:最佳(最小)RTT。
  • Wrst:最差(最大)RTT。
  • StDev:RTT的标准偏差2.

三、双向MTR

正所谓“条条大路通罗马”,这就好比去北京,有很多种选择:坐飞机、坐火车、坐大巴、自驾、拼车等等,而且不同的人到达北京所走路线(路由)也千差万别。网络的世界也是如此,你可以把去北京的路线理解为网络世界的路由。那么当你自驾去北京的路上发现,部分路段被洪水冲断了,过不去了。那会不会影响其他人,走其他路段自驾去北京呢?当然不会。所以需要谁有故障,谁做 mtr,方便定位到底哪段路有问题,然后进行抢修。(这就是我们常说的网络单点故障)

正如前面所描述,网络单点故障必须客户端提供双向 mtr 报障运营商进行排查,但并不是所有网络故障都是单点故障。比如:运营商骨干网络故障影响范围比较大或者能够 100%复现的网络故障,这种就称之为批次故障。虽然能够复现,但是建议可以直接做完双向 mtr 提供给供应商,方便加速升级运营商处理,避免浪费时间去搭建测试环境。

那么为什么需要双向 mtr 呢?这就好比,我去北京的时候走的是 A 路线,回来的时候走的是 B 路线,那么我走 A 路线很顺利,走 B 路线的时候,出现了大雾封路的情况,自然又过不去了。网络的世界也是如此,我 A 到 B 正常,B 到 A 不正常,那么我的整个网络链路也是异常的,网络也是不通的。所以需要双向 MTR,看看到底断在了 A 还是 B。

就以这段时间购买的 UCloud 香港云服务器为例,发现大陆访问很慢,不知道什么原因,所以需要进行排查。

首先,需要本地 mtr 香港云服务器。

$ mtr -rn -c 10 152.xx.xx.xx
Start: 2024-07-11T09:07:09+0800
HOST: hz                          Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 172.20.3.254               0.0%    10    3.3   3.3   3.0   3.8   0.3
  2.|-- 172.23.4.254               0.0%    10    1.8   1.6   1.2   2.6   0.4
  3.|-- 172.23.3.10                0.0%    10    1.6   1.5   1.1   1.8   0.2
  4.|-- 61.140.232.1               0.0%    10    3.6  11.4   3.3  33.4  10.6
  5.|-- 61.140.82.125              0.0%    10    6.3   7.2   5.5  12.1   2.4
  6.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  7.|-- 202.97.94.138             50.0%    10   17.6  10.9   5.9  17.6   5.2
  8.|-- 202.97.94.114             10.0%    10   20.8   8.5   5.4  20.8   5.0
  9.|-- 203.86.97.18              20.0%    10  114.9 117.1 114.4 122.8   3.4
 10.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 11.|-- 129.250.2.51              10.0%    10  151.9 152.6 151.9 153.5   0.6
 12.|-- 129.250.4.245             70.0%    10  148.9 149.3 148.9 149.5   0.3
 13.|-- 203.131.241.182           80.0%    10  154.3 154.1 153.8 154.3   0.3
 14.|-- 183.90.191.105            40.0%    10  149.5 150.1 149.5 151.6   0.8
 15.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 16.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 17.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 18.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 19.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 20.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 21.|-- ???                       100.0     9    0.0   0.0   0.0   0.0   0.0
 22.|-- ???                       100.0     9    0.0   0.0   0.0   0.0   0.0
 23.|-- ???                       100.0     9    0.0   0.0   0.0   0.0   0.0
 24.|-- ???                       100.0     8    0.0   0.0   0.0   0.0   0.0
 25.|-- ???                       100.0     6    0.0   0.0   0.0   0.0   0.0
 26.|-- 152.xx.xx.xx              16.7%     6   63.8  64.0  63.7  64.6   0.4

可以看见 129.250.2.51 是美国 ip,129.250.4.245 是英国 ip,去程可以说是在地球饶了一圈才到香港。

那么测试一下香港回来是什么样的网络情况应该怎么样呢?这个时候就需要先获取一下当前网络的出口公网 ip 了,通过如下命令获取:

curl ifconfig.me
# curl myip.ipip.net

获取到以后,在香港云服务器执行 mtr

$ mtr -rn -c 10 61.140.233.40
Start: 2024-07-11T09:16:38+0800
HOST: 10-7-33-121                 Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  2.|-- 10.67.5.17                 0.0%    10    0.3   0.3   0.2   0.7   0.2
  3.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  4.|-- 10.67.5.17                 0.0%    10    0.4   0.5   0.4   1.2   0.2
  5.|-- 10.67.5.8                  0.0%    10    0.6   0.7   0.5   1.3   0.2
  6.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  7.|-- 10.67.0.138               20.0%    10    2.1   3.1   1.7   6.0   1.8
  8.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  9.|-- 172.21.161.118            90.0%    10    3.7   3.7   3.7   3.7   0.0
 10.|-- 172.21.161.62              0.0%    10    1.0   0.9   0.7   1.3   0.2
 11.|-- 172.21.161.205             0.0%    10   18.4   2.9   0.7  18.4   5.5
 12.|-- 61.14.203.197             10.0%    10    2.0   2.8   2.0   6.0   1.5
 13.|-- 61.14.201.122             10.0%    10    1.5   1.9   1.5   2.5   0.4
 14.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 15.|-- 43.252.86.141              0.0%    10    7.8   5.2   1.6   8.1   2.5
 16.|-- 219.158.6.65               0.0%    10    7.1   8.8   7.0  11.8   1.9
 17.|-- 219.158.3.161              0.0%    10   11.0   9.4   6.3  15.4   3.0
 18.|-- 219.158.3.9                0.0%    10    9.4  10.1   9.1  11.4   0.7
 19.|-- 219.158.24.14              0.0%    10   10.7  10.2   6.1  14.1   2.9
 20.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 21.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 22.|-- 14.147.7.102              10.0%    10   59.5  84.4  59.5 181.2  44.4
 23.|-- 116.23.47.30               0.0%    10   59.9  62.4  59.5  83.9   7.6
 24.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0

发现回程确实没有绕欧美,也确实如官方所说回程加速。

使用 mtr 命令排查网络问题

/>

Tips:清朝云网络工作室

阅读剩余
THE END