Linux traceroute命令用于显示数据包到主机间的路径。
traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。
语法
traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]
参数说明:
- -d 使用Socket层级的排错功能。
- -f<存活数值> 设置第一个检测数据包的存活数值TTL的大小。
- -F 设置勿离断位。
- -g<网关> 设置来源路由网关,最多可设置8个。
- -i<网络界面> 使用指定的网络界面送出数据包。
- -I 使用ICMP回应取代UDP资料信息。
- -m<存活数值> 设置检测数据包的最大存活数值TTL的大小。
- -n 直接使用IP地址而非主机名称。
- -p<通信端口> 设置UDP传输协议的通信端口。
- -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
- -s<来源地址> 设置本地主机送出数据包的IP地址。
- -t<服务类型> 设置检测数据包的TOS数值。
- -v 详细显示指令的执行过程。
- -w<超时秒数> 设置等待远端主机回报的时间。
- -x 开启或关闭数据包的正确性检验。
实例
显示到达目的地的数据包路由
$ traceroute runoops.com
traceroute to runoops.com (118.89.62.41), 64 hops max, 52 byte packets
1 localhost (192.168.80.1) 14.293 ms 31.220 ms 3.760 ms
2 localhost (10.10.10.1) 23.292 ms 6.122 ms 11.733 ms
3 60.12.14.209 (60.12.14.209) 7.763 ms 6.437 ms 6.985 ms
4 101.69.245.93 (101.69.245.93) 8.352 ms 10.183 ms 6.780 ms
5 101.71.244.93 (101.71.244.93) 27.567 ms 14.747 ms 15.176 ms
6 219.158.21.17 (219.158.21.17) 36.570 ms 72.007 ms 47.815 ms
7 221.4.0.106 (221.4.0.106) 31.964 ms 31.412 ms 30.215 ms
8 * * * //可能是防火墙封掉了ICMP的返回信息
9 58.254.152.118 (58.254.152.118) 46.578 ms 41.140 ms 44.499 ms
10 * * *
11 * * *
12 * * *
13 * * *
14 118.89.62.41 (118.89.62.41) 48.275 ms !Z 51.354 ms !Z 63.119 ms !Z
说明:
记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 runoops.com ,表示向每个网关发送4个数据包。
有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n 参数来避免DNS解析,以IP格式输出数据。
如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。