设为首页收藏本站language→→ 语言切换

鸿鹄论坛

 找回密码
 论坛注册

QQ登录

先注册再绑定QQ

查看: 2252|回复: 0
收起左侧

深入探讨OSPF环路问题(一)

[复制链接]
发表于 2023-5-22 10:20:17 | 显示全部楼层 |阅读模式
本帖最后由 泰克教育 于 2023-5-22 10:22 编辑


泰克李黄所写

OSPF是我们每一个网络工程师都非常熟悉的一个IGP协议,因为其自身的优点(配置简单,分层设计,网络类型丰富等)使得OSPF在现有的网络中部署的非常之多,各种讨论OSPF的文章及案例也层出不穷,所以我就在想,如果我要以OSPF为题写一篇技术型文章,到底写什么样的内容才会让你们有观看的欲望,绞尽脑汁最后把思路聚焦于环路的问题上。

我们都知道OSPF是基于SPF算法的动态路由协议,SPF算法有一个最大的优点是可以保证网络的绝对无环,但因为OSPF采用的是分区域设计,每一个区域都单独的维护各自的数据库,执行各自的SPF算法,所以SPF可以保证OSPF无环的前提条件是在同一个区域内,即在同一个区域内,OSPF构建的网络是一个绝对无环的网络。但OSPF区域间信息的传递是依靠3 类lsa,而3类lsa里面携带的其实就是路由,所以我们说OSPF在区域间是存在失量形为(直接传递路由的形为称为失量形为)的,因为失量形为的存在,也就导致了OSPF的环路问题。

接下来,我会带领大家进入OSPF环路的世界,也会让大家见识到当初设计OSPF协议的工程师是如何费尽心思的解决OSPF环路问题的。

环路场景

场景一:OSPF区域间环路

我们都知道,OSPF在设计区域结构的时候有两个非常重要的规则:

规则一、所有非骨干区域都必须与骨干区域相连

规则二、骨干区域不能被分割

因为有这两个规则的存在,说实话大大的限制了OSPF在部署时的灵活性,那协议开发者为什么要设计这两个规则出来呢? 如果没有这两个规则又会带来什么问题?带着这此问题,我们来看两个拓扑:


1.jpg





如图一所示(假定没有所有非骨干区域都必须与骨干区域相连这条规则):

1、R6上有一个loopback接口,地址为:6.6.6.6/32,宣告进了Area 4.
2、R6会产生关于6.6.6.6的1类lsa,类型为stub,并传递给R2。
3、因为R2位于区域边界,连接两个不同的区域,所以会把1类lsa中描述路由信息的stub转换为3类lsa,并在其它区域传递。
4、在图一中,R1;R3;R4也都位于区域边界,所以当R1收到这份3类lsa时,会传递给R3,R3此时又传递给R7,R7传递给R4,R4同理也会传递给R2。     
5、此时R2会认为去往6.6.6.6这个网段有两条路径可达,一条是直接走R6,另一条是走R4,如果R2选择了R4去往6.6.6.6,那就产生了R2-R4-R7-R3-R1-R2这个环路。

总结:因为有了以上环路的风险,所以开发者在设计OSPF时必须解决这个问题,也就有了规则一(所有非骨干区域都必须与骨干区域相连),那协议的设计者是如何保证规则一不被打破的呢?

要明白这个问题,首先需要明白一个非常重要的概念:ABR(区域边界路由器),需要满足以下三个条件才能成为一台真正意义上的ABR:

1、至少连接两个区域
2、连接的区域中有一个是区域零(骨干区域)
3、在区域零中至少有一个活跃的邻居

而定义ABR的作用就在于:只有ABR才能产生3类lsa,如图一所示,R3与R4都连接了两个区域,但他们却都不是ABR(不满足第2第3条),也就是说当R1这台ABR把描述6.6.6.6这条路由的3类LSA传递给R3时,因为R3不是ABR,所以不会把该条3类LSA传递给R7,R4在区域3中也就收不到这份3类lsa,同理R2也不会从区域2中收到关于6.6.6.6网段的3类LSA,也就防止了环路的产生。

接下来我们来研究一下第二个规则的必要性:

[color=rgba(0, 0, 0, 0.9)] 2.jpg

如图二所示:(假定骨干区域能被分割)

1、R2上有一个loopback接口,地址为2.2.2.2/32,宣告进了区域3。
2、R2作为区域2的ABR,所以会向区域2内产生关于2.2.2.2网段的3类LSA      3、R4从区域2中学习到此条3类LSA,因为R4也是一台ABR,所以R4也会向区域0中产生关于2.2.2.2网段的3类LSA。
4、R3从区域0中学习到此条3类LSA,因为R3也是一台ABR,所以R3也会向区域1中产生关于2.2.2.2网段的3类LSA。
5、R1从区域1中学习到此条3类LSA,因为R1也是一台ABR,所以R1也会向区域0中产生关于2.2.2.2网段的3类LSA。
6、此时R2学习到了两条关于2.2.2.2的路由,一条是自己产生的,另一条是R1发过来的,当R2自己产生的2.2.2.2不可达时,就会优选从R1过来的路由,所以就会导致R2访问2.2.2.2时出现R2-R1-R3-R4-R2这样一条环路。

总结:有了环路,一定要想办法规避,所以针对图二的环路问题,协议开发者制定了规则二(骨干区域不能被分割),为了保证规则二不会被打破,OSPF规定:从非骨干区域收到的3类LSA,ABR能接收但不会使用这条3类LSA(此条规定也可以称为OSPF的水平分割原则)。所以在上述的第三步中,R4作为一台ABR,从非骨干区域(Area 2)中收到一条3类LSA,R4是不会处理的(不会参与路由计算,不会泛洪),在上图中R4与R3都无法访问2.2.2.2网段,从而避免了环路。

微信图片_20230131142112.png

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-1-22 23:54 , Processed in 0.056477 second(s), 11 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表