TCP/IP协议详解卷一:Chapter8 笔记

TCP/IP协议详解卷一:Chapter8 笔记

  • Chapter 8 Traceroute 程序
    • 8.2节 Traceroute程序的操作
    • 8.3节 局域网输出
    • 8.5节 IP源站选路选项

Chapter 8 Traceroute 程序

Traceroute程序可以显示IP数据报从一台主机传到另一台主机所经过的路由。相对于IP记录路由RR选项,使用Traceroute程序而不是前者主要有以下三个原因:

  1. Traceroute程序不要求中间路由器具备任何特殊的或可选的功能;
  2. 记录路由一般是单向的选项。大多数的Ping服务器把接收到的RR清单返回,使得记录下的IP地址翻了一番;
  3. IP首部中留给选项的空间有限,选项字段中最多只能存放9个IP地址。

8.2节 Traceroute程序的操作

Traceroute程序使用ICMP报文和IP首部中的8位TTL字段(生存周期)。TTL字段推荐的初始值为64,最大值为255。每个处理数据报的路由器都把TTL的值减去1或者数据报在路由器中停留的秒数。

当路由器收到的数据报TTL字段是0或1时,路由器不转发该数据报;相反地,路由器丢弃该数据报,并给信源机发送一份ICMP超时信息。Traceroute程序的关键在于包含这份ICMP超时信息的IP报文的信源地址是该路由器的入口IP地址。Traceroute程序发送一份TTL字段为1的IP数据报给目的主机,就可以得到路径中第一个路由器的IP地址。以此类推,发送一个TTL字段为2的IP数据报,就可以得到路径中第二个路由器的IP地址。

Traceroute程序发送一份UDP数据报给目的主机上一个不可能的UDP端口号(大于30000)。目的主机将返回一份端口不可达错误的ICMP报文。通过区分接收到的ICMP报文是超时还是端口不可达,Traceroute程序可以判断是否已经到达目的主机。

Windows系统中对应的程序为tracert。

8.3节 局域网输出

一个例子:从svr4经路由器bsdi到slip的简单网络
TCP/IP协议详解卷一:Chapter8 笔记_第1张图片bsdi和slip之间是9600 b/s的SLIP链路,异步传输速率为 9600 / (8+2) = 960 B/s。在svr4主机上运行traceroute程序到主机slip的输出如下:

TCP/IP协议详解卷一:Chapter8 笔记_第2张图片
输出的第一列给出了目的主机slip的主机名和IP地址。30 hops max指出TTL字段的最大值为30。40 byte packets指发送的40字节IP数据报,包括20字节IP首部、8字节UDP首部、以及12字节用户数据(序列号、TTL副本、发送数据报的时间)。

接下来的两行中,行首的数字是TTL字段的值,然后依次是主机名或路由器名及其IP地址。对于每个TTL值,都发送3份数据报,并打印出对应的往返时间。如果在5秒钟内未收到其中任意一份数据报的响应,则打印一个星号,并发送下一份数据报。

在路由器bsdi对应的三个往返时间中,第一份数据报的往返时间20ms大于后两个时间值是因为发生了一次ARP交换。使用tcpdump命令可以验证这种情况。

TCP/IP协议详解卷一:Chapter8 笔记_第3张图片
ICMP超时报文 = 8位类型(=11) + 8位代码(=0或1) + 16位校验和 + 32位未用(必须为0) + 20字节IP首部(包括选项)+ 原始IP数据报中数据的前8字节

其中,代码 = 0对应 TTL值等于0时产生的ICMP报文;代码 = 1对应主机组装分片时产生的超时报文。

在上面的例子中,发送的数据报大小为42字节(40字节的IP数据报 + 2字节SLIP帧END字符)。返回的数据报大小为58字节(20字节IP首部 + 8字节ICMP首部 + 20字节产生差错的IP数据报首部 + 紧随该IP首部的8字节数据 + 2字节SLIP帧END字符)。考虑到SLIP链路异步传输速率为 9600 / ( 8 + 2 ) = 960 B / s 9600 / (8+2) = 960 B/s 9600/(8+2)=960B/s,可得RTT ( 42 B + 58 B ) / ( 960 B / s ) = 104 m s (42B +58B) / (960B/s) = 104ms (42B+58B)/(960B/s)=104ms。这个结果与traceroute程序的结果110ms大致相同( 120 m s − 10 m s = 110 m s 120ms - 10ms = 110ms 120ms10ms=110ms)。

8.5节 IP源站选路选项

源站路由(source routing)的思想是由发送者指定路由,可以分为以下两种形式:

  1. 严格的源站选路SSRRcode = 0x89)。发送端指明IP数据报所必须采用的确切路由。
  2. 宽松的源站选路LSRRcode = 0x83)。发送端指明了一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。

源站路由选项的格式如下图所示。
TCP/IP协议详解卷一:Chapter8 笔记_第4张图片可以看出它与Ping程序的RR记录路由选项基本一致。但是我们必须在发送IP数据报之前填充好IP地址清单。

宽松的源站选路使用traceroute的 -g 选项指定最多8个中间路由(最后的表目是目的主机)。
严格的源站选路使用traceroute的 -G 选项指定中间路由。

TCP/IP协议详解卷一:Chapter8 笔记_第5张图片其中,!S 表示traceroute程序接收到ICMP源站路由失败的差错报文。RTT位置的 * 表示未收到这次探查的应答信号。

在Internet上,往返选路可能是不对称的。

你可能感兴趣的:(读书笔记)