用R R选项运行p i n g程序

【用R R选项运行p i n g程序】在主机svr4上运行ping程序到主机slip 。一个中间路由器(bsdi)将处理这个数据报 。下面是svr4的输出结果:分组所经过的四站如图7-4所示(每个方向各有两站),每一站都把自己的IP地址加入RR清单 。
图7-4带有记录路由选项的ping程序
路由器bsdi在不同方向上分别加入了不同的IP地址 。它始终是把出口的IP地址加入清单 。我们还可以看到,当ICMP回显应答到达原始系统(svr4)时,它把自己的入口IP地址也加入清单中 。
还可以通过运行带有-v选项的tcpdump命令来查看主机sun上进行的分组交换(参见IP选项) 。输出如图7-5所示 。
图7-5记录路由选项的tcpdump输出
输出中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选项“endoflist(清单结束)”的值 。EOL选项的值可以为0 。这时表示39个字节的RR数据位于IP首部中的40字节空间中 。由于在数据报发送之前空间选项被设置为0,因此跟在39个字节的RR数据之后的0字符就被解释为EOL 。这正是我们所希望的结果 。假如在IP首部中的选项字段中有多个选项,在开始下一个选项之前必须填入空白字符,另外还可以用另一个值为1的非凡字符NOP(“nooperation”) 。
在图7-5中,SVR4把回显请求中的TTL字段设为32,BSD/386设为255(它打印出的值为254是因为路由器bsdi已经将其减去1) 。新的系统都把ICMP报文中的TTL设为最大值(255) 。
在作者使用的三个TCP/IP系统中,BSD/386和SVR4都支持记录路由选项 。这就是说,当转发数据报时,它们都能正确地更新RR清单,而且能正确地把接收到的ICMP回显请求中的RR清单复制到出口ICMP回显应答中 。虽然SunOS4.1.3在转发一个数据报时能正确更新RR清单,但是不能复制RR清单 。Solaris2.x对这个问题已作了修改 。

    推荐阅读