TCP/IP详解008Traceroute程序

Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。
Traceroute程序还可以让我们使用IP源路由选项。
Traceroute程序使用ICMP报文和IP首部中的TTL字段。TTL字段是由发送端初始设置一个8bit字段。
TTL字段的目的是防止数据报在选路时无休止地在网络中流动。
当路由器受到一份IP数据报,如果其TTL字段是0或1,则路由器不转发该数据报。相反,路由器将该数据丢弃,并给信源机发一份ICMP“超时”信息,Traceroute程序的关键在于包含这份ICMP信息的IP报文的信源地址是该路由器的IP地址。
Traceroute的操作过程:
它发送一份TTL字段为1的IP数据报给目的主机,处理这份数据报的第一个路由器将TTL值减1,丢弃该数据报,并发回一份超时ICMP报文。这样就得到了该路径中的第一个路由器的地址。然后,Traceroute程序发送一份TTL值为2的数据报,这样我们就可以得到第二个路由器的地址,继续这个过程直至该数据报到达目的主机,但是目的主机哪怕接收到TTL值为1的IP数据报,也不会丢弃该数据报并产生一份超时ICMP报文,这是因为数据报已经达到其最终目的地,那么我们该如何判断是否已经达到目的主机了呢?
Traceroute程序发送一份UDP数据报给目的主机,但它选择了一个不可能的值作为UDP端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口,因为,当该数据报到达时,将目的主机的UDP模块产生一份“端口不可达”的错误的ICMP报文。这样,Traceroute程序索要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。

ICMP超时报文的报文格式


TCP/IP详解008Traceroute程序_第1张图片
image.png

关于traceroute程序,需要指出
1、不能保证现在的路由也是将来所要采用的路由
2、不能保证ICMP报文的路由与traceroute程序发送的UDP数据报采用同一路由。
3、返回的ICMP报文中的信源IP地址是UDP数据报到达的路由器接口的IP地址。这与IP记录路由选项不同,记录的IP地址指的是发送接口地址
在广域网中,由于traceroute程序接收到ICMP报文时,它所获得的唯一信息就是IP地址,在给定IP地址的情况下,它做一个“反向域名查看”工作来获得域名

IP源站选路选项

通常IP路由是动态的,即每个路由器都需要判断数据报下面转发到哪个路由器。
源站选路(source routing)的思想是由发送者指定路由。可采用两种形式:
1、严格的路由选择 发送端指明IP数据报所必须采用的确切路由。如果一个路由器发现源路由所指定的下一个路由器不在其直接连接的网络上,那么它就返回一个“源站路由失败”的ICMP差错报文
2、宽松的源站选择。发送端指明了一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。

你可能感兴趣的:(TCP/IP详解008Traceroute程序)