traceroute原理:

TraceRoute主要利用了IP头里的TTL字段。TTL字段的目的是为了防止数据报在网络上无休止的传递下去,TTL字段指定了数据报的生存时间。TTL的初始值由源主机设置,当一份数据报经过路由器时,处理该数据报的路由器将TTL值减1,当TTL的值被减为0时,路由器就该数据报丢弃,并产生一份ICMP超时差错报文发往源主机以通知错误的发生。TraceRoute程序的关键就在于返回的这份ICMP超时差错报文的源地址就是途经路由器的IP地址。由此,通过依次递增TTL字段的值,就可以得到一份数据报在其传输路径上所经过的路由信息。


   TraceRoute程序在具体实现时,是令其向目的主机发送一个ICMP回显请求(Echo request)消息,并重复递增IP头部TTL字段的值。刚开始的时候TTL等于1,这样当该数据报抵达途中的第一个路由器时,TTL的值就被减为0,导致发生超时错误,因此该路由器生成一份ICMP超时差错报文返回给源主机。随后,主机将数据报的TTL值递增1,以便IP报文能传递到下一个路由器,下一个路由器将会生成ICMP超时超时差错报文返回给源主机。不断重复这个过程,直到数据报到达最终的目的主机,此时目的主机将返回ICMP回显应答(Echo replay)消息。这样,源主机只需对返回的每一份ICMP报文进行解析处理,就可以掌握数据报从源主机到达目的主机途中所经过的路由信息。


使用traceroute时最好使用root,有些参数需要有root权限才能用。

参数:

-I 使用icmp包

-U 使用udp包

-T 使用tcp包

-m 设置最大跳数

-q 每次发多个包,默认是3

-n 显示IP地址,不查主机名


例子1:

root@MSW-TEST ~]# traceroute www.facebook.com  

traceroute to www.facebook.com (31.13.75.17), 30 hops max, 60 byte packets

1  192.168.11.254 (192.168.11.254)  0.748 ms  0.723 ms  0.703 ms

2  * * *

3  * * *

4  * * *

5  * * *

6  * * *


其实这台机器是能路由到facebook的,因为traceroute每次发三个包,默认间隔是0,有些路由为了防止dos***,这些包都没处理,解决办法是用-z加上时间间隔:

[root@MSW-TEST ~]# traceroute -I www.google.com -z 0.05 -q 1

traceroute to www.google.com (173.194.72.106), 30 hops max, 60 byte packets

1  192.168.11.254 (192.168.11.254)  0.290 ms

2  61-31-230-254.static.tfn.net.tw (61.31.230.254)  1.003 ms

3  60-199-237-106.static.tfn.net.tw (60.199.237.106)  0.778 ms

4  60-199-20-153.static.tfn.net.tw (60.199.20.153)  16.260 ms

5  60-199-4-98.static.tfn.net.tw (60.199.4.98)  1.272 ms

6  60-199-16-98.static.tfn.net.tw (60.199.16.98)  79.844 ms

7  72.14.212.145 (72.14.212.145)  1.474 ms

8  209.85.243.26 (209.85.243.26)  9.858 ms

9  209.85.250.101 (209.85.250.101)  6.044 ms

10  *

11  tf-in-f106.1e100.net (173.194.72.106)  6.303 ms


这下就好了。