TCPIP详解Protocol 读书笔记(八) Traceroute程序

TCP/IP详解:Protocol 读书笔记(八)

Chapter8 Traceroute程序

文章目录

  • TCP/IP详解:Protocol 读书笔记(八)
    • Chapter8 Traceroute程序
      • 为什么会出现Traceroute功能
      • Traceroute原理

为什么会出现Traceroute功能

在上一章节将ping程序时,书中提到了IP记录路由选项,但是在探测源端主机到目的主机之间所经路由情况时,我们通常采用的不是ping -R [IP地址]这种形式。而是采用Traceroute这个便利的工具。

最主要的原因是,IP首部中留给IP记录路由选项的空间有限,不能存放当前大多数的路径。在IP首部选项字段中最多只能存放9个IP地址,无法完整的记录数据探测包所经过的路由器。对于现在的互联网来说,远远不够。因此Traceroute程序为了解决这种情况也就应运而生。

Traceroute原理

Traceroute使用ICMP报文和IP首部中的TTL字段实现。TTL字段是由发送端初始设置一个8bit字段。推荐的初始值由分配数字RFC指定,当前值为64。从第七章中的一些ping程序例子中可以看出,发送ICMP回显应答时经常把TTL设为最大值255。

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

TTL字段是为了防止数据报在IP包选路时无休止地在网络中传输。例如,当路由器瘫痪或者两个路由器之间的通信断开,选路协议有时会去检测丢失的路由并一直进行下去。因此在这个时间段内,依据TTL,数据报的传输会在循环回路中被终止。

当路由器收到IP数据报,如果TTL字段是1,则路由器不转发该数据报,路由器将该数据报丢弃,并给源端主机发一份ICMP超时(上一章讲到的Time Exceeded错误)信息。Traceroute程序的关键就在于这份ICMP信息的IP数据报文中的源端IP地址就是该路由器的IP地址。

因此类推一下,整个Traceroute程序的整个过程:

  1. 当我们敲下Traceroute [主机名/IP地址]的时候,程序会先向目的主机发送一个TTL=1的UDP数据包。
  2. 经过的第一个路由器收到这个数据包后,就自动把TTL减1。TTL变为0后,路由器就将这个包丢弃,同时产生一个主机不可达的ICMP错误数据报发送给源端主机。
  3. 主机收到这个数据报后再发送一个TTL=2的UDP数据报给目的主机,这样当第二个路由器收到这个数据报后,TTL经过递减,刚好等于0。因此第二个路由器会发送ICMP错误信息数据报发送给源端主机。
  4. 不断递增TTL数值,并执行发送UDP数据报的操作,直到到达目的主机。但是目的主机即使接收到TTL=1的UDP数据报,也不会丢弃该数据报并产生一份超时ICMP报文,因为数据报已到达其最终目的地。

超时ICMP报文,因为数据报已到达其最终目的地。

Traceroute程序发送一份UDP数据报给目的主机,但是这份UDP数据报选择端口号>30000进行发送,使得目的主机任何一个应用程序不可能使用的端口。因为TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较小的端口,如80,23等。这样,当UDP数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP报文。源端主机接收到这个报文后就可以得知目的主机已经到了。这样,Traceroute程序所要做的就是区分源端接收到的ICMP报文是超时还是端口不可达,用来判断什么时候到达目的主机。

你可能感兴趣的:(TCP/IP,计算机网络,TCP-IP协议栈)