《TCP/IP详解卷一》学习笔记(8)Traceroute程序

引言

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

Traceroute程序的操作

在学习Ping程序的时候,我们描述了IP记录路由选项(RR)。为什么不使用这个选项,而另外再开发新一个应用?

  • 不是所有的路由器都支持记录路由选项,该选项在某些路径上不能使用
  • 记录路由一般是单向的选项。Ping服务把接收到的RR清单返回,使得记录下来的IP地址翻了一番。
  • IP首部中留给选项的空间有限,不能存放大多数的路径。

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

TTL字段由发送端设置一个8bit字段,每个处理数据报的路由器都要把TTL的值减1。

TTL字段的目的是防止数据报在选路时无休止地在网络中流动。当路由器收到一份IP收据报,如果其TTL字段是0或1,则路由器不转发该数据报,相反,路由器将该数据包丢弃,并个信源端发一份ICMP“超时”信息。Traceroute的关键在于包含这份ICMP信息的IP报文的信源地址是该路由器的IP地址。

Traceroute的操作过程:

  • Traceroute程序发送一份TTL为1的IP数据报给目的主机,处理该数据报的第一个路由器将TTL减1,然后丢弃该数据报,并发回一份ICMP超时报文,我们就得到了第一个路由器的地址。
  • 然后Traceroute程序发送一份TTL为2的IP数据报,我们就得到了第二个路由器的地址。
  • 继续这个过程直到到达目的主机。
  • 目的主机接收到TTL为1的IP数据报也不会丢弃,我们需要另外的方法判断是否已经到达目的地了。Traceroute程序发送一份UDP数据报给目的主机,但选择一个不可能的值最为UDP端口号。当数据报到达时,目的主机产生一份“端口不可达”错误的ICMP报文。

注意事项:

  • 不能保证现在的路由也是将来要采用的路由,甚至两份连续的IP数据报都可能采用不同的路由。
  • 不能保证ICMP报文的路由与traceroute程序发送的UDP数据报采用同一路由,这表明所打印出来的往返时间可能不能真正体现数据报发出和返回的时间差。
  • 返回的ICMP报文中的信源IP地址是UDP数据报到达的路由器接口的IP地址。这与IP记录路由选项不同,记录的IP地址指的是发送接口地址。

IP源站选路选项

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

  • 严格的源站选路。发送端指明IP数据报所必须采用的确切路由。如果一个路由器发现源路由所指定的下一个路由器不再其直接连接的网络上,那么就返回一个“源站路由失败”的ICMP差错报文。
  • 宽松的源站选路。发送端指明一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。

源站路由选项的格式:

âIPé¦é¨æºç«è·¯ç±é项çæ ¼å¼âçå¾çæç´¢ç»æ

这个格式与记录路由选项格式基本一致。不同的是,对于源站选路,我们必须在发送IP数据报前填充IP地址清单;对于记录路由选项我们需要为IP地址清单分配并清空一些空间,让路由器填充该清单。

对于宽松的源站选路来说,code字段的值是0x83;对于严格的源站选路,其值为0x89。

发布了23 篇原创文章 · 获赞 0 · 访问量 982

猜你喜欢

转载自blog.csdn.net/u014635079/article/details/88869989