TCP/IP协议学习记录之九:Traceroute程序

   Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由,还可以使用IP源路由选项;

Traceroute程序的操作

  为什么不使用IP记录路由选项而另外开发这个程序:

1).原先并不是所有的路由器都支持记录路由选项

2).记录路由一般是单向的选项

3).IP首部留给选项的空间有限,不能存放太多的路径,在IP首部最多只能存放9个IP地址;

Traceroute程序使用ICMP报文和IP首部中的TTL字段。

      每个处理数据报的路由器都需要把TTL的值减去1或者数据报在路由器中停留的秒数,由于大多数路由转发数据报的时延都小于1秒钟,因此TTL最终成为一个跳站的计数器,每经过一个路由器都将其值减1;

      TTL字段的目的是防止数据报在选路时无休止的在网络中流动。

      当路由器收到一份IP数据报时,如果其TTL字段是0或者1,则路由器不转发该数据报,而是将其丢弃,并且给信源发一份ICMP超时信息。当目的主机收到一份IP数据报,其TTL字段是0或者1时,则将其交给应用程序,但是通常情况下,系统不接受TTL为0的数据报。

       TTL程序的操作过程:先发送一份TTL字段为1的IP数据报给目的主机,然后处理这份数据报的第一个路由器将TTL值减1,丢弃该数据报,并发回一个超时ICMP报文;这样就得到了该路径中的第一个路由器的地址,然后发送一份TTL为2的数据报,这样我们就可以得到第二个路由器的地址。然后继续这个过程直至该数据报达到目的主机,但是目的主机哪怕ji  接受到TTL值为1的IP数据报,也不会丢弃该数据报并产生一份超时ICMP报文,因为数据报以到达其最终目的地。

     判断是否达到目的主机:选择一个不可能的值作为UDP端口号,使目的主机的任何一个端口都不可能使用该端口,因此,当数据报达到目的主机时,将使目的主机的UDP模块产生一份‘端口不可达”错误的ICMP报文。所以Traceroute程序凭借区分收到的是ICMP超时报文还是ICMP端口不可达报文就可以判断什么结束;

IP源站选路选项(又称源站及记录路由)

通常IP路由是动态的,即每个路由器都要判断数据报下面该转发到哪个路由器,应用程序不对此进行控制;

源站选路的思想是由发送者指定路由,有两种形式:

一.严格的源路由选择

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

二.宽松的源站选路

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

从上图可以看出,每一跳IP数据报中的目的地址都发生改变,即都是下一个路由器的IP地址;当一个应用程序接收到由信源指定路由的数据时,在发送应答时,应该读出接收到的路由器,并提供反向路由。

  可以用宽松的源站选路来检测发往目的主机的路由是否与从目的主机返回的路由一样(把发送端和接收端的IP地址设置为一样的);

猜你喜欢

转载自blog.csdn.net/cxy19931018/article/details/81303266
今日推荐