ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
我们举一个用RR选项运行ping程序的例子,在主机svr4上运行ping程序到主机slip。 一个中间路由器( bsdi )将处理这个数据报。下面是svr4的输出结果: ![](https://box.kancloud.cn/2016-04-13_570de356be567.png) 分组所经过的四站如图7-4所示(每个方向各有两站),每一站都把自己的IP地址加入RR清单。 ![](https://box.kancloud.cn/2016-04-13_570de356d78d9.png) 路由器bsdi在不同方向上分别加入了不同的IP地址。它始终是把出口的IP地址加入清单。 我们还可以看到,当ICMP回显应答到达原始系统(svr4)时,它把自己的入口IP地址也加入清单中。 还可以通过运行带有-v选项的tcpdump命令来查看主机sun上进行的分组交换(参见IP选项)。输出如图7-5所示。 ![](https://box.kancloud.cn/2016-04-13_570de356eae68.png) 输出中optlen = 40表示在IP首部中有40个字节的选项空间(IP首部长度必须为4字节的整数倍)。RR{39}的意思是记录路由选项已被设置,它的长度字段是39。然后是9个IP地址,符号“#”用来标记RR选项中的ptr字段所指向的IP地址。由于我们是在主机sun上观察这些分组(参见图7-4),因此所能看到ICMP回显请求中的IP地址清单是空的,而ICMP回显应答中有3个IP地址。我们省略了tcpdump输出中的其他行,因为它们与图7-5基本一致。 位于路由信息末尾的标记EOL表示IP选项“end of list(清单结束)”的值。EOL选项的值可以为0。这时表示39个字节的RR数据位于IP首部中的40字节空间中。由于在数据报发送之前空间选项被设置为0,因此跟在39个字节的RR数据之后的0字符就被解释为EOL。这正是我们所希望的结果。如果在IP首部中的选项字段中有多个选项,在开始下一个选项之前必须填入空白字符,另外还可以用另一个值为1的特殊字符NOP(“no operation”)。 在图7-5中,SVR4把回显请求中的TTL字段设为32,BSD/386设为255(它打印出的值为254是因为路由器bsdi已经将其减去1)。新的系统都把ICMP报文中的TTL设为最大值(255)。 在作者使用的三个TCP/IP系统中,BSD/386和SVR4都支持记录路由选项。这就是说,当转发数据报时,它们都能正确地更新RR清单,而且能正确地把接收到的ICMP回显请求中的RR清单复制到出口ICMP回显应答中。虽然SunOS 4.1.3在转发一个数据报时能正确更新RR清单,但是不能复制RR清单。Solaris 2.x对这个问题已作了修改。