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