一、traceroute简介
traceroute是一个用于诊断网络故障的工具,它能够显示数据包从源到目的地经过的所有路由器(包括路由器名称和IP地址),并显示每个路由器的响应时间。traceroute的工作原理是向目的地发送一系列数据包,每次将TTL(Time To Live)值设置为逐渐增大的数值,这样当数据包在经过路由器时,TTL值会减少,当TTL值为0时,数据包就会被丢弃并发回来一个“Time Exceeded”消息,这样就能得到每一跳的路由器的IP地址。
二、使用traceroute进行网络诊断
traceroute命令的使用格式为:
traceroute [-FIldnrvx] [-f <第一个TTL>] [-m <最大跳数>] [-p <端口号>] [-q <流量>] [-s <源IP地址>] [-t <type of service>] [-w <超时时间>] [-z <分组大小>] 主机名/IP地址
其中,常用的选项有:
- -I:使用ICMP Echo请求作为数据包的载荷。
- -F:设置Do not Fragment标志位,防止数据包在传输时被分片。
- -l:使用小于数据包默认长度的数据包。
- -d:启用调试模式,显示SOCKET I/O。
- -n:直接使用IP地址而不进行DNS解析。
- -m:指定最大跳数。
- -p:指定端口号。
- -q:指定每个跳点要发送的数据包数量。
- -s:指定源IP地址。
- -t:指定IP包的Type of Service。
- -w:指定等待超时的时间。
- -z:设置每个分组的大小。
- -v:显示IP地址的具体信息。
- -x:使用专用IP地址进行扫描,忽略ICMP重定向报文。
三、traceroute实例
1. 普通使用
执行traceroute www.baidu.com命令,可以得到类似以下的结果:
traceroute to www.baidu.com (39.156.69.79), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 1.089 ms 1.298 ms 1.275 ms
2 1.222.178.1 (1.222.178.1) 7.118 ms 7.210 ms 7.329 ms
3 * * *
4 1.222.68.209 (1.222.68.209) 12.829 ms 12.912 ms 13.001 ms
5 1.222.69.30 (1.222.69.30) 17.157 ms 17.221 ms 17.338 ms
6 119.147.218.169 (119.147.218.169) 19.982 ms 20.015 ms 19.997 ms
7 202.97.51.253 (202.97.51.253) 28.971 ms 202.97.34.85 (202.97.34.85) 29.112 ms 202.97.34.89 (202.97.34.89) 29.064 ms
8 218.30.54.186 (218.30.54.186) 28.963 ms 202.97.49.173 (202.97.49.173) 74.891 ms 74.863 ms
9 61.148.56.169 (61.148.56.169) 63.126 ms 61.148.56.161 (61.148.56.161) 64.650 ms 61.148.56.169 (61.148.56.169) 63.119 ms
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
结果显示,从本机到百度服务器的路径上,经过了多个路由器。第一个数字表示路由器的跳数,下面的IP地址表示经过该路由器时的IP地址。
2. 使用-t指定Type of Service值
执行traceroute -t 10 www.baidu.com命令,使用Type of Service为10的IP包进行网络测试:
traceroute to www.baidu.com (220.181.57.216), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 2.071 ms 2.292 ms 2.269 ms
2 1.222.178.1 (1.222.178.1) 6.641 ms 6.727 ms 6.851 ms
3 * * *
4 1.222.68.209 (1.222.68.209) 12.545 ms 12.628 ms 12.715 ms
5 1.222.69.30 (1.222.69.30) 16.986 ms 17.049 ms 17.171 ms
6 119.147.218.169 (119.147.218.169) 19.546 ms 19.570 ms 19.575 ms
7 202.97.68.105 (202.97.68.105) 29.477 ms 202.97.51.245 (202.97.51.245) 29.620 ms 202.97.34.93 (202.97.34.93) 29.559 ms
8 202.97.61.77 (202.97.61.77) 28.773 ms 28.744 ms 218.30.54.190 (218.30.54.190) 29.248 ms
9 61.148.56.169 (61.148.56.169) 63.751 ms 62.307 ms 62.845 ms
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
关于Type of Service的具体含义,可以参考RFC 2474。
3. 使用-m指定最大跳数
执行traceroute -m 10 www.baidu.com命令,设置最大跳数为10,即只会跟踪前10个路由器:
traceroute to www.baidu.com (39.156.69.79), 10 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 0.935 ms 1.168 ms 1.144 ms
2 1.222.178.1 (1.222.178.1) 11.002 ms 11.105 ms 11.247 ms
3 * * *
4 1.222.68.209 (1.222.68.209) 16.654 ms 16.736 ms *
5 * * *
6 180.130.250.14 (180.130.250.14) 39.022 ms 39.160 ms 180.149.128.126 (180.149.128.126) 39.381 ms
7 202.97.51.61 (202.97.51.61) 46.259 ms * 202.97.51.85 (202.97.51.85) 49.396 ms
8 * * *
9 39.156.69.79 (39.156.69.79) 58.030 ms * *
可以看到,traceroute只跟踪了前10个路由器,后面的路由器没有被显示出来。
4. 使用-q指定每个跳点要发送的数据包数量
执行traceroute -q 3 www.baidu.com命令,设置每个跳点要发送的数据包数量为3:
traceroute to www.baidu.com (39.156.69.79), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 0.992 ms 1.328 ms 1.304 ms
2 1.222.178.1 (1.222.178.1) 6.918 ms 7.113 ms 7.195 ms
3 * * *
4 1.222.68.209 (1.222.68.209) 13.710 ms 13.803 ms 13.891 ms
5 1.222.69.30 (1.222.69.30) 18.151 ms 18.214 ms 18.338 ms
6 119.147.218.169 (119.147.218.169) 20.956 ms 20.989 ms 20.971 ms
7 202.97.51.245 (202.97.51.245) 28.586 ms 202.97.51.61 (202.97.51.61) 29.673 ms 202.97.34.93 (202.97.34.93) 29.482 ms
8 218.30.54.186 (218.30.54.186) 28.861 ms 201.97.49.173 (201.97.49.173) 74.316 ms 74.287 ms
9 61.148.56.169 (61.148.56.169) 63.316 ms 61.148.56.161 (61.148.56.161) 63.599 ms 62.208 ms
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
可以看到,traceroute向每个跳点都发送了3个数据包。
四、总结
traceroute是一个非常常用的网络诊断工具,它可以帮助我们找到网络故障的原因。通过对traceroute的学习,我们可以深入了解网络通信的原理和各种路由器的工作方式,为我们的网络诊断工作提供有力的支持。