[一天一个命令]traceroute

简介

Traceroute是利用ICMP协议跟踪一条消息路由的应用。(在Windows中其被称为tracert)

原理

在TCPIP通信中,每经过一个路由器,会将IP包中TTL(Time To Live,生存周期)字段减一,减到0时该IP包会被丢弃。此时IP路由器会给发送端主机发送一个ICMP超时的消息(ICMP Time Exceeded Message, 错误码0)用于报告这个错误。

Traceroute就是利用了上述IP协议族中的ICMP超时信息。利用IP包的生存期限从1开始顺次递增的同时发送UDP包,强制接收ICMP消息,通过每次发送的IP包超时后对方路由返回的ICMP消息就能确定所有经过的路由器地址。

指令

如果需要知道到www.miluo.us的网络状况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$ traceroute www.miluo.us
traceroute to www.miluo.us (47.240.6.229), 64 hops max, 52 byte packets
1 172.20.10.1 (172.20.10.1) 3.277 ms 1.950 ms 1.679 ms
2 * * *
3 10.255.255.33 (10.255.255.33) 70.460 ms 67.820 ms 42.841 ms
4 10.10.0.50 (10.10.0.50) 49.123 ms 63.961 ms 115.739 ms
5 115.168.32.249 (115.168.32.249) 74.142 ms 50.466 ms 44.167 ms
6 219.141.140.209 (219.141.140.209) 105.594 ms
bj141-143-253.bjtelecom.net (219.141.143.253) 88.336 ms
219.141.140.213 (219.141.140.213) 81.736 ms
7 202.97.34.158 (202.97.34.158) 61.800 ms
202.97.53.30 (202.97.53.30) 98.448 ms
202.97.48.242 (202.97.48.242) 84.933 ms
8 202.97.14.238 (202.97.14.238) 84.236 ms
202.97.12.58 (202.97.12.58) 70.911 ms *
9 xe-4-0-7.r27.tokyjp05.jp.bb.gin.ntt.net (129.250.66.89) 260.929 ms 293.274 ms 147.108 ms
10 ae-1.r30.tokyjp05.jp.bb.gin.ntt.net (129.250.2.157) 195.600 ms 173.445 ms *
11 ae-4.r24.tkokhk01.hk.bb.gin.ntt.net (129.250.2.51) 338.154 ms 264.472 ms 200.689 ms
12 ae-1.r02.tkokhk01.hk.bb.gin.ntt.net (129.250.6.92) 261.200 ms
ae-1.r03.tkokhk01.hk.bb.gin.ntt.net (129.250.6.98) 261.337 ms 568.322 ms
13 ae-3.a00.newthk03.hk.bb.gin.ntt.net (129.250.5.11) 296.674 ms
ae-1.a00.chwahk02.hk.bb.gin.ntt.net (129.250.5.177) 315.962 ms *
14 unused.hkg.witopia.net (203.131.247.242) 1476.990 ms
prod06.x.hkg.fullmeshnetworks.com (203.131.247.234) 144.640 ms
unused.hkg.witopia.net (203.131.247.242) 123.503 ms
15 116.251.87.1 (116.251.87.1) 133.482 ms
116.251.86.237 (116.251.86.237) 128.741 ms 186.779 ms
16 * * *
17 * 11.52.240.21 (11.52.240.21) 154.105 ms 233.679 ms
18 * * *

其中每一行都标明了路由器的IP与到该路由器的时间。如果过程中有某一跳路由器没有ICMP返回回来,超过5秒后程序将会打印一个”*”。这种情况主要出现于路径中部分路由器由于安全配置或其他原因不允许发送ICMP的情况,此时这一跳(Hop)的信息无法获取。

主要参数

  • -P proto: 发送指定协议的包,目前支持UDP , TCP , GRE和ICMP
  • -p: 对UDP和TCP,定义所使用的端口号(默认33434),traceroute希望的是指定一个没有在使用中的端口号,对端会返回一个ICMP PORT_UNREACHABLE报错,这样就能顺利结束追踪。
  • -F: 开启IP段中的don’t fragment(不可分片)位(用于发现路径中MTU)
  • -M first_ttl: 设定最开始的ttl
  • -a: 对每一跳的路由执行AS# lookups,显示网络的自制系统编号
    (如前述例子中第5-8跳都在AS4134 163骨干网中)