什么是路由环路?
路由环路是指数据包在一系列路由器之间不断传输却始终无法到达其预期目的网络的一种现象。当两台或多台路由器的路由信息中存在错误地指向不可达目的网络的有效路径时,就可能发生路由环路。
造成环路的可能原因有:
1 .静态路由配置错误
2 .路由重分布配置错误
3 .发生了改变的网络中收敛速度缓慢,不一致的路由表未能得到更新
4 .错误配置或添加了丢弃的路由
距离矢量路由协议的工作方式比较简单。其简单性导致它容易存在诸如路由环路之类的缺陷。在链路状态路由协议中,路由环路较为少见,但在某些情况下也会发生。
注:IP 协议自身包含防止数据包在网络中无休止传输的机制。IP 设置了生存时间 (TTL) 字段,每经过一台路由器,该值都会减 1。如果 TTL 变为零,则路由器将丢弃该数据包。
路由环路会造成什么影响?
路由环路会对网络造成严重影响,导致网络性能降低,甚至使网络瘫痪。 路由环路可能造成以下后果:
1.环路内的路由器占用链路带宽来反复收发流量。
2 .路由器的 CPU 因不断循环数据包而不堪重负。
3 .路由器的 CPU 承担了无用的数据包转发工作,从而影响到网络收敛。
4 .路由更新可能会丢失或无法得到及时处理。这些状况可能会导致更多的路由环路,使情况进一步恶化。
5 .数据包可能丢失在“黑洞”中。
路由环路一般是由距离矢量路由协议引发的,目前有多种机制可以消除路由环路。
这些机制包括:
1 .定义最大度量以防止计数至无穷大
2 .抑制计时器
3 .水平分割
4 .路由毒化或毒性反转
5 .触发更新
问题:计数值无穷大
当不正确的路由更新无休止地增加不再可达的网络的度量值时,就会出现"计数至无穷大"
下面我们来分析下三台路由器不定时地发送更新时,路由表会出现的情况:
1.当10.4.0.0断开的时候,r3中的有关于10.0.0.0的网络是不可达的
在r3未发送更新之前,r2向r3发送更新 ,此时r3中有关于10.4网络的跳数变为了2,
随后,r3向r2发送更新路由表中10.4网络的跳数为3,
接着r2会向r1发送更新,r1中有关于10.4.0.0的条目的跳数为4
第二轮更新为:
r2向r3发送更新 ,此时r3中有关于10.4网络的跳数变为了4,
随后,r3向r2发送更新 路由表中10.4网络的跳数为5,
接着r2会向r1发送更新,r1中有关于10.4.0.0的条目的跳数为6
就这样不停地更新下去,从而无休止的更新这个不可达目的地的网络路由
一、定义最大度量以防止计数至无穷大:
为了防止度量无限增大,可以通过设置最大度量值来界定“无穷大”。例如,RIP 将无穷大定义为 16 跳,大于等于此值的路由即为“不可达”。一旦路由器计数达到该“无穷大”值,该路由就会被标记为不可达。
二、使用抑制计时器防止路由环路:
抑制计时器可用来防止定期更新消息错误地恢复某条可能已经发生故障的路由。抑制计时器指示路由器将那些可能会影响路由的更改保持一段特定的时间。如果确定某条路由为 down(不可用)或 possibly down(可能不可用),则在规定的时间段内,任何包含相同状态或更差状态的有关该路由的信息都将被忽略。这表示路由器将在一段足够长的时间内将路由标记为 unreachable(不可达),以便路由更新能够传递带有最新信息的路由表。
抑制计时器通过以下方式工作:
1. 路由器从邻居处接收到更新,该更新表明以前可以访问的网络现在已不可访问。
2. 路由器将该网络标记为 possibly down 并启动抑制计时器。
3. 如果在抑制期间从任何相邻路由器接收到含有更小度量的有关该网络的更新,则恢复该网络并删除抑制计时器。
4. 如果在抑制期间从相邻路由器收到的更新包含的度量与之前相同或更大,则该更新将被忽略。如此一来,更改信息便可以继续在网络中传播一段时间。
5. 路由器仍然会转发目的网络被标记为 possibly down 的数据包。通过这种方式,路由器便能克服连接断续所带来的问题。
如果目的网络确实不可达,但路由器又转发了数据包,黑洞路由就会建立起来并持续到抑制计时器超时。
三、水平分割:
防止由于距离矢量路由协议收敛缓慢而导致路由环路的另一种方法是水平分割。
水平分割规则规定,路由器不能使用接收更新的同一接口来通告同一网络。
对前面的示例路由 10.4.0.0 应用水平分割后,将引发下面的一系列活动:
1 .r3 将 10.4.0.0 网络通告给 r2。
2 .r2 接收该信息并更新其路由表。
3 .r2 随后通过 S0/0/0 将 10.4.0.0 网络通告给 r1。
r2 不会通过 S0/0/1 将 10.4.0.0 通告给 r3,因为该路由正是从该接口获得。
4 .r1 接收该信息并更新其路由表。
因为使用了水平分割,所以 r1 也不会将关于网络 10.4.0.0 的信息通告给 r2。
通过上述活动,路由器相互交换了完整的路由更新(违反水平分割规则的路由除外)。
结果如下:
1 .r2 将网络 10.3.0.0 和 10.4.0.0 通告给 r1。
2 .r2 将网络 10.1.0.0 和 10.2.0.0 通告给 r3。
3 .r1 将网络 10.1.0.0 通告给 r2。
4 .r3 将网络 10.4.0.0 通告给 r2。
请注意,r2 发送到 r1 和 r3 的路由更新是不同的。
注:管理员可以禁用水平分割。在特定情况下,为获得正确的路由必须禁用水平分割。
四、路由毒化
路由毒化是距离矢量路由协议用来防止路由环路的一种方法。路由毒化用于在发往其它路由器的路由更新中将路由标记为不可达。标记“不可达”的方法是将度量设置为最大值。对于 RIP,毒化路由的度量为 16。
拓扑依然是上面的,让我们看看路由毒化如何发挥作用。
网络 10.4.0.0 由于链路故障而变得不可用。
1 . r3 通过将度量值设置为 16 使该路由毒化,然后发送触发更新指明 10.4.0.0 不可达。
2 . r2 处理该更新。由于度量为 16,所以 r2 在其路由表中将该路由条目标记为无效。
3 . r2 随后将毒性更新发送给 r1,更新中的度量值被再次设置为 16,以此表明该路由不可用。
4 . r1 处理该更新并将其路由表中的 10.4.0.0 条目标记为无效。
通过这种方法,在网络上传播有关 10.4.0.0 的信息比等待跳数达到“无穷大”更加迅速,因此路由毒化可加速收敛过程。
五、带毒性反转的水平分割
毒性反转可以与水平分割技术结合使用。这种方法称为带毒性反转的水平分割。“带毒性反转的水平分割”规则规定,从特定接口向外发送更新时,将通过该接口获知的所有网络标示为不可达。 带毒性反转的水平分割技术基于以下理念:相比将路由器蒙在鼓里而言,在第一时间明确告诉该路由器需要忽略的路由效果更佳。
我们来看下带毒性反转的水平分割是如何发挥作用的。
网络 10.4.0.0 由于链路故障而变得不可用。
1 . r3 通过将度量值设置为 16 使该路由毒化,然后发送触发更新指明 10.4.0.0 不可达。
2 . r2 处理该更新,在其路由表中将该路由条目标记为无效,然后立即向 r3 发送毒性反转。
毒性反转非常特殊,它会使路由器忽略水平分割规则的要求。它的作用在于确保 r3 不会轻易受到有关网络 10.4.0.0 的错误更新的影响。
注:水平分割功能是默认启用的功能。然而,并非所有 IOS 实现都默认启用了带毒性反转的水平分割。
六、触发更新:
正常情况下,路由器会定期将路由表发送给邻居路由器。而触发更新就是立刻发送路由更新信息,以响应某些变化。检测到网络故障的路由器会立即发送一个更新信息给邻居路由器,并依次产生触发更新通知它们的邻居路由器,使整个网络上的路由器在最短的时间内收到更新信息,从而快速了解整个网络的变化。但这样也是有问题存在,有可能包含更新信息的数据包被某些网络中的链路丢失或损坏,其
它路由器没能及时收到触发更新,因此就产生了结合抑制的触发更新,抑制规则要求一旦路由无效,在抑制时间内,到达同一目的地有同样或更差度量值的路由将会被忽略,这样触发更新将有时间传遍整个网络,从而避免了已经损坏的路由重新插入到已经收到触发更新的邻居中,也就解决了路由环路的问题。