使用IP选项实现Traceroute程序( 二 )


ID标识号(IDNumber):
与引起此消息的数据包中的IPTraceroute选项部分的相应字段相同 。这同样不与IP首部的ID标识号有任何关系 。
外出跳跃计数(OutboundHopCount):
与引起此消息的数据包中的IPTraceroute选项部分的相应字段相同 。
返回跳跃计数(ReturnHopCount):
与引起此消息的数据包中的IPTraceroute选项部分的相应字段相同 。
输出连接速度(OutputLinkSpeed):
发送“外出/返回数据包”所在连接的速度 , 以“字节(8位)/秒”计 。选择“字节/秒”而不是“位/秒”是考虑到如下事实:网络速度不久即将突破4.3GB/s , 同时有些机器处理大于32位字段的效率很低 。假如这个值不能确定 , 那么该字段应该置为零 。
输出连接MTU(OutputLinkMTU):
发送“外出/返回数据包”所在连接的MTU , 以“字节”计 。MTU所针对的只是数据包中的数据部分 , 包括IP首部 , 但不包括链路层所加的首部及尾部封装 。假如这个值不能确定 , 那么该字段应该置为零 。
3.协议
带有IPTraceroute选项的外出数据包通常不应该使用非凡的服务类型(TypeOfService , 简称TOS)或优先级(Precedence) , 除非想要跟踪具有非凡服务类型或优先级的数据包路径 。
外出数据包的TTL值应该设置成“数字分配”[2]一文中所指定的默认值 。
3.1跳跃(Hop)计数
跳跃计数提供了有关外出/返回数据包到目的主机所经路径长度的信息 。这些计数也提供了判定ICMPTraceroute消息丢失与否的一种方法 。举个例子来说 , 假如一个OHC为6的消息紧跟在一个OHC为4的消息后面 , 那么我们可以得出结论 , 那个OHC为5的消息丢失了 。这也说明了仅计算Traceroute消息的数目不能有效判定路径长度的原因 。
外出数据包的源端应当把数据包中的OHC设成0 , 而把RHC设成0xFFFF 。0xFFFF这个非凡数值用来表示这是一个外出数据包而不是返回数据包 , 返回数据包的RHC为0 。
另外要注重的很重要的一点是 , 这个跳跃计数与与IP的TTL没有任何关联 。跳跃计数的步增应该仅在一个ICMPTraceroute消息发出时进行 。
3.2目的主机操作
若一主机接收到一个带有IPTraceroute选项的外出数据包 , 那么在被要求应答的时候(如ICMPEcho服务的请求/应答) , 返回数据包也应当带有此选项 。在返回数据包中必须填入如下内容:ID标识号、OHC和源IP地址 。而RHC字段应当被设为0 。
外出数据包的目的主机不应该再增加跳跃计数或者发送任何的ICMPTraceroute消息 。
3.3路由器操作
当路由器转发一个含有IPTraceroute选项的数据包时 , 它应当给源IP地址字段所指出的主机发送一份ICMPTraceroute消息 。假如接收到的数据包中的RHC字段为0xFFFF , 那么这个数据包就是外出数据包 , 因此路由器应当将OHC字段的值加一;否则路由器应将RHC字段加一 。而发回的Traceroute消息应该反映出增加后的跳跃计数 。输出连接速度应当设置成发送“外出/返回数据包”所在连接的速度 , 以“字节(8位)/秒”计(如一个以太网速度为1,250,000) , 该字段也可以设成零以表示速度不能确定 。输出连接MTU应当设置成发送“外出/返回数据包”所在连接的MTU , 该字段同样可以为零以表示MTU不能确定 。
当Traceroute选项存在时 , 外出/返回数据包的转发过程应该像它不存在一样 。也就是说 , 到达目的主机的路径与是否存在Traceroute选项无关 。
ICMPTraceroute消息应该与外出/返回数据包具有相同的TOS和优先级 。TTL值应该设置成“数字分配”[2]一文中所指定的默认值 。
ICMPTraceroute消息不应该再具有IPTraceroute选项 。

推荐阅读