IPv4 option 源路由选项提供了我们这个能力,我们可以决定,数据包如何被发往目的主机。

严格源路由

严格源路由选择让路由器必须按照IP列表中的顺序转发,如果转发下一跳不在路由器直连子网中,那么数据包将被丢弃,源主机将收到源路由失败的ICMP消息。严格源路由选项类型值为137。

松散源路由

松散源路由选项则对转发路径的要求宽松一些,只要求转发路径能按顺序经过选项中的IP地址列表,可以在列表中的两个IP地址之间经过其他路由器。松散源路由选项类型值为131。

源路由选项结构上和记录路由非常相似,内容上有一些区别:

源路由选项的route data区域是一般非空的,是一个由发送端指定的IP地址列表;而记录路由选项在发送前是空的。

源路由选项的指针(pointer)指向下一个IP地址;记录路由选项的指针指向的是一个剩余存储空间的起始位置。

数据包到达目的主机时,且指针大小比选项长度小,路由器会将指针指向的IP地址填入数据包的目的IP地址字段,将数据包出接口的IP地址填入到指针指向的位置,然后将指针加4指向下一个IP地址,然后重新发送给这个新的IP地址。然而,如果指针大小比选项长度大,说明,已经到达了列表末尾。这个主机就是最终的目的主机。

数据包含有松散源路由选项,那么数据包转发过程中,如果自己不是目的主机,则会继续转发,不对IP列表进行操作。

最终目的主机收到数据包后,将源路由选项的ip地址列表反向处理后复制到响应数据包的option选项中,实现反向路由。路由过程与上述过程相同。

下面是一个严格源路由选项的使用示例。

R5#ping

Protocol [ip]:

Target IP address: 10.0.0.3

……

Loose, Strict, Record, Timestamp, Verbose[none]: s

Source route: 20.20.20.20 172.16.0.2

……

Sending 5, 100-byte ICMP Echos to 10.0.0.3, timeout is 2 seconds:

Packet has IP options: Total option bytes= 11, padded length=12

Strict source route: <*>

(20.20.20.20)

(172.16.0.2)

Reply to request 0 (148 ms). Received packet has options

Total option bytes= 12, padded length=12

Strict source route:

(172.16.0.2)

(20.20.20.20)

<*>

End of list

在日常使用中,traceroute仅能获悉去往目的主机的路径,返回的路径却无法确定。

Traceroute巧妙的结合源路由选项,即可获悉发送和返回的两条路径:

如要测试发送和返回的转发路径,发送主机为转发路径的本端,目的主机为转发路径的对端。发送主机将traceroute的目的ip地址设置为自己的ip地址,使用松散源路由选项,源路由设置为转发路径对端的ip地址。由于traceroute的逐跳返回ICMP差错消息的特性结合松散源路由的特性,使得traceroute能返回数据包发送和返回的全部路径。

下面是一个traceroute结合源路由的示例:主机10.0.0.3 发送去往10.0.0.3的ip数据包,源路由设置为 转发路径对端路由器的ip地址 20.20.20.30。从结果可以看到数据包全程经过的路径。

R3#traceroute

Protocol [ip]:

Target IP address: 10.0.0.3

……

Loose, Strict, Record, Timestamp, Verbose[none]: l

Source route: 20.20.20.30

Loose, Strict, Record, Timestamp, Verbose[LV]:

Type escape sequence to abort.

Tracing the route to 10.0.0.3

1 10.0.0.1 8 msec

Received packet has options

Total option bytes= 8, padded length=8

Loose source route: <*>

(10.0.0.3)

End of list

2 172.16.0.1 92 msec

Received packet has options

Total option bytes= 8, padded length=8

Loose source route: <*>

(10.0.0.3)

End of list

3 20.20.20.30 132 msec

Received packet has options

Total option bytes= 8, padded length=8

Loose source route: <*>

(10.0.0.3)

End of list

4 20.20.20.20 208 msec

Received packet has options

Total option bytes= 8, padded length=8

Loose source route:

(20.20.20.30)

<*>

End of list

5 172.16.0.2 240 msec

Received packet has options

Total option bytes= 8, padded length=8

Loose source route:

(20.20.20.30)

<*>

End of list

6 10.0.0.3 160 msec

Received packet has options

Total option bytes= 8, padded length=8

Loose source route:

(20.20.20.30)

<*>

End of list

朱古力

By 朱古力

一条咸鱼

发表评论

电子邮件地址不会被公开。 必填项已用*标注