「OSPF」- 与 BFD 联动(BFD Association)

  CREATED BY JENKINSBOT

问题描述

当网络的链路故障或拓扑变化时,都会导致设备重新进行路由计算,所以缩短路由协议的收敛时间对于提高网络的性能是非常重要的;

随着科技的发展,语音、视频及其它点播业务应用广泛,而这些业务对于丢包和延时非常敏感,当数据达到吉比特速率级时,较长的检测时间会导致大量数据丢失,无法满足电信级网络高可靠性的需求;

在默认情况下,OSPF 链路故障检测时间由协议 Hello 机制决定,默认秒级,40s,所以检测到故障所需时间比较长;

解决方案

为了解决上述问题,配置 OSPF 的指定进程(或指定接口)的 OSPF 与 BFD 联动功能,能够快速检测链路的状态,故障检测时间可以达到毫秒级,提高链路状态变化时 OSPF 的收敛速度;

OSPF 与 BFD 联动就是将 BFD 和 OSPF 关联起来,一旦与邻居之间的链路出现故障,BFD 对链路故障的快速感应能够加快 OSPF 对于网络拓扑变化的响应;

原理简述

当开启 OSPF 并与 BFD 联动后:
1)三台设备(R1、R2、R3)间建立 OSPF 邻居关系,当邻居状态到达 Full 时,通知 BFD 以建立 BFD 会话(自动建立,无需手动配置信息);
2)当链路 R1 到 S1 出现故障时,BFD 首先感知到,并通知 R1,当 R1 处理 BFD 会话 Down 事件,重新进行路由计算,新的路径为:R1-R3-R2;

详细说明

BFD 与 OSPF 联动就是将 BFD 和 OSPF 协议关联起来, BFD 将链路故障的快速检测结果告知 OSPF 协议:

1)OSPF 通过自己的 Hello 机制发现邻居并建立连接;
2)OSPF 在建立新的邻居关系后,将邻居信息(包括目的地址和源地址等)通告给 BFD;
3)BFD 根据收到的邻居信息建立会话,会话建立以后,BFD 开始检测链路故障;
4)正常情况下,R1 根据 OSPF 路径开销大小选择经过 R2 到达 R4;

5)当 R1 和 R2 之间链路出现故障,BFD 首先快速检测到链路故障,BFD 会话状态变为 Down 并通知 R1;
6)R1 处理邻居 Down 事件,通知本地 OSPF 进程邻居不可达,重新进行路由计算,选择通过 R3 到达 R4;

补充说明:在 BFD 通知 OSPF 后,OSPF 将进行快速 Hello 检测,以防止 BFD 误报。所以,单纯的 ACL 屏蔽 BFD 并不能结束 OSPF 邻居关系;

配置案例

常用命令

配置前提:
如果需要使用 BFD 功能快速检测链路故障,则必须在系统视图下执行 bfd 命令,开启全局 BFD 功能。

接口配置的 BFD 特性优先级高于进程配置的 BFD 特性优先级。如果打开了接口的 BFD 开关,则按照接口上 BFD 参数建立 BFD 会话。

配置 OSPF IP FRR 与 BFD 联动:
配置 OSPF IP FRR 特性时,需要底层能够快速响应链路变化,以便迅速将流量切换到备份链路。
将 OSPF IP FRR 与 BFD 会话绑定可以达到快速感知故障的目的,确保故障后流量切换的及时性。

// ----------------------------------------------------------------------------- // 配置 OSPF 的 BFD 特性

// 在 OSPF 进程下使能 BFD 特性
[Huawei-ospf-1] bfd all-interfaces enable

// 配置 BFD 会话的参数值
// min-rx-interval receive-interval:指定期望从对端接收 BFD 报文的最小接收间隔。整数形式,取值范围是 10~2000ms(缺省 1000ms)
// min-tx-interval transmit-interval:指定向对端发送 BFD 报文的最小发送间隔。整数形式,取值范围是 10~2000ms(缺省 1000ms)
// detect-multiplier multiplier-value:指定本地检测倍数。整数形式,取值范围是 3~50,缺省值是 3。
// frr-binding:将 BFD 会话状态与接口的链路状态进行绑定。当 BFD 会话状态变为 Down 时,接口的物理层链路状态也会变为 Down,从而触发流量切换到备份路径。
[Huawei-ospf-1] bfd all-interfaces { min-rx-interval receive-interval | min-tx-interval transmit-interval | detect-multiplier multiplier-value | frr-binding } 

// ----------------------------------------------------------------------------- // 配置 OSPF 指定接口的 BFD 特性

// 在使能 OSPF 的特定接口下使能 BFD 特性:
[Huawei-GigabitEthernet0/0/1] ospf bfd enable

// 在使能 OSPF 的特定接口下配置 BFD 会话的参数值:
[Huawei-GigabitEthernet0/0/1] ospf bfd { min-rx-interval receive-interval | min-tx-interval transmit-interval | detect-multiplier multiplier-value | frr-binding }

配置示例

针对如上拓扑:

// 配置 BFD 关联

[Huawei] bfd                                                                    # 使能全局 BFD 功能
[OSPF] bfd all-interface enable
[OSPF] bfd all-interface min-tx-interval 100 min-rx-interval 100 detect-multiplier 3

// 当我们 shutdown AR1.GE0/0/2 接口后,在 AR2 上,其 BFD 探测到链路故障,理解结束 OSPF 邻居关系

Feb 20 2022 22:35:08-08:00 AR2 %%01BFD/4/STACHG_TODWN(l)[13]:BFD session changed
 to Down. (SlotNumber=0, Discriminator=18874368, Diagnostic=DetectDown, Applicat
ions=OSPF, ProcessPST=False, BindInterfaceName=GigabitEthernet0/0/1, InterfacePh
ysicalState=Up, InterfaceProtocolState=Up) 
[AR2]
Feb 20 2022 22:35:08-08:00 AR2 %%01OSPF/3/NBR_CHG_DOWN(l)[14]:Neighbor event:nei
ghbor state changed to Down. (ProcessId=256, NeighborAddress=1.1.1.1, NeighborEv
ent=KillNbr, NeighborPreviousState=Full, NeighborCurrentState=Down) 
[AR2]
Feb 20 2022 22:35:08-08:00 AR2 %%01OSPF/3/NBR_DOWN_REASON(l)[15]:Neighbor state 
leaves full or changed to Down. (ProcessId=256, NeighborRouterId=1.1.1.1, Neighb
orAreaId=0, NeighborInterface=GigabitEthernet0/0/1,NeighborDownImmediate reason=
Neighbor Down Due to Kill Neighbor, NeighborDownPrimeReason=BFD Session Down, Ne
ighborChangeTime=2022-02-20 22:35:08-08:00) 

通过 BFD 探测,在链路故障时,OSPF 能够完成快速收敛;