共计 4393 个字符,预计需要花费 11 分钟才能阅读完成。
一、简介
常用的 Ping
,Traceroute
,nslookup
一般用来判断主机的网络连通性,其实有一个更好用的网络联通性判断工具,这个命令就是 MTR
。MTR
结合了 Traceroute
和 Ping
的功能,提供了更为丰富的信息,包括实时的网络状态和统计数据。
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
发现回程确实没有绕欧美,也确实如官方所说回程加速。