什么是路由环路?
路由环路是指数据包在一系列路由器之间不断传输却始终无法到达其预期目的网络的一种现象。当两台或多台路由器的路由信息中存在错误地指向不可达目的网络的有效路径时,就可能发生路由环路。
造成环路的可能原因有:
.静态路由配置错误
.路由重分布配置错误
.发生了改变的网络中收敛速度缓慢,不一致的路由表未能得到更新
.错误配置或添加了丢弃的路由
.静态路由配置错误
.路由重分布配置错误
.发生了改变的网络中收敛速度缓慢,不一致的路由表未能得到更新
.错误配置或添加了丢弃的路由
距离矢量路由协议的工作方式比较简单。其简单性导致它容易存在诸如路由环路之类的缺陷。在链路状态路由协议中,路由环路较为少见,但在某些情况下也会发生。
注:IP 协议自身包含防止数据包在网络中无休止传输的机制。IP 设置了生存时间 (TTL) 字段,每经过一台路由器,该值都会减 1。如果 TTL 变为零,则路由器将丢弃该数据包。
路由环路会造成什么影响?
路由环路会对网络造成严重影响,导致网络性能降低,甚至使网络瘫痪。
路由环路可能造成以下后果:
.环路内的路由器占用链路带宽来反复收发流量。
.路由器的 CPU 因不断循环数据包而不堪重负。
.路由器的 CPU 承担了无用的数据包转发工作,从而影响到网络收敛。
.路由更新可能会丢失或无法得到及时处理。这些状况可能会导致更多的路由环路,使情况进一步恶化。
.数据包可能丢失在“黑洞”中。
.环路内的路由器占用链路带宽来反复收发流量。
.路由器的 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(可能不可用),则在规定的时间段内,任何包含相同状态或更差状态的有关该路由的信息都将被忽略。这表示路由器将在一段足够长的时间内将路由标记 为 unreachable(不可达),以便路由更新能够传递带有最新信息的路由表。
抑制计时器通过以下方式工作:
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。
.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 将网络 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 由于链路故障而变得不可用。
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 不可达。
R2 处理该更新,在其路由表中将该路由条目标记为无效,然后立即向 R3 发送毒性反转。
毒性反转非常特殊,它会使路由器忽略水平分割规则的要求。它的作用在于确保 R3 不会轻易受到有关网络 10.4.0.0 的错误更新的影响。
注:水平分割功能是默认启用的功能。然而,并非所有 IOS 实现都默认启用了带毒性反转的水平分割。
IP和TTL
TTL(生存时间)是 IP 报头中的 8 位字段,它限制了数据包在被丢弃之前能够在网络中传输的跳数。设置 TTL 字段的目的是防止无法投递的数据包无休止地在网络中来回传输。数据包的源设备会对 8 位的 TTL 字段设置一个值。在到达目的地的过程中,每经过一台路由器,TTL 的值就会减 1。如果在到达目的地之前 TTL 字段的值减为零,则路由器将丢弃该数据包并向该 IP 数据包的源地址发送 Internet 控制消息协议 (ICMP) 错误消息。
从右侧的动画可以看出,即使在发生路由环路的情况下,数据包也不会在网络中无休止地传输。TTL 的值最终会减为 0,然后被路由器丢弃。
对于距离矢量路由协议,人们实际上只有两个选择:要么使用 RIP,要么使用 EIGRP。在实际环境中到底使用哪一种协议取决于多种因素,包括:
网络规模
路由器型号之间的兼容性
所需的管理知识
网络规模
路由器型号之间的兼容性
所需的管理知识
RIP
经过多年的发展,RIP 已经从有类路由协议 (RIPv1) 发展到无类路由协议 (RIPv2)。RIPv2 是一种标准化的路由协议,能够工作在多种路由器品牌共存的复杂环境中。不同公司生产的路由器可以通过 RIP 进行通信。它是可用于配置的最早期路由协议之一,非常适合小型网络。但是,RIPv2 仍有自身的局限性。RIPv1 和 RIPv2 在计算路由度量时都只考虑跳数,有效路由的跳数不能超过 15 跳。
RIP 的功能:
.支持用于防止路由环路的水平分割和带毒性反转的水平分割。
.能够在多达六条的等价路径上进行负载均衡。默认为四条等价路径。
.支持用于防止路由环路的水平分割和带毒性反转的水平分割。
.能够在多达六条的等价路径上进行负载均衡。默认为四条等价路径。
RIPv2 对 RIPv1 进行了如下改进:
.在路由更新中包含子网掩码,从而使协议变为无类路由协议。
.增加验证机制以确保路由表更新的安全性。
.支持可变长子网掩码 (VLSM)。
.使用组播地址代替广播地址。
.支持手动总结路由。
.增加验证机制以确保路由表更新的安全性。
.支持可变长子网掩码 (VLSM)。
.使用组播地址代替广播地址。
.支持手动总结路由。
EIGRP
EIGRP(增强型 IGRP)是在 IGRP 的基础上开发而来,是另一种距离矢量协议。EIGRP 具备某些链路状态路由协议功能,是一种无类距离矢量路由协议。与 RIP 或 OSPF 不同的是,EIGRP 是由 Cisco 开发的专有协议,仅在 Cisco 路由器上运行。
EIGRP 的功能包括:
.触发更新(EIGRP 没有定期更新)。
.使用拓扑表维护从邻居处收到的所有路由(不仅是最佳路径)。
.使用 EIGRP hello 协议与相邻路由器建立邻接关系。
.支持 VLSM 和手动路由总结。这些功能使得 EIGRP 有能力创建具有层次结构的大型网络。
.触发更新(EIGRP 没有定期更新)。
.使用拓扑表维护从邻居处收到的所有路由(不仅是最佳路径)。
.使用 EIGRP hello 协议与相邻路由器建立邻接关系。
.支持 VLSM 和手动路由总结。这些功能使得 EIGRP 有能力创建具有层次结构的大型网络。
EIGRP 的优点:
.尽管路由以距离矢量方式传播,但度量是根据最小带宽和路径的累积延迟进行计算,而不是根据跳数得出。
.采用扩散更新算法 (DUAL) 进行路由计算,收敛速度更快。DUAL 允许向 EIGRP 拓扑表插入备用路由,当主路由失败时备用路由便可派上用场。由于这一过程在本地实现,所以可以立即切换到备用路由,不需要其它路由器进行任何操作。
.使用限定更新,因此 EIGRP 使用的带宽更少,特别是在包含许多路由的大型网络中这一点更为明显。
.EIGRP 具有协议相关模块,可支持多种网络层协议,包括 IP、IPX 和 AppleTalk。
本文出自 “www.51cto.com” 博客,请务必保留此出处http://frecolwang.blog.51cto.com/330699/131291