traceroute 命令

traceroute命令用于追踪网络数据包的路由途径

命令利用ICMP协议定位您的计算机和目标计算机之间的所有路由器。TTL 值可以反映数据包经过的路由器或网关的数量,通过操纵独立ICMP呼叫报文的TTL 值和观察该报文被抛弃的返回信息,traceroute命令能够遍历到数据包传输路径上的所有路由节点。

原理

程序利用增加存活时间(TTL)值来实现其功能。每当数据包经过一个路由器,其存活时间就会减1。当其存活时间是0时,主机便取消数据包,并传送一个ICMP TTL数据包给原数据包的发出者。

程序发出的首3个数据包TTL值是1,之后3个是2,如此类推,它便得到一连串数据包路径。注意IP不保证每个数据包走的路径都一样

语法

traceroute [-46dFITnreAUDV][ -f first_ttl ] [ -g gate,... ] [ -i device ] [ -m max_ttl ] [ -N squeries ] [ -p port ] [ -t tos ] 
[ -l flow_label ] [ -w waittime ] [ -q nqueries ] [ -s src_addr ] [ -z sendwait ] [ --fwmark=num ] 目标主机 [数据包大小]

数据包默认大小是IP头的长度加40

选项

  • -4 使用IPv4
  • -6 使用IPv6
  • -d --debug 使用Socket层级的排错功能。
  • -f first_ttl 设置第一个检测数据包的存活数值TTL的大小
  • -F 不分割数据包
  • -g gate,... 将报文路由到指定网关(IPv4最多8个,IPv6最多127个)
  • -i device 使用指定的网络接口(网卡)发出数据包
  • -I --icmp 使用ICMP ECHO进行跟踪路由
  • -m max_ttl 设置检测数据包的最大存活数值TTL的大小。
  • -M method 对traceroute操作使用指定的方法。默认的传统UDP方法有名称Default,ICMP(-I)和TCP(-T)分别有ICMP和TCP。特定于方法的选项可以通过-O传递。
  • -n 不解析IP地址到他们的域名。
  • -p port 设置目标主机UDP通信端口。
  • --sport=port 选择本机源端口
  • -q nqueries 设置探测数据包个数,默认3个
  • -r 忽略普通的 Routing Table,直接将数据包送到远端主机上。
  • -s src_addr 设置本地主机送出数据包的 IP地址。
  • -t<服务类型> 设置检测数据包的 TOS 数值。
  • -v 详细显示指令的执行过程。
  • -w waittime 设置等待远端主机回报的时间。
  • -x 开启或关闭数据包的正确性检验。
  • -z 探测之间的最小时间间隔

实例

$ traceroute www.baidu.com

traceroute to www.baidu.com (14.119.104.254), 30 hops max, 60 byte packets
 1  gateway (10.18.200.1)  6.383 ms  6.895 ms  5.853 ms
 2  10.18.1.2 (10.18.1.2)  0.514 ms  0.502 ms  0.483 ms
 3  218.18.96.62 (218.18.96.62)  0.958 ms  0.923 ms  1.099 ms
 4  14.147.83.5 (14.147.83.5)  1.535 ms  1.710 ms  1.444 ms
 5  * * 125.176.37.59.broad.dg.gd.dynamic.163data.com.cn (59.37.176.125)  2.278 ms
 6  113.106.35.5 (113.106.35.5)  4.876 ms * *
 7  113.96.0.18 (113.96.0.18)  4.942 ms 113.96.4.254 (113.96.4.254)  5.767 ms *
 8  121.14.14.162 (121.14.14.162)  7.144 ms 86.96.135.219.broad.fs.gd.dynamic.163data.com.cn (219.135.96.86)  5.293 ms  5.249 ms
 9  121.14.67.170 (121.14.67.170)  11.427 ms 121.14.67.178 (121.14.67.178)  5.919 ms 121.14.67.174 (121.14.67.174)  6.490 ms
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

记录按序列号从1开始,每个序号表示一跳,每一条代表一个网关,我们看到每行有三个时间,单位是 ms ,即数据包到达此跳路由或主机再返回你的主机所需要的时间。traceroute默认每次发送3个数据包,所以显示三个往返时间。

这里的 * 号代表 路由器禁止了ICMP数据包返回或者是防火墙的过滤。 traceroute程序本身就被用来发现网络故障,如果从某跳开始所有的时间都成了星号,即超时,则网络故障很有可能就出现在了这一跳

$ traceroute -n -q 2 www.baidu.com

traceroute to www.baidu.com (14.119.104.189), 30 hops max, 60 byte packets
 1  10.18.200.1  1.647 ms  2.400 ms
 2  10.18.1.2  0.544 ms  0.510 ms
 3  218.18.96.62  0.669 ms  0.903 ms
 4  61.146.247.177  6.987 ms  7.171 ms
 5  59.37.176.125  1.548 ms  1.515 ms
 6  113.106.35.1  4.091 ms 113.106.34.249  3.840 ms
 7  * 113.96.4.254  5.850 ms
 8  121.14.14.162  6.066 ms  6.051 ms
 9  * *
10  * *
11  * *
12  * *
13  * *
14  * *
15  * *
16  * *
17  * *
18  * *
19  * *
20  * *
21  * *
22  * *
23  * *
24  * *
25  * *
26  * *
27  * *
28  * *
29  * *
30  * *