如图1-4的拓扑中, R1去往R4的10.1.1.0/24网段,可以配置静态路由并以R2的fa0/1接口的IP地址为下一跳,但当R2的fa0/1端口为down时,需手动把静态路由切换到R3的fa0/1接口的IP地址,反之亦然。

静态路由中的递归路由原理与冗余备份链路的实现_第1张图片图1-4

当链路数量很大时,在静态路由中关联直连网段中的下一跳地址,配置工作将非常巨大。此时可以在静态路由中关联非直连网段中的下一跳地址。例如当R1要访问R4上的直连网段10.1.1.0/24时,可以将R1的静态路由直接关联R4fa0/0接口的IP地址 (ip route 10.1.1.0 255.255.255.0 fa0/0 200.2.2.4)。但是,R1上没有去往200.2.2.0/24网段的路由,所以关联200.2.2.2为下一跳地址的去往10.1.1.0/24的静态路由是无法使用的。


基本环境配置与分析

R1

conf t

hostname R1

int fa0/1

ip add 100.1.1.1 255.255.255.0

no shut

exit

ip route 10.1.1.0 255.255.255.0 fa0/1 200.2.2.4        /配置去往10.1.1.0/24网段的路由并直接关联R4fa0/0接 

                                          口的IP地址


R2

conf t

hostname R2

int fa0/1

ip add 100.1.1.2 255.255.255.0

no shut

int fa0/0

ip add 200.2.2.2 255.255.255.0

no shut

exit

ip route 10.1.1.0 255.255.255.0 fa0/0 200.2.2.4      /配置去往10.1.1.0/24网段的静态路由


R3

conf t

hostname R3

int fa0/0

ip add 200.2.2.3 255.255.255.0

no shut

int fa0/1

ip add 100.1.1.3 255.255.255.0

no shut

exit

ip route 10.1.1.0 255.255.255.0 fa0/0 200.2.2.4

  

R4

conf t

hostname R4

int fa0/0

ip add 200.2.2.4 255.255.255.0

no shut

int lo0

ip add 10.1.1.1 255.255.255.0

no shut

exit

ip route 1.1.1.0 255.255.255.0 fa0/0 200.2.2.2        /配置去往1.1.1.0/24网段的静态路由



查看R1路由表

静态路由中的递归路由原理与冗余备份链路的实现_第2张图片

从路由表中可以得知,R1想要发送报文给10.1.1.0/24网段,则先需要把报文发给下一跳地址200.2.2.4,而下一跳地址所在的网段不与R1直连且R1没有去往200.2.2.0网段的路由条目。R1目前只知道想要把报文发送给下一跳地址所在的200.2.2.0网段需通过fa0/1接口发出。由于R1fa0/1是在MA(多路访问)网段,当前发给哪一个下一跳地址可以到达200.2.2.0网段还处于未知状态,所以这时候路由器会发送ARP请求以获取200.2.2.4MAC信息。

R1R2R3上开启debug arp,以验证ARP请求是否从R1发出并分别被R2R3成功接收:

R1ping 10.1.1.1


从图1-5可以得知,结果R1无法ping10.1.1.1,但是伴随着pingR1发送了ARP请求。原因是R1要访问目的地址10.1.1.1需要先拥有访问下一跳地址200.2.2.4所在的网段路由条目,而R1没有去往200.2.2.0/24网段的路由,所以需要发送ARP请求以获取下一跳地址200.2.2.4所对应的MAC地址:

静态路由中的递归路由原理与冗余备份链路的实现_第3张图片

图1-5


由于思科路由器默认情况下所有的接口是开启代理ARP的,所以R2R3都能接收到来自于R1ARP请求。疑问:在此环境中,R2R3是否会给R1返还ARP应答?

分析:代理ARP满足下列条件时才会生效

  • 当一个路由器的接口收到ARP请求时,请求者和被请求者不在同一个网段中(R1f0/1接口和R4f0/0接口不在同一网段中)

  • 收到ARP请求的路由器需要拥有去往源和目的网段的路由条目 (R2R3同时拥有100.1.1.0/24网段和200.2.2.0/24网段的路由条目)

  • 接口的代理ARP功能为开启状态


结论:R2R3都会给R1返还ARP应答,且用自己的fa0/1接口的MAC地址为R1作出相对的应答。


查看R2R3debug arp信息以验证:

静态路由中的递归路由原理与冗余备份链路的实现_第4张图片


静态路由中的递归路由原理与冗余备份链路的实现_第5张图片

从图中可以看出R2R3分别用自己的fa0/1接口的MAC地址对R1所发出关于200.2.2.4ARP请求作出应答。

 

查看R2R3fa0/1接口的MAC信息以验证以上的结论:

wKiom1YyF-KATtgUAAEtyitugrg487.jpg


wKioL1YyGBjCR7dVAAEqTeFV7LE679.jpg

从接口的基本信息中发现R2R3fa0/1接口的MAC地址分别对应其ARP reply中所使用的MAC地址。

 

在跨网段的通信的环境中,当一台PC收到一条ARP应答,PC将无条件地接受此ARP应答且加入ARP缓存列表中,然后PC就利用ARP表项发送数据包给其他节点。

根据R1debug信息,R1确实有收到ARP应答静态路由中的递归路由原理与冗余备份链路的实现_第6张图片

但是R1收到的ARP应答却被过滤,根据其debug输出结果原因为wrong cable,其实际原因是对于PC终端,如果收到了路由器传递的Proxy-ARP Reply,则该PC会无条件信任这个Reply,并且将其加入ARP表中。

而对于路由器,如果该设备收到了Proxy-ARP Reply, 则该路由器会优先判断该Reply中应答者IP地址所在的网段是否可达,如果是则接收,如果不是则直接丢弃。

虽然该ARP是由R2R3代替R4应答R1,但应答者的源地址是200.2.2.4。由于R1没有去往200.2.2.0/24网段的路由条目,所以R1直接把收到的所有ARP应答丢弃。

假设R1能够接收由R2R3发来的ARP Reply报文并加入其ARP表中,那么R1将可以ping10.1.1.1

换言之,R1如果要能够使用ip route 10.1.1.0 255.255.255.0 fa0/1 200.2.2.4这条静态路由条目,那么首先要保证R1能够信任由R2R3发送的ARP Reply并且加入ARP表。因为当R1发包给目的网段时,数据包将先发给R2或者R3,而R2R3拥有去往下一跳地址所在网段的路由条目,可以帮助R1把报文转发至R4

要让R1可以信任由R2R3发来的ARP Reply,只有在R1上手工添加一条去往200.2.2.0/24网段的静态路由。

R1上配置

ip route 200.2.2.0255.255.255.0 fa0/1 100.1.1.2

 

加了这条去往200.2.2.0/24网段的静态路由以后,R1就可以信任并接收R2R3发来的ARP应答且加表。


验证:

R1ping 10.1.1.1

静态路由中的递归路由原理与冗余备份链路的实现_第7张图片

由于R1要发包给目的网段10.1.1.1之前需要先把数据包发送给下一跳地址200.2.2.4,但是R1没有200.2.2.4ARP信息,所以R1先要发送ARP请求以获悉200.2.2.4MAC地址,因此R1收到两条ARP应答,一条来自于R2,另外一条来自于R3R1会把最后收到的ARP条目将加入缓存表,所以R1将会把下一跳地址200.2.2.4所对应的R2fa0/1接口的MAC地址或者R3fa0/1接口的MAC地址加入ARP表,查看R1ARP缓存:

wKiom1YyF-LRvn0AAAFFCORjAP8771.jpg

R1ARP缓存表中得知,R1收到的最后一个ARP应答包来自R2 (因为200.2.2.4所对应的MAC地址属于R2fa0/1接口),R1再次使用静态路由ip route 10.1.1.0 255.255.255.0 fa0/1 200.2.2.4发包时,交换机将一直把从R1fa0/1接口发出的报文转发给R2,再由R2转发给R4


查看R1的路由表:

静态路由中的递归路由原理与冗余备份链路的实现_第8张图片

静态路由200.2.2.0/24 [1/0] via 100.1.1.2 FastEthernet0/1是告知路由器怎样发包给静态路由10.1.1.0所关联的下一跳地址,如果去往10.1.1.0网段的静态路由 (10.1.1.0 [1/0] via 200.2.2.4, FastEthernet0/1)称为主路由,则静态路由200.2.2.0/24 [1/0] via 100.1.1.2FastEthernet0/1就是为了解析主路由的递归路由

递归路由的主要作用就是为了让R1收到关于去往目的网络的下一跳地址的ARP应答时认为该ARP应答是可信任的。但是递归路由中所关联的下一跳地址并不影响R1发送报文给10.1.1.0/24目的网络的路径选择。正真影响R1去往R410.1.1.0/24网段的路径选择的是ARP表中所解析到的关于主路由中下一跳地址200.2.2.4所对应的ARP表项。换言之,如果收到的ARP Reply是对应R2fa0/1接口的MAC地址,则数据包将往R2转发。如果收到的ARP Reply是对应R3fa0/1接口的MAC地址,则数据包将往R3进行转发。当R1发送ARP请求时,R2R3都会进行应答,R1将会把最后收到的那条ARP Reply条目加入ARP缓存表中。

结论:R1发包给主路由的下一跳地址是基于ARP表项而非递归路由中的下一跳。ARP条目存活时间为4小时。


验证:R1主路由10.1.1.0 [1/0] via 200.2.2.4 FastEhternet0/1的路径选择是基于ARP表项而非递归路由的下一跳地址。

关闭R2fa0/0fa0/1接口:

int fa0/0

shutdown

int fa0/1

shutdown

此时在R1ping 10.1.1.1是无法ping通的,原因是R1去往10.1.1.0/24网段的路由走的是R2这条路径,查看R1ARP表项:

wKioL1YyGBmDz4WoAAE8E0r2ttk694.jpg之前从R2接收到的对应200.2.2.4的ARP条目依然存在。

现在先在R1上删除静态路由ip route 200.2.2.0 255.255.255.0 fa0/1 100.1.1.2,然后再添加一条以100.1.1.3为下一跳的去往200.2.2.0/24网段的静态路由,以验证R1发往R4直连的10.1.1.0/24网段的路径选择是否与递归路由中下一跳有关。

R1配置

ip route 200.2.2.0 255.255.255.0 fa0/1 100.1.1.3

然后再次在R1ping 10.1.1.1

静态路由中的递归路由原理与冗余备份链路的实现_第9张图片

结果是R1并没有将去往10.1.1.0/24网段的数据包转发给R3ping失败。

疑问:是否是因为R4没有在去往100.1.1.0/24网段的静态路由中关联下一跳地址200.2.2.3,造成R4无法回包给R3

为了公平起见,在R4上新增一条去往100.1.1.0/24的静态路由,并关联200.2.2.3位下一跳地址:

ip route100.1.1.0 255.255.255.0 fa0/0 200.2.2.3


R4上开启debug ip packet detaildebug ip icmp, 并且再次ping 10.1.1.1

如果在R4上没有弹出任何debug报文信息,则上述结论是正确的:

静态路由中的递归路由原理与冗余备份链路的实现_第10张图片

R4没有收到任何报文,则说明即使R1上的递归路由下一跳指向R3fa0/1IP地址,但由于ARP表项中下一跳地址200.2.2.4仍然对应R2ARP Reply条目(即R2fa0/1接口的MAC地址),所以R1仍然会选择通过R2转发报文至目的网段。因此静态路由中的递归路由的下一跳地址不会影响主路由的路径选择。



静态路由的链路冗余实例:以图1-4为网络环境,利用递归路由做R1去往10.1.1.0/24网段的冗余备份链路,当R2的链路为down,自动切换至R3。反之亦然。

分析

ARP请求的发送原理:一个路由器中如果已经拥有目标IP地址所对应的ARP表项,除非该表项消失,否则该路由器将不会再为该目标IP地址做ARP请求。

如果R1去往10.1.1.0/24网段所关联的下一跳IPR2f0/1接口的IP地址,即使R2的接口down了,也不会影响R1任何路由信息的改变。只要静态路由所在的R1路由器的出站接口fa0/1为up,该路由条目就会依然存在。即R1的主路由,递归路由和ARP表项都不会发生变化,R1会根据原始的ARP表项发包,将数据包发给R2

即使之前将去往目的网段10.1.1.0/24的下一跳地址改为R3fa0/1IP地址100.1.1.3R1仍然不会把数据包转发给R3

只有当ARP条目失效(4小时以后),R1删除之前接收到的从R2发来的关于去往10.1.1.0/24网段的下一跳地址200.2.2.4对应的ARP表项。R1才会再次针对主路由重新开始发送ARP请求,由于R2已经down,所有只有R3回复ARP请求,R1R3所发送过来的ARP Reply加入ARP表,此时才会将去往目的网络10.1.1.0/24转发给R3R1ARP表项中200.2.2.4所映射的MAC地址将会是R3fa0/1接口的MAC地址。

要等待长达4小时才能实现路径切换,在现实应用环境中是无法接受的。

由于递归路由中的下一跳地址不影响主路由的选路,而影响选路的仅仅是ARP表项(使用最后接收到的ARP应答条目,若最后收到的是R2ARP Reply,则往R2转发数据包。如果最后收到的是R3ARP Reply,则往R3转发数据包)。为了加快冗余备份链路的切换,可以通过缩短ARP的失效时间来实现,在R1上配置如下:

(为了提高论证的准确性,最好将R1的递归路由下一跳仍然改为100.1.1.2
ip route 200.2.2.0 255.255.255.0 fa0/1 100.1.1.2

int fa0/1

arp timeout 10       /设置ARP条目在ARP表中失效时间为10


10秒以后查看R1arp

wKiom1YyF-TQ2ZQ3AADwggIjK0I366.jpg

此时200.2.2.4所对应的arp表项已经消失。


R1上打开debug arp,并且ping 10.1.1.1,将会再次触发R1发送关于200.2.2.4ARP请求。由于此时R2已经down,所以R1只会收到R3发来的ARP Reply

静态路由中的递归路由原理与冗余备份链路的实现_第11张图片

注:在边缘路由器R4上把ARP失效时间也改为较小的值,因为R4也需要依赖ARP缓存表回复R1ping包。

 

查看R1ARP表:

wKiom1YyF-TCEKQlAAFBQqVHUHI025.jpg

此时R1ARP表中,200.2.2.4所对应的MAC地址为R3fa0/1接口的MAC地址,且R1能够ping10.1.1.1


注:由于在GNS3的模拟环境中偶尔会出现BUG,导致路由器的ARP缓存表无法正常更新。此时,只需将所有的路由器配置进行保存(在特权模式下使用wr命令),然后在GNS3中重启所有的设备,再进行ping测试并观察ARP表项的变化。


总结:

要提高静态路由的冗余性和灵活性,在递归路由中不需要关联任何的下一跳地址。例如R1的主路由是ip route 10.1.1.0 255.255.255.0 fa0/1 200.2.2.4, 为了解析200.2.2.4, R1的递归路由只需写成ip route 200.2.2.0 255.255.255.0 fa0/1即可。

只要将路由器的ARP失效时间改为较小值,不管之前主路由使用是哪一条路径发包,只要该发包路径down了之后,备用路径将根据之前设定的ARP失效时间切换过去,这就实现了高效的静态路由倒换。