OSPF V2在发展的过程经过了很多次改进,其中比较重要的两个标准是RFC1583和RFC2328。这两个标准在计算路由的时候使用的计算方法不一样。华为的VRP 默认是开启了兼容RFC1583的功能,即默认采用最小COST 来选路,如果部分路由器关闭了RFC1583兼容能力,OSPF 在选路的时候还会参考区域类型等因素(如它会优先经过普通区域而不是骨干区域)可能会导致网络产生环路。
本实验就主要用来理解“取消兼容RFC1583引发环路”这个知识点。
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。
[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之间打环
先来观察下路由的变化,取消引发环路的配置
[R2-ospf-1]rfc1583 compatible
[R2-ospf-1]dis this
[R3-GigabitEthernet0/0/1]undo ospf cost
即默认配置时,R2和R3针对100.100.100.100的路由分别如下:
可见,R2去100.100.100.100的下一跳是R1,R3的下一跳是R4.路由背道而驰,南辕北辙是不会环路的。
现在我们重配置下R3接口开销,再看下路由表
[R3]inter g0/0/1
[R3-GigabitEthernet0/0/1]ospf cost 10
最后取消上R2的RFC1583兼容,让R2以RFC2328来选路,再查看下路由表
[R2]ospf
[R2-ospf-1]undo rfc1583 compatible
现在我们来反过来问一下:为何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兼容的。
通过同一个OSPF 进程内的LSA 计算的相同路由条目:
-
Intra-area 的路由优于Inter-area 的
-
Inter-area 的路由优于external-area 的
-
对于external-area 路由,类型1方式记录路由开销的优于类型2的
-
对于external-area 路由,且开销类型相同
此时需要分选择标准:
* 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)相同,基本实现应该是负载。
-
如果多external-area LSA 参数相同(same destination,cost and non-zero forwarding-address)
此时分情况讨论:
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命令可修改。
本文始发于微信公众号(释然IT杂谈):网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论