BFD 故障检测机制详解
BFD 是什么?
BFD (Bidirectional Forwarding Detection)的是双向转发检测。是一种用于检测两个转发引擎之间路径故障的标准化全网统一检测机制。该机制能够为上层应用提供毫秒级检测服务,并实现链路的快速故障检测。通过BFD检测到链路故障后,上层协议可以采取措施及时纠正故障。
BFD 要解决什么问题?
随着网络应用日益广泛,对网络的可靠性要求越来越高。为减少设备故障对业务的影响,要尽可能缩短故障检测时间,从而触发保护倒换,确保业务快速恢复。现有路由协议(如OSPF、IS-IS)或冗余网关协议(如VRRP)的故障检测时间通常在秒级,难以满足关键业务的高可靠性要求。BFD能提供毫秒级故障检测,并与其他协议联动,实现业务的快速切换。
BFD的工作原理
BFD通过建立会话,在系统之间周期性地发送BFD数据包。若某一方在指定时间内未收到对端响应,即判定会话状态为”Down”(即检测到路径故障)。 本节从三个维度描述BFD的工作原理:BFD会话建立过程、BFD会话建立模式和BFD故障检测机制。
BFD会话建立过程
BFD会话具有以下状态:Down(关闭)、Init(初始化)、Up(已建立)和AdminDown(管理性关闭)。BFD报文中的State字段指示会话状态。系统根据本地会话状态和接收到的对端会话状态来更改会话状态。
- Down:初始状态或链路故障状态。
- Init:初始化状态,表示BFD会话正在建立。
- Up:正常状态,表示链路正常。
- AdminDown(管理性关闭):BFD会话被管理性关闭。
BFD状态机实现了用于BFD会话建立或删除的三次握手,以确保两个系统检测到状态变化。下图显示了BFD会话的建立过程,以描述状态机的转换过程。
会话建立过程
BFD会话建立模式
“BFD会话建立模式”指的是在两个设备之间创建和初始化一个BFD会话所采用的具体方法。它主要定义了关键的会话参数(尤其是标识符)是如何被确定和交换的。BFD会话可以通过静态或动态模式建立。静态和动态BFD会话的区别在于本地和远程鉴别符的配置方式不同。
- 静态建立BFD会话参数,包括本地和远程鉴别符,在CLI上手动指定。BFD会话建立请求手动分发。
- 动态建立当动态建立BFD会话时,系统按以下方式处理本地和远程鉴别。
动态分配的本地鉴别符:当上层协议(如OSPF)发现邻居并需要BFD进行检测时,它会通知BFD模块,BFD模块自动生成一个本地标识符。
自学习的远程鉴别符:通过自我学习获得。初始建立时,设备发送的BFD报文中“远程标识符”字段为0,表示“请告诉我你的本地标识符”。对端设备收到后,会回复包含自己本地标识符的报文。这样,双方就学习到了对方的标识符。
BFD故障检测机制
两个网络设备建立一个 BFD 会话以监控它们之间的路径并服务于上层应用程序。BFD 不提供邻居发现。相反,BFD 从其服务的上层应用程序获取邻居信息。两个设备建立 BFD 会话后,它们周期性地相互发送 BFD 数据包。如果一个设备在设定的时间限制内未收到响应,则该设备认为转发路径存在故障。然后 BFD 将此故障通知上层协议。
当 OSPF 和 BFD 一起使用时,BFD会话建立
在上图中,SwitchA 和 SwitchB 上都配置了 OSPF 和 BFD,建立 BFD 会话的过程如下:1OSPF 使用 Hello 机制发现邻居并建立邻居关系。2OSPF 将邻居信息(包括源地址和目的地址)通知给 BFD。3BFD 根据接收到的邻居信息建立会话。4BFD 会话建立后,BFD 开始监控链路并对任何链路故障做出快速响应。


