开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。
OSPF把自治系统AS(Autonomous System)划分成逻辑意义上的一个或多个区域;
OSPF通过链路状态通告LSA(Link State Advertisement)的形式发布路由;
OSPF依靠在OSPF区域内各设备间交互OSPF报文来达到路由信息的统一;
OSPF报文封装在IP报文内,可以采用单播或组播的形式发送。
目前针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。如无特殊说明,本文中所指的OSPF均为OSPF Version 2。
在OSPF出现前,RIP是网络上使用最广泛的IGP协议。但随着网络的快速成长和扩展,RIP的某些限制可能会导致其在大型网络中不再适用,OSPF则能够解决RIP所面临的诸多问题。如表1所示。
此外,OSPF还有以下优点:
OSPF可以采用组播形式收发报文,这样可以减少对未运行OSPF的路由器的影响。
OSPF支持无类型域间选路(CIDR)。
OSPF支持对等价路由进行负载分担。
OSPF支持报文验证。
双向转发检测BFD(Bidirectional Forwarding Detection)是一种用于检测转发引擎之间通信故障的检测机制。
BFD对两个系统间的、同一路径上的同一种数据协议的连通性进行检测,这条路径可以是物理链路或逻辑链路,包括隧道。
OSPF与BFD联动就是将BFD和OSPF协议关联起来,将BFD对链路故障的快速感应通知OSPF协议,从而加快OSPF协议对于网络拓扑变化的响应。
网络上的链路故障或拓扑变化都会导致设备重新进行路由计算,所以缩短路由协议的收敛时间对于提高网络的性能是非常重要的。
由于链路故障是无法完全避免的,因此,加快故障感知速度并将故障快速通告给路由协议是一种可行的方案。BFD和OSPF相关联,一旦与邻居之间的链路出现故障,BFD的快速性能够加快OSPF的收敛速度。
OSPF与BFD联动的原理如图1所示。
SwitchA、SwitchB、SwitchC之间建立OSPF邻居关系。
邻居状态到达Full状态时通知BFD建立BFD会话。
SwitchA到SwitchB的路由出接口为GE0/0/2,当这两台设备间的链路出现故障后,BFD首先感知到并通知SwitchA。
SwitchA处理邻居Down事件,重新进行路由计算,新的路由出接口为GE0/0/1,经过SwitchC到达SwitchB。
当有新的设备加入到网络中,或者设备重启时,可能会出现在BGP收敛期间内网络流量丢失的现象。这是由于IGP收敛速度比BGP快而造成的。
通过使能OSPF与BGP联动特性可以解决这个问题。
在存在备份链路的情况下,BGP在链路回切时,由于路由收敛速度滞后于OSPF路由收敛速度,从而造成流量丢失。
如图2所示,四台设备SwitchA、SwitchB、SwitchC、SwitchD之间运行OSPF协议,并建立IBGP连接。SwitchC为SwitchB的备份设备。当网络环境稳定时,BGP与OSPF在设备上是完全收敛的。
正常情况下,从SwitchA到10.3.1.0/30的流量会途经SwitchB。当SwitchB发生故障后,流量切换到SwitchC。SwitchB故障恢复以后,流量回切到SwitchB,此时会有流量丢失。
这是因为,在流量回切到SwitchB的过程中,IGP收敛速度比BGP快,因此OSPF先收敛,BGP还没有完成收敛,导致SwitchB不知如何到达10.3.1.0/30。
这样,当从SwitchA去往10.3.1.0/30的流量被发送给SwitchB时,由于没有必要的路由选择信息,这些流量就会被丢弃。
使能了OSPF与BGP联动特性的设备会在设定的联动时间内保持为Stub路由器,也就是说,该设备发布的LSA中的链路度量值为最大值(65535),从而告知其它OSPF设备不要使用这个路由器来转发数据。
图2中,在RoutetB上使能BGP联动,这样,在BGP收敛完成前,SwitchA不把流量转发到SwitchB上,而是继续使用备份设备SwitchC转发流量,直到SwitchB上的BGP路由完成收敛。
在存在主备链路的网络中,当主链路故障恢复后,流量会从备份链路切换到主链路。
由于IGP的收敛在LDP会话建立之前完成,导致旧的LSP已经删除,新的LSP还没有建立,因此LSP流量中断。
如图3所示,PE1-P1-P2-P3-PE2为主链路,PE1-P1-P4-P3-PE2为备份链路。
主链路发生故障,流量从主链路切换到备份链路。主链路故障恢复,流量从备份链路回切到主链路,此时流量会有较长时间的中断。
通过在P1和P2上配置标签分发协议LDP(Label Distribution Protocol)和IGP同步功能,能够缩短流量从备份链路切换到主链路时的中断时间。
LDP和IGP同步的基本原理是:通过抑制IGP建立邻居关系来推迟路由的回切,直至LDP完成收敛。也就是在主链路的LSP建立之前,先保留备份链路,让流量继续从备份链路转发,直至主链路的LSP建立成功,再删除备份链路。
LDP和IGP同步包括三个定时器:
Hold-down
Hold-max-cost
Delay
当主链路故障恢复后,路由器进行以下操作:
启动Hold-down定时器,IGP接口先不建立IGP邻居,等待LDP会话的建立。
Hold-down定时器超时后,启动Hold-max-cost定时器。IGP在本地路由器的链路状态通告中,向主链路通告接口链路的最大metric值。
故障链路的LDP会话重新建立以后,启动Delay定时器等待LSP的建立。
Delay定时器超时以后,无论IGP的状态如何,LDP都通知IGP同步流程结束。
实验需求
如中所示,S1、S2和S3之间运行OSPF,S1和S2之间的交换机仅作透传功能(这里移除了该交换机,如要添加则需要关闭STP功能)。现在需要S和S2能快速感应它们之间的链路状态,当链路S1-S2发生故障时,业务能快速切换到备份链路S1-S3-S2上。
?
注:请确保该场景下互联接口的STP处于未使能状态。因为在使能STP的环形网络中,如果用交换机的VLANIF接口构建三层网络,会导致某个端口被阻塞,从而导致三层业务不能正常运行。?
采用如下思路配置OSPF与BFD联动:
在各交换机上配置OSPF基本功能,实现整个OSPF网络的互通。
在各交换机上配置OSPF与BFD联动功能,实现当SwitchA和SwitchB之间的链路出现故障时快速的切换到备份链路。
# 配置S1。S2和S3的配置与S1类似。
<Huawei>system-view
Enter system view, return user view with Ctrl+Z.
[Huawei]sysname S1
[S1]undo info-center enable
Info: Information center is disabled.
[S1]vlan batch 10 30
Info: This operation may take a few seconds. Please wait for a moment...done.
[S1]interface GigabitEthernet 0/0/1
[S1-GigabitEthernet0/0/1]port link-type trunk
[S1-GigabitEthernet0/0/1]port trunk allow-pass vlan 10
[S1-GigabitEthernet0/0/1]interface GigabitEthernet 0/0/2
[S1-GigabitEthernet0/0/2]port link-type trunk
[S1-GigabitEthernet0/0/2]port trunk allow-pass vlan 30
[S1-GigabitEthernet0/0/2]quit
? ? 2. 配置各VLANIF接口的IP地址
? ? ? ? # 配置S1。S2和S3的配置与S1类似。
[S1]interface Vlanif 10
[S1-Vlanif10]ip address 10.1.1.1 24
[S1-Vlanif10]interface Vlanif 30
[S1-Vlanif30]ip address 10.3.3.1 24
[S1-Vlanif30]quit
? ? 3. 配置OSPF基本功能
? ? ? ? ?# 配置S1。
[S1]ospf 1 router-id 10.10.10.1
[S1-ospf-1]area 0
[S1-ospf-1-area-0.0.0.0]network 10.1.1.0 0.0.0.255
[S1-ospf-1-area-0.0.0.0]network 10.3.3.0 0.0.0.255
[S1-ospf-1-area-0.0.0.0]quit
[S1-ospf-1]quit
? ? ? ? # 配置S2。
[S2]ospf 1 router-id 10.10.10.2
[S2-ospf-1]area 0
[S2-ospf-1-area-0.0.0.0]network 10.2.2.0 0.0.0.255
[S2-ospf-1-area-0.0.0.0]network 10.3.3.0 0.0.0.255
[S2-ospf-1-area-0.0.0.0]network 172.16.1.0 0.0.0.255
[S2-ospf-1-area-0.0.0.0]quit
[S2-ospf-1]quit
? ? ? ?# 配置S3。
[S3]ospf 1 router-id 10.10.10.3
[S3-ospf-1]area 0
[S3-ospf-1-area-0.0.0.0]network 10.1.1.0 0.0.0.255
[S3-ospf-1-area-0.0.0.0]network 10.2.2.0 0.0.0.255
[S3-ospf-1-area-0.0.0.0]quit
[S3-ospf-1]quit
? ? ???# 配置完成后,执行命令display ospf peer,可以看到S1,S2和S3之间互相建立了邻接关系。以S1的显示结果为例。
? ? ? # 查看S1的OSPF路由表的信息,可以看到去往S2和S3的路由表项。而去往目的网段172.16.1.0/24的路由下一跳地址为10.3.3.2,说明流量在链路S1→S2上传输。
? 4. 配置OSPF与BFD联动
? ? ?# 在S1上配置OSPF与BFD联动功能。
[S1]bfd
[S1-bfd]quit
[S1]ospf 1
[S1-ospf-1]bfd all-interfaces enable
[S1-ospf-1]quit
? ? #在S2上配置OSPF与BFD联动功能。
[S2]bfd
[S2-bfd]quit
[S2]ospf 1
[S2-ospf-1]bfd all-interfaces enable
[S2-ospf-1]quit
? ? # 在S3上配置OSPF与BFD联动功能。
[S3]bfd
[S3-bfd]quit
[S3]ospf 1
[S3-ospf-1]bfd all-interfaces enable
[S3-ospf-1]quit
? ? # 配置完成后,在S1或S2、S3上执行display ospf bfd session all命令,可以看到BFD会话的状态为Up。以S1的显示为例。
5. 检查配置结果
? ? # 对S2的GE0/0/1接口执行shutdown命令,模拟链路故障。
[S2]interface GigabitEthernet 0/0/1
[S2-GigabitEthernet0/0/1]shutdown
[S2-GigabitEthernet0/0/1]quit
? ?# 在S1上查看OSPF路由表。
? ? 可以看出在链路S1-S2出现故障后,备份链路S1-S3-S2开始生效,即去往目的网段172.16.1.0/24的路由下一跳地址变成了10.1.1.2。
S2 配置
<Huawei>system-view
Enter system view, return user view with Ctrl+Z.
[Huawei]sysname S2
[S2]undo info-center enable
Info: Information center is disabled.
[S2]vlan batch 20 30 40
Info: This operation may take a few seconds. Please wait for a moment...done.
[S2]interface GigabitEthernet 0/0/1
[S2-GigabitEthernet0/0/1]port link-type trunk
[S2-GigabitEthernet0/0/1]port trunk allow-pass vlan 30
[S2-GigabitEthernet0/0/1]interface GigabitEthernet 0/0/2r
[S2-GigabitEthernet0/0/2]port link-type trunk
[S2-GigabitEthernet0/0/2]port trunk allow-pass vlan 20
[S2-GigabitEthernet0/0/2]interface GigabitEthernet 0/0/3
[S2-GigabitEthernet0/0/3]port link-type trunk
[S2-GigabitEthernet0/0/3]port trunk allow-pass vlan 40
[S2-GigabitEthernet0/0/3]quit
[S2]interface Vlanif 20
[S2-Vlanif20]ip address 10.2.2.2 24
[S2-Vlanif20]interface Vlanif 30
[S2-Vlanif30]ip address 10.3.3.2 24
[S2-Vlanif30]interface Vlanif 40
[S2-Vlanif40]ip address 172.16.1.1 24
[S2-Vlanif40]quit
[S2]ospf 1 router-id 10.10.10.2
[S2-ospf-1]area 0
[S2-ospf-1-area-0.0.0.0]network 10.2.2.0 0.0.0.255
[S2-ospf-1-area-0.0.0.0]network 10.3.3.0 0.0.0.255
[S2-ospf-1-area-0.0.0.0]network 172.16.1.0 0.0.0.255
[S2-ospf-1-area-0.0.0.0]quit
[S2-ospf-1]quit
S3 配置
<Huawei>system-view
Enter system view, return user view with Ctrl+Z.
[Huawei]sysname S3
[S3]undo info-center enable
Info: Information center is disabled.
[S3]interface GigabitEthernet 0/0/1
[S3-GigabitEthernet0/0/1]port link-type trunk
[S3-GigabitEthernet0/0/1]port trunk allow-pass vlan 10
[S3-GigabitEthernet0/0/1]interface GigabitEthernet 0/0/2
[S3-GigabitEthernet0/0/2]port link-type trunk
[S3-GigabitEthernet0/0/2]port trunk allow-pass vlan 20
[S3-GigabitEthernet0/0/2]quit
[S3]vlan batch 10 20
Info: This operation may take a few seconds. Please wait for a moment...done.
[S3]interface Vlanif 10
[S3-Vlanif10]ip address 10.1.1.2 24
[S3-Vlanif10]interface Vlanif 20
[S3-Vlanif20]ip address 10.2.2.1 24
[S3-Vlanif20]quit
[S3]ospf 1 router-id 10.10.10.3
[S3-ospf-1]area 0
[S3-ospf-1-area-0.0.0.0]network 10.1.1.0 0.0.0.255
[S3-ospf-1-area-0.0.0.0]network 10.2.2.0 0.0.0.255
[S3-ospf-1-area-0.0.0.0]quit
[S3-ospf-1]quit