深入理解Traceroute程序

来源:互联网 发布:windows常用mib oid 编辑:程序博客网 时间:2024/05/14 00:18

Traceroute的命令参数:
-n : 可以不必进行主机的名称解析,单纯使用IP,速度较快;
-U :使用UDP的port 33434来进行检测,这是默认的检测协议;
-I :使用ICMP的方式来进行检测;
-T :使用TCP来进行检测,一般使用port 80测试;
-w timeout: 若对方主机在几秒内没有回应就声明不通,默认是5秒
-p port:若不想使用UDP与TCP的默认端口号来检测,可在此改变端口号;
-i device:当自己的主机有多个网络接口时,可在此指明使用的接口;
-g gateway:宽松的源站选路。指定路线中的路由;

作用:Traceroute最早是由Van Jacobson在1988写出的小程序。可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由及RTT(往返时间)。
原理:Traceroute程序的设计是利用ICMP及IP header的TTL。首先,traceroute发出一个TTL等于1的IP datagram(20字节IP首部+8字节UDP首部+32字节的数据=60字节)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0,所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器…… traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息

1. 使用UDP检测
这里写图片描述
a)源主机发出IP[UDP[data]] packet, 源主机 port使用随机的任何大于32768的高段port, 目的 port从33434开始每送个program依此递增,直至33434+29,(cisco router上使用extended-traceroute命令可以修改这个起始的33434 port #),
同时TTL从1开始依此递增,直至1+29=30(最多送30个probe)。中间的router送回 ICMP TTL-expired,使得source得知了中间的每一个router,最后的目的主机送回TTL-expired 和ICMP port unreachable (因为任何主机上都没有应用使用UDP port# >32768这样的高段port )。

b)由于中间某处路由封掉UDP port>32768的回显导致traceroute不工作 ;封掉TTL超时会使源主机看不到中间的router (有的router根本不支持回送TTL超时);封掉type3 code3可能看不到目的主机 .
由于回送TTL-expired的信息需要CPU生成一个packet,必须打断 CPU,为保证其它工作的正常进行,cisco router每隔一秒才处理traceroute ,所以在source 上你可能看到中间一路 * * *,但却看得到最后的destination. 这是中间的router CPU太忙或者中间路由器不回送TTL-expired包的原因.所以使得UDP数据包在TTL为17以后均被丢弃,导致以下发出的数据报均被丢弃,而显示
17 * * 18 * 19 * 20 * 21 * 22 * 23 * *
24 * * 25 * 26 * 27 * 28 * 29 * 30 * *

2. 使用TCP检测。
这里写图片描述
a)由于现在很多防火墙都过滤掉了使用UDP和ICMP的traceroute检测包,所以使用TCP检测可以得到较为完整的路由。

3. 使用ICMP检测。
这里写图片描述

a) IP[ICMP[Request],第一个request的TTL为1,第二个request的TTL为2,以后依此递增直至第30个;中间的router送回ICMP TTL-expired ( ICMP type 11)通知源主机,(packet同时因TTL超时而被丢弃),由此源主机知晓一路上经过的每一个router;最后的 目的主机送回ICMP Echo Reply 。
所以中间任何一个router上如果封了ICMP Echo Request , traceroute就不能工作 ;如果封了type 11 (TTL-expired), 中间的router全看不到 ,但能看到packet 到达了最后的目的主机;如果封了ICMP Echo Reply,中间的全能看到,最后的目的主机看不到 。

0 0
原创粉丝点击