Linux traceroute命令

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服务商也不可能帮助我们解决。