区域间路由防环机制
产生环路
我们可以看到这个路由的计算过程因为是一个简单的带宽叠加,很有可能会产生环路。就类似于我们的RIP,RIP是一个简单的跳数叠加。
OSPF是怎么去解决域间路由环路呢?首先我们来看,一个域间路由环路形成的场景:
这里RTD连接着一条路由是192.168.1.0,然后我们来看一下它的区域划分:
- RTD和RTE有区域3的邻居关系。
- RTD和RTB有区域1的邻居关系。
- RTB、RTA和RTC之间是区域0的邻居关系。
- RTC和RTE是区域2的邻居关系。
这里我们思考一下一共有几个ABR?
有人可能会说有4个ABR,其实是不正确的。
我们之前已经反复讲过了,ABR是在非骨干区域内有full的邻居关系,在骨干区域内也有full的邻居关系。
因此只有B和C符合这个要求,对于RTE来说,虽然接口处于不同的区域,但是并没有在区域0的邻居关系,因此D和E都不是一个DR。
并且我们可以看到这个拓扑的连接也是有问题的。
我们在这里假设,这里所有的路由器都能够去生成3类LSA,我们来看一下会有什么样的情况去出现?
- RTD这个时候去连接了192.168.1.0,生成了一条3类LSA发送给RTB。
- RTB收到了这条3类LSA之后,一样的作为ABR发送一条3类LSA给RTC。
- RTC收到之后,一样会重新生成一条3类LSA,发送给RTE。
- RTE此时又再次重新生成了一条3类LSA发送给RTD。
那么这条3类LSA是由RTE生成的,当RTD生成之后会认为这是一条新的3类LSA,和我之前发布的3类LSA是两个不同的LSA。
因为我的生成这个三类LSA的路由器是不一样的,并且Metric值也是不一样的,这个时候就会产生一个域间的路由环路。
因此这个时候我们就要去避免路由环路的产生。
防环机制
- 骨干区域与非骨干区域
- 三类LSA传递规则
OSPF是怎么去避免域间路由环路的呢?
- 第一点,我的非骨干区域必须和骨干区域相连。
不论是物理相连还是逻辑相连,总之都必须去相连。
- 第二点,只有ABR才会去产生3类LSA。
上述例子,RTD和RTE并不是真正的ABR,并不会产生3类LSA,我们做一个补充。
- 第三点,就是关于3类LSA的传递规则。
对于3类LSA,假如我们把这两个非骨干区域连接在一起,我们画一个直观的图看一下。
此时一个路由器属于区域0,下面两个路由器是属于区域1和区域2的,然后我们将这两个ABR连接在了一起。
假如这个邻居关系是属于区域1的邻居关系,那么此时我可能会通过非骨干区域去传递一条3类LSA。那么路由器就会接收这个3类LSA,我会接收,但是并不会计算这个3类LSA。
这是3类LSA的传递规则。从非骨干区域收到的3类LSA,ABR只接收不计算。那么不计算当然也不会进行传递,这个就是3类LSA的传递规则。
注意:经过这三条规则就能保证我的域间环路是避免的。
思考
思考:只有一个区域时,区域号配置为非0会有什么问题?
如果我们能保证始终是一个区域的话是没有关系的。但是如果添加了其他区域,我们网络在扩展,我们要配置多区域的时候,配置为非0区域的时候就会有麻烦。
这里就涉及了网络规划不科学的问题,并且牵扯出了一个特殊的机制,即虚连接。