每个系统都把接口的地址放到选项去。通过这种方法, 分组所采用的路由都被记录在选项中。被记录的路由将被目的系统倒转过来放到应答分组上,让他们沿着原始的路由的逆方向发送。除了UDP,Net/3在应答时总是把收到的源路由逆转过来。

选项处理主要包含以下几个部分:

1)源路由的结束

如果IP首部的目的地址是某个本地地址,并且offset所指向的超过了源路由的末尾,源路由中没有地址了,则分组已经到达了目的地,调用save_rte将源路由保存在如下图所示的ip_srcrt结构中,因为在最终目的地,运输协议必须能够使用分组中被记录下来的路由,运输协议必须把该路由倒过来并附在所有应答的分组上。

2)为下一跳更新分组

如果IP首部目的地址是一个本地地址,并且offset指向选项内的一个地址,则该系统是源路由中指定的一个中间系统,分组还没有到达目的地。在严格路由中,下一个系统必须位于某个直接相连的网络上,而在宽松路由中,如果没有找到下一个系统的接口或路由,则发送一个ICMP源路由失败差错报文。

如果找到一个接口或一条路由,则更新IP目的地址设置为offset指向的IP地址。在源路由选项内,用外出接口的地址代替中间系统的地址,把offset增加,指向路由的下一个地址。

3)多播目的地

如果新的目的地址不是多播地址,在处理完所有选项后,应该把分组转发不是返回给ipintr。

源路由中的多播地址允许两个多播路由器通过不支持多播的中间路由器进行通信。

5.时间戳选项

当分组穿过一个互联网时,时间戳选项使各个系统把它当前的时间表示记录在分组的选项内。时间是以从UTC的午夜开始计算的毫秒计,被记录在一个32bit的字段里。

如果系统没有准确的UTC或没有每秒更新至少15次,就不把它作为标准时间,非标准时间必须把时间戳字段的高位置位。

有三种时间戳选项,Net/3通过下图所示的ip_timestamp结构访问。

ip_flg指定的三种时间戳选项如下:

初始主机必须构造一个具有足够大的数据区存放可能的时间戳和地址的地址的时间戳选项,对于ipt_flg为3的时间戳选项,

初始主机在构造该选项时,填写要记录时间戳的系统的地址。下图显示了三种时间戳选项的结构。

因为IP选项只有40个字节,所以时间戳选项限制只能有9个时戳,或4个地址和时间时戳对。


相关内容