ARIP协议路由环路产生原因及如何解决?


Q接下来将讲解什么是路由环路,什么情况产生路由环路,以及RIP协议中对环路的解决方案。

一、路由环路

在维护路由表信息的时候,如果在拓扑发生改变后,网络收敛缓慢产生了不协调或者矛盾的路由选择条目,就会发生路由环路的问题,这种条件下,路由器对无法到达的网络路由不予理睬,导致用户的数据包不停在网络上循环发送,最终造成网络资源的严重浪费。


二、路由环路产生场景

A路由器一侧的X网络发生故障,则A路由器收到故障信息,并把X网络设置为不可达,等待更新周期来通知相邻的B路由器。但是,如果相邻的B路由器的更新周期先来了,则A路由器讲从B路由器那学习了到达X网络的路由,就是错误路由,因为此时的X网络已经损坏,而A路由器却在自己的路由表内增加了一条经过B路由器到达X网络的路由。然后A路由器还会继续把该错误路由通告给B路由器,B路由器更新路由表,认为到达X网络须经过A路由,然后继续通知相邻的路由器,至此路由环路形成,A路由器认为到达X络经过B路由器,而B则认为到达X网络进过A路由器。


三、 RIP协议中对路由环路解决方案

1. 最大跳数当一个路由条目作为副本发送出去的时候就会自加1跳,那么最大加到16跳,到16跳就已经被视为最大条数不可达了。


2. 水平分割:其规则就是不向原始路由更新来的方向再次发送路由更新信息(个人理解为单向更新,单向反馈)。比如有三台路由器ABCBC学习到访问网络10.4.0.0路径后,不再向C声明自己可以通过C访问10.4.0.0网络的路径信息,AB学习到访问10.4.0.0网络路径信息后,也不再向B声明,而一旦网络 10.4.0.0发生故障无法访问,C会向AB发送该网络不可达到的路由更新信息,但不会再学习AB发送的能够到达10.4.0.0错误信息


3. 路由中毒(也称为路由毒化):定义最大值在一定程度上解决了路由环路问题,但并不彻底,可以看到,在达到最大值之前,路由环路还是存在的。为此,路由中毒就可以彻底解决这个问题。其原理是这样的:假设有三台路由器ABC,当网络10.4.0.0出现故障无法访问的时候,路由器C便向邻居路由发送相关路由更新信息,并将其度量值标为无穷大,告诉它们网络10.4.0.0不可到达,路由器B收到毒化消息后将该链路路由表项标记为无穷大,表示该路径已经失效,并向邻居A路由器通告,依次毒化各个路由器,告诉邻居10.4.0.0这个网络已经失效,不再接收更新信息,从而避免了路由环路。


4. 毒性逆转(也成反向中毒):结合上面的例子,当路由器B看到到达网络10.4.0.0度量值为无穷大的时候,就发送一个叫做毒化逆转的更新信息给C路由器,说明10.4.0.0这个网络不可达到,这是超越水平分割的一个特列,这样保证所有的路由器都接受到了毒化的路由信息。


5. 控制更新时间当路由表中的某个条目所指网络消失时,路由器并不会立刻的删除该条目并学习新条目,而是严格按照我们前面所介绍的计时器时间现将条目设置为无效接着是挂起,在240秒时才删除该条目,这么做其实是为了尽可能的给予一个时间等待发生改变的网络恢复。比如收到从邻居发送来的更新信息,包含一个比原来路径具有更好度量值的路由,就标记为可以访问,并取消抑制计时器。


6. 触发更新:因网络拓扑发生变化导致路由表发生改变时,路由器立刻产生更新通告直连邻居,不在需要等待30秒的更新周期,这样做是为了尽可能的将网络拓扑的改变通告给其他人。


参考文章:

1. 路由环路,百度百科.

2. RIP环路问题总结, 51cto.