一、基础知识
路由跟踪(Routing Trace)是用来追踪IP数据包在网络中的传输状态的一种机制,可以帮助我们找到网络中发生故障的位置。在linux操作系统中,路由跟踪是通过iproute2工具包来实现的。
路由跟踪可以追踪IP数据包在整个路由路径中的转发情况,我们可以通过路由跟踪来确定数据包是被丢弃还是被正确转发,从而快速排查网络故障。
下面是一些常用的路由跟踪命令:
traceroute -I -n -p 80 www.example.com
tracepath -n -m 5 -p 80 www.example.com
mtr www.example.com
二、使用traceroute进行路由跟踪
traceroute是一个非常常用的路由跟踪工具,它可以帮助我们了解IP在网络中的传输情况。下面我们来看一个例子:
traceroute -I -n -p 80 www.example.com
这个命令的作用是使用ICMP协议进行路由跟踪,目标IP为www.example.com,目标端口为80。它将逐一显示IP数据包从本机到目标主机的路由路径。其中,-I参数表示使用ICMP协议,-n参数表示不需要将IP地址解析为主机名,-p参数表示指定目标端口。
执行这个命令后,我们可以看到如下输出:
1 192.168.1.1 (192.168.1.1) 1.112 ms 1.104 ms 1.118 ms
2 202.120.166.169 (202.120.166.169) 9.688 ms 9.686 ms 9.674 ms
3 202.120.224.170 (202.120.224.170) 13.853 ms 14.281 ms 14.538 ms
4 202.120.224.130 (202.120.224.130) 15.309 ms 15.305 ms 15.286 ms
5 202.120.224.69 (202.120.224.69) 14.935 ms 14.936 ms 14.943 ms
6 101.4.116.102 (101.4.116.102) 30.500 ms 30.537 ms 30.606 ms
7 101.4.117.14 (101.4.117.14) 30.257 ms 30.235 ms 30.237 ms
8 101.4.120.70 (101.4.120.70) 35.136 ms 35.202 ms 35.179 ms
9 * * *
每一行的前面有一个数字,表示数据包从源地址到目标地址经过的跳数。后面跟着的是一个地址,表示经过该跳的下一个设备的IP地址。再后面是三个时间值,表示三次从本机发送数据包到目标设备的响应时间。最后一行表示目标设备无法响应。
三、使用tracepath进行路由跟踪
tracepath是另外一个常用的路由跟踪工具,与traceroute相比,它的输出更简洁。
tracepath -n -m 5 -p 80 www.example.com
这个命令的作用是使用默认的UDP协议进行路由跟踪,目标IP为www.example.com,目标端口为80,最大跳数为5。它将显示从本机到目标主机经过的所有跳数,以及每个跳数经过的时间。
执行这个命令后,我们可以看到如下输出:
1: 192.168.1.1 1.227ms pmtu 1500
1: 202.120.166.169 11.719ms
2: 202.120.224.170 15.854ms
3: 202.120.224.130 15.416ms
4: 202.120.224.69 18.615ms
5: 101.4.116.102 31.194ms
Resume: pmtu 1500
从这个输出中,我们可以看到从本机到目标主机的所有跳数,以及每个跳数所需的时间。第一行中的pmtu 1500表示该路径的MTU值为1500字节,Resume表示该数据包的响应时间。
四、使用mtr进行路由跟踪
mtr是一个功能非常强大的路由跟踪工具,它可以实时显示路由跟踪的结果,并且可以进行带宽测试。
mtr www.example.com
这个命令的作用是使用UDP协议进行路由跟踪,目标IP为www.example.com。它将绘制一个交互式的图表,显示到目标主机的路由路径,以及每个路径经过的时间和可达性。
执行这个命令后,我们可以看到如下输出:
My traceroute [v0.85]
(linux4u) Tue Oct 6 00:39:47 2020
Resolver: Shared to [email protected]
Destination: www.example.com (www.example.com)
Packets: Sent = 30, Received = 30, Lost = 0 (0% loss)
...
[中间省略部分输出]
...
Name or service not known
从这个输出中,我们可以看到每个路径经过的时间和可达性,以及每个路径的带宽使用率。
五、总结
本文介绍了在linux系统中使用traceroute、tracepath和mtr进行路由跟踪的方法。通过这些工具,在排查网络故障时,我们可以快速定位到故障点,提高排障效率。