Traceroute程序

Traceroute程序允许我们记录到达某个主机的路由,虽然两个连续的IP报文到达同一个主机的路由可能不一样,但大部分时候是一样的,Traceroute程序提供了源路由选项。

Traceroute与IP的RR选项的功能重合了,相对于IP的RR选项有什么优势?
1、并不是所有的路由器都支持IP的RR选项。(Traceroute不需要什么特殊要求就可以在路由器上执行)

2、最主要的原因:RR选项选项最多记录9个IP地址,

引理:

Traceroute应用了IP报文中的TTL和ICMP,先对TTL做一个了解。

TTL(time to live):指IP报文在网络上的最大存活时间,由发送源初始化,每个接收报文的路由器都会减少TTL的值,有两种递减算法:1、每到一个路由器减一,2、减去路由器持有该报文时间。由于路由器持有报文的时间一般小于1s,所以采用第一种策略。

当路由器接收到TTL值为0或1的IP报文时,它不会转发该报文(摘自《TCP/IP协议详解卷一》,神奇的是若TTL为1就不会转发,那么TTL为0的IP报文就不会出现,我觉得这句话的意思是:路由器接收到TTL为1的报文,此时减去1变为0,路由器不会转发TTL为0的报文)。

过程:

设x=1

1、发送TTL为x的IP报文给目的主机,第一个接收到IP报文的路由器将TTL减1得0,丢弃该IP报文,返回一个超时ICMP报文。

2、发送源主机接收到ICMP报文,记录路由器的IP地址(IP头部中的发送源地址)。

3、x+=1。

重复1~3,直到报文到达目的主机,此时目的主机不会发送超时ICMP报文通知Traceroute,因为报文已经到达目的地址,Traceroute用了一个很巧妙的方法,它将IP报文的端口号设置为超级大,目的主机根本不会有该端口,此时目的主机会返回ICMP端口不可达错误,发送源主机便知道IP报文已经到达目的地,此时退出循环。

源路由选项

松散源路由:发送端指明了一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。

严格源路由:发送端指明IP数据报所必须采用的确切路由。如果一个路由器发现源路由所指定的下一个路由器不在其直接连接的网络上,那么它就返回一个“源站路由失败”的ICMP差错报文。

IP的源路由选项报文结构:

Traceroute程序_第1张图片

code区域:0x83表示松散源路由,0x89表示严格源路由,len、ptr代表的意义与IP的RR选项一致。

在发送报文前,需要先填充IP addr,由于选项长度的限制,最多可以指定9个地址。

源路由的过程:

1、发送方将IP地址列表中的第一个地址取出来作为IP报文中的目的IP地址,将剩下的地址往左移动一格,将目的IP地址填充到列表中最后一个IP地址之后,ptr仍指向第一个条目。

2、对于源路由来说,每个接收路由器都会检查自己的IP地址是否和IP报文中的目的IP地址一致,否则,则转发,若是,进入到第三步。

3、取出ptr所指的IP地址,作为IP报文中的目的IP地址,发送接口的IP地址替代ptr所指处的IP地址,ptr加4


你可能感兴趣的:(网络协议)