traceroute的工作原理
traceroute, 也就是 trace route,跟踪路由。这个程序最早是Van Jacobson实现的。主要的原理是IP路由过程中对数据包TTL(Time to Live,存活时间)的处理。当路由器收到一个IP包时,会修改IP包的TTL(及由此造成的头部检验和checksum变化)。每收到一个包,检查这个 的TTL是否是0或1。如果是,表明这个包还没有到达目的地,而且剩余时间不多了,肯定是到不了目的地了。这样路由器就简单地丢弃这个包,并给源主机发送 ICMP通知,说这个包已经超时了。ICMP的通知信息里包含当前路由器发送时所用的IP。
这样就可以通过构造数据包,来间接检查到 达一个主机时经过了哪些路由。一开始发送一个TTL为1的包,这样到达第一个路由器的时候就已经超时了,第一个路由器就发通知说包超时,这样就可以记录下 所经过的第一个路由器的IP。然后TTL加1,安全通过第一个路由器,而第二个路由器的的处理与第一个相同,丢包,发通知说包超时了,这样记录下第二个路 由器IP,由此可以一直进行下去,直到这个数据包到达目标主机,由此打印出所有经过的路由器。
使用命令
[root@hadoop Desktop]# traceroute www.baidu.com
traceroute to www.baidu.com (115.239.210.27), 30 hops max, 60 byte packets
1 Andy.mshome.net (192.168.137.1) 0.121 ms * *
2 192.168.0.1 (192.168.0.1) 1.863 ms 3.900 ms 6.245 ms
3 Broadcom.Home (192.168.1.1) 4.677 ms 6.384 ms 6.350 ms
4 114.84.180.1 (114.84.180.1) 8.863 ms 8.783 ms 8.682 ms
5 124.74.57.245 (124.74.57.245) 11.740 ms 11.637 ms 11.489 ms
6 124.74.215.61 (124.74.215.61) 60.648 ms 57.037 ms 57.056 ms
7 202.101.63.134 (202.101.63.134) 110.930 ms 111.366 ms 111.271 ms
8 202.97.55.2 (202.97.55.2) 9.242 ms 9.428 ms 9.303 ms
9 61.164.31.174 (61.164.31.174) 16.697 ms 61.164.31.178 (61.164.31.178) 11.233 ms 220.191.135.98 (220.191.135.98) 11.783 ms
10 115.233.23.206 (115.233.23.206) 13.424 ms 13.327 ms 115.233.23.246 (115.233.23.246) 111.320 ms
11 115.239.209.22 (115.239.209.22) 9.955 ms 10.218 ms 11.142 ms
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
ps:
默认会有30跳,当然是可以使用参数改变跳数。
默认使用UDP协议方式来发送包,例子中不能显示到达的目的主机,说明www.baidu.com 针对UDP协议的侦测是屏蔽的
[root@hadoop Desktop]# traceroute -n www.baidu.com
traceroute to www.baidu.com (115.239.210.27), 30 hops max, 60 byte packets
1 192.168.137.1 0.800 ms * *
2 192.168.0.1 2.826 ms 5.484 ms 5.432 ms
3 192.168.1.1 4.789 ms 5.445 ms 6.211 ms
4 114.84.180.1 11.463 ms 11.986 ms 11.940 ms
5 124.74.57.245 94.214 ms 95.796 ms 95.750 ms
6 124.74.215.61 96.691 ms 97.042 ms 95.189 ms
7 202.101.63.134 194.203 ms 194.839 ms 194.785 ms
8 202.97.55.2 93.773 ms 94.580 ms 89.221 ms
9 61.164.31.174 88.752 ms 61.164.13.130 91.757 ms 61.164.13.134 109.216 ms
10 61.164.13.186 109.355 ms 115.233.23.210 109.495 ms 115.233.23.206 108.673 ms
11 115.239.209.22 110.122 ms 109.876 ms 108.468 ms
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
ps:-n 可以去查一些不需要的信息,如主机名,只留下主机地址
[root@hadoop Desktop]# traceroute -In www.baidu.com
traceroute to www.baidu.com (115.239.210.27), 30 hops max, 60 byte packets
1 192.168.137.1 0.183 ms * *
2 * * *
3 192.168.1.1 3.095 ms 3.060 ms 2.939 ms
4 114.84.180.1 9.871 ms 10.263 ms 10.692 ms
5 124.74.57.245 108.148 ms 108.063 ms 108.663 ms
6 124.74.215.61 107.381 ms * *
7 61.152.86.82 111.622 ms 112.191 ms 103.815 ms
8 * * *
9 220.191.135.122 82.548 ms 83.259 ms 82.675 ms
10 115.233.23.254 79.210 ms 78.831 ms 78.707 ms
11 115.239.209.22 116.130 ms 115.850 ms 115.744 ms
12 * * *
13 115.239.210.27 89.825 ms 89.644 ms 98.922 ms
ps:
-I 使用ICMP协议发送包
当使用ICMP协议方式发包时,第13跳,显示了达到的目的主机,说明www.baidu.com针对ICMP协议的侦测包是没有进行屏蔽的
[root@hadoop Desktop]# traceroute -T -p 80 -n www.baidu.com
traceroute to www.baidu.com (115.239.210.27), 30 hops max, 60 byte packets
1 192.168.137.1 0.146 ms * *
2 192.168.0.1 6.733 ms 8.316 ms 8.218 ms
3 192.168.1.1 6.694 ms 7.433 ms 7.379 ms
4 114.84.180.1 166.208 ms 166.423 ms 166.289 ms
5 124.74.57.245 10.817 ms 10.722 ms 10.624 ms
6 124.74.215.61 47.588 ms 47.447 ms 42.182 ms
7 202.101.63.242 9.390 ms 8.717 ms 8.514 ms
8 202.97.82.14 19.384 ms 19.175 ms 12.587 ms
9 61.164.31.222 8.015 ms 8.499 ms 9.163 ms
10 115.233.23.230 10.347 ms 11.656 ms 10.316 ms
11 115.239.209.38 11.746 ms 11.495 ms 10.198 ms
12 * * *
13 115.239.210.27 8.750 ms 10.785 ms 9.864 ms
ps:
-T 使用Tcp协议的数据包
-p 侦测80端口(默认的http开发端口)
-n 去除解析信息(主机名),只留主机地址
当使用TCP协议方式发包事,第13跳显示了到达的目的主机
分析总结
- 1.traceroute默认UDP方式
- 2.使用参数改变发包方式,
- -I 使用ICMP协议方式
- -T 使用TCP协议方式
- 3.当使用其中一种方式发现不能显示达到的主机时,说明这种协议方式的侦测包是被目的主机屏蔽的