网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路

  • A+
所属分类:安全闲碎


一、概述:


OSPF V2在发展的过程经过了很多次改进,其中比较重要的两个标准是RFC1583和RFC2328。这两个标准在计算路由的时候使用的计算方法不一样。华为的VRP 默认是开启了兼容RFC1583的功能,即默认采用最小COST 来选路,如果部分路由器关闭了RFC1583兼容能力,OSPF 在选路的时候还会参考区域类型等因素(如它会优先经过普通区域而不是骨干区域)可能会导致网络产生环路。

本实验就主要用来理解“取消兼容RFC1583引发环路”这个知识点。


二、实验拓扑:

网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路

三、基础配置:

R1的配置

<Huawei>sys[Huawei]sysname R1[R1]router id 1.1.1.1[R1]interface GigabitEthernet0/0/0[R1-GigabitEthernet0/0/0]ip address 12.1.1.1 255.255.255.0[R1-GigabitEthernet0/0/0]interface LoopBack100[R1-LoopBack100]ip address 100.100.100.100 255.255.255.255[R1-LoopBack100]quit[R1]ospf 1[R1-ospf-1]import-route direct type 1[R1-ospf-1]area 0.0.0.0[R1-ospf-1-area-0.0.0.0]network 12.1.1.1 0.0.0.0

R2的配置

<Huawei>sys[R2]router id 2.2.2.2[R2]interface GigabitEthernet0/0/0[R2-GigabitEthernet0/0/0]ip address 12.1.1.2 255.255.255.0[R2-GigabitEthernet0/0/0]interface GigabitEthernet0/0/1[R2-GigabitEthernet0/0/1]ip address 23.1.1.1 255.255.255.0[R2-GigabitEthernet0/0/1]ip address 23.1.1.1 255.255.255.0[R2-GigabitEthernet0/0/1]quit[R2]ospf 1[R2-ospf-1]area 0.0.0.0[R2-ospf-1-area-0.0.0.0]network 12.1.1.2 0.0.0.0[R2-ospf-1-area-0.0.0.0]area 0.0.0.1[R2-ospf-1-area-0.0.0.1]network 23.1.1.1 0.0.0.0

R3的配置

<Huawei>sys[Huawei]sysname R3[R3]router id 3.3.3.3[R3]interface GigabitEthernet0/0/0[R3-GigabitEthernet0/0/0]ip address 23.1.1.2 255.255.255.0[R3-GigabitEthernet0/0/0]interface GigabitEthernet0/0/1[R3-GigabitEthernet0/0/1]ip address 34.1.1.1 255.255.255.0[R3-GigabitEthernet0/0/1]quit[R3]ospf 1[R3-ospf-1]area 0.0.0.1[R3-ospf-1-area-0.0.0.1]network 23.1.1.2 0.0.0.0[R3-ospf-1-area-0.0.0.1]network 34.1.1.1 0.0.0.0

R4的配置

<Huawei>sys[Huawei]sysname R4[R4]router id 4.4.4.4[R4]interface GigabitEthernet0/0/0[R4-GigabitEthernet0/0/0]ip address 34.1.1.2 255.255.255.0[R4-GigabitEthernet0/0/0]interface LoopBack100[R4-LoopBack100]ip address 100.100.100.100 255.255.255.255[R4-LoopBack100]quit[R4]ospf 1[R4-ospf-1]import-route direct type 1[R4-ospf-1]area 0.0.0.1[R4-ospf-1-area-0.0.0.1]network 34.1.1.2 0.0.0.0


四、环路观察:

1、修改配置生成环路

配置思路如下图黄底字所示R2上取消RFC1583兼容,R3上修改接口修改g0/0/1接口COST。

网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路

[R2]ospf[R2-ospf-1]undo rfc1583 compatible[R3]inter g0/0/1[R3-GigabitEthernet0/0/1]ospf cost 10

2、观察环路的现象

在R2或R3上tracert 100.100.100.100,发现数据包在R2和R3之间打环

网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路


五、环路生成原因分析:

先来观察下路由的变化,取消引发环路的配置

[R2-ospf-1]rfc1583 compatible[R2-ospf-1]dis this

网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路

[R3-GigabitEthernet0/0/1]undo ospf cost

即默认配置时,R2和R3针对100.100.100.100的路由分别如下:

网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路

网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路


可见,R2去100.100.100.100的下一跳是R1,R3的下一跳是R4.路由背道而驰,南辕北辙是不会环路的。

现在我们重配置下R3接口开销,再看下路由表

[R3]inter g0/0/1[R3-GigabitEthernet0/0/1]ospf cost 10

网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路

网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路

这时发现R3的路由转向了(原因是通过R4去目的地的COST 变大了,总和为11),指向了R2(COST 是3),R2不变继续指向R1.此时两个路由器的路由是同向的,也不会环路。

最后取消上R2的RFC1583兼容,让R2以RFC2328来选路,再查看下路由表

[R2]ospf[R2-ospf-1]undo rfc1583 compatible

网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路

网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路

可以发现,此次配置引发了R2路由表的变更。R2舍近求远放弃了通过R1去目的地的捷径(COST 为2),而选择和通过R3去往目的地(COST 为12).因为R3的路由表是以R2为下一跳的,此时两个路由器的路由表互指对方为下一跳,悲剧就发生了.

现在我们来反过来问一下:为何R2要舍近求远呢?

因为RFC2328在选路时,不是最优先考虑COST 的,是要考虑路由的类型及区域的类型的,比如它认为经过经过普通区域的路由好于经过骨干区域的路由。现在R2有两条路,一条经过普通区域1到100.100.100.100,COST 是12,另一条是经过骨干区域0去100.100.100.100,COST 是2.但是RFC2328就忽略COST 的大小选前者,如果开了RFC1583兼容,就会考虑COST 小的后者。(结尾有详细参考参考说明)

六、环路规避:

这个环路因不同路由器配置了不同的OSPF 选路标准造成,规避方法是要保证所有路由器的标准一样,要关RFC1583兼容就全关,要开就全开。华为默认是所有路由器都开了1583兼容的。

七、扩展学习(RFC1583 RFC2328选路细节):

通过同一个OSPF 进程内的LSA 计算的相同路由条目:

  • Intra-area 的路由优于Inter-area 的

  • Inter-area 的路由优于external-area 的

  • 对于external-area 路由,类型1方式记录路由开销的优于类型2的

  • 对于external-area 路由,且开销类型相同

(1)同为外部类型2,重分布时携带M 小的最优
(2)-------------------------------------------------------------------
        定义两种开销值:
        x=内部设备到forwarding-address 的开销;FA 为0时,X 为到ASBR 的开销
        y=外部路由重分发进来时LSA 携带的开销值
        -------------------------------------------------------------------

        此时需要分选择标准:

            * RFC1583标准:

             A:TYPE-1路由比对:

                取X+Y 值最小路由

             B:TYPE-2路由比对:

                取X 值最小路由

             之后就没有成型的规范了。基本实现应该是负载

            * RFC2328标准:

             直接比对X 路由类型

            (1).非backbone area 的intra-area 路由最优先

            (2).intra-area backbone 路由与inter-area 路由优先级相同

                如果无法比对出结果,则等同RFC1583继续比对

                如果多条都是最小开销,选择学习到的这些LSA 的区域里,选择最大area-ID 里面的LSA 使用之后没有任何成型规范。所以,如果ID(associated area-ID)相同,基本实现应该是负载。

PS:目前思科的算法,依然是使用RFC1583;其进程命令compatible rfc1583,也只是在对OSPF 汇总的Metric 取值上做标准调整;应该是多RFC 标准混用。华为,Juniper 设备也算法调整命令,而且作用在于修改此处算法标准。

  • 如果多external-area LSA 参数相同(same destination,cost and non-zero forwarding-address)

此时分情况讨论:

A:同类外部LSA(都是同普通区域同类外部或都是同NSSA 区域同类外部)(参考RFC1583-12.4.5或RFC2328-12.4.4.1)
当ASBR 之间相互可达。RID 最大的ASBR 重分发路由优,其他ASBR 都将自己的外部LSA 置为超时失效状态,从LSDB 清除掉。
如失去比自己RID 大的ASBR 的联系,则重新产生外部LSA
另一种情况,NSSA T7-LSA 生成T5-LSA.如果多设备都是NSSAABR,且NSSA 区域内相互可达。则只有RID 最高的NSSA ABR 会执行T7-2-T5

        B:不同类外部LSA

        此时也要分选择标准:

        * RFC3101标准:

            1. 有P-bit 功能的TYPE-7 LSA

            2. type-5 LSA

            3. RID 最高的LSA

        * RFC1587标准:

            1. type 5 LSA

            2. 有P-bit 功能的type 7 LSA

            3. 其他的type-7 LSA

   PS:目前,不同厂商使用标准都不一样,思科设备在IOS 15.1(2)S 前使用的是RFC1587标准,之后默认使用RFC3101标准。OSPF 进程配置环境下,通过compatible rfc1587命令可修改。

        

网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路

网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路

网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路

本文始发于微信公众号(释然IT杂谈):网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: