上层协议的故障检测时间在1秒以上,但语音、视频等实时业务能容忍的中断时间远低于这个阈值——传统检测机制已无法满足现代网络的高可靠性要求。新华三集团(H3C)发布的这份BFD技术白皮书指出,BFD(双向转发检测)协议提供了一个通用的、标准化的、介质无关的快速故障检测机制,能够将检测时间压缩至毫秒级。从echo报文到控制报文,从SBFD到SRv6 BFD,再到Comware硬件BFD技术,这份白皮书系统梳理了BFD的技术演进路径与典型组网应用。
BFD技术概述——为什么需要快速故障检测
网络设计时,通常使用冗余备份链路来保护关键应用。网络发生故障时,需要设备能够快速检测出故障,并将流量切换至备份链路以加快网络收敛速度。
传统检测机制的局限性
目前有些链路(如POS)通过硬件检测机制来实现快速故障检测,但某些链路(如以太网链路)不具备这样的检测机制。此时,应用就要依靠上层协议自身的机制来进行故障检测。然而,上层协议的检测时间都在1秒以上,这样的故障检测时间对某些应用来说是不能容忍的。部分路由协议如OSPF、IS-IS虽然有FastHello功能来加快检测速度,但检测时间也只能达到1秒的精度,而且FastHello功能只是针对本协议的,无法为其他协议提供快速故障检测。
BFD的核心技术优点
BFD协议提供了一个通用的、标准化的、介质无关的、协议无关的快速故障检测机制。其核心优点包括:对网络设备间任意类型的双向转发路径进行故障检测,包括直连物理链路、SRv6 BE转发路径、SRv6 TE Policy转发路径、MPLS LSP、多跳路由路径以及单向链路等;可以为不同的上层应用服务,提供一致的快速故障检测时间;提供毫秒级的检测速度,从而加快网络收敛速度,减少应用中断时间,提高网络的可靠性。
BFD技术实现——echo报文与控制报文两种方式
BFD在两台网络设备上建立会话,用来检测网络设备间的双向转发路径,为上层应用服务。BFD本身并没有发现机制,而是靠被服务的上层协议通知来建立会话。
BFD会话建立与工作流程
上层协议在建立新的邻居关系后,将邻居的参数及检测参数(包括目的地址和源地址等)通告给BFD;BFD根据收到的参数建立BFD会话。会话建立后,建立会话的双方会周期性地向彼此快速发送BFD报文。如果在检测时间内没有收到会话对端的BFD报文,则认为该双向转发路径发生了故障,并将故障信息通知给该会话所服务的上层应用。
根据检测过程采用的报文类型不同,BFD会话分为两类:echo报文方式的BFD会话(不需要对端设备支持BFD功能,适用于仅一端设备需要故障检测的情况)和控制报文方式的BFD会话(需要两端设备均配置BFD,适用于两端设备均需要故障检测的情况)。
echo报文方式的BFD会话
BFD echo报文采用UDP封装,目的端口号为3785,目的IP地址为发送接口的地址。本端周期性发送echo报文建立BFD会话,对链路进行单向检测,对端不建立BFD会话。对端只需把收到的echo报文转发回本端。如果本端在检测时间内没有收到对端转发回的echo报文,则认为会话DOWN。echo报文方式的BFD仅在隧道应用中支持多跳检测,其他应用中仅支持单跳检测。
控制报文方式的BFD会话
BFD控制报文采用UDP封装,源端口号范围为49152到65535,对于单跳检测其UDP目的端口号为3784,对于多跳检测其UDP目的端口号为4784。BFD控制报文包括强制必选部分和可选认证部分,关键字段包括Vers(版本号)、Diag(诊断码)、Sta(本地会话状态)、P(参数变化置位)、F(应答标志)。
BFD通过控制报文中的本地标识符(MyDiscriminator)和远端标识符(YourDiscriminator)来区分不同的会话。建立控制报文方式的BFD会话有两种方式:通过命令行静态创建BFD会话,或应用程序与BFD联动时动态建立BFD会话。
BFD会话状态机与三次握手建立
BFD会话通常有三种状态:DOWN(会话关闭或刚刚创建)、INIT(本端已可与对端通信,希望进入UP状态)、UP(会话建立成功)。另有特殊状态ADMINDOWN(主动阻止建立会话)。
BFD使用三次握手的机制来建立会话。通信双方至少要有一方运行在主动模式才能成功建立BFD会话。以两端均为主动模式为例:双方发送状态为DOWN的控制报文;收到对端DOWN报文后,状态迁移到INIT;收到对端INIT报文后,状态迁移到UP;双方状态都为UP时,会话成功建立。如果本端BFD会话DOWN,将会向对端发送Sta字段填为1的BFD控制报文,通知对端会话DOWN。
定时器协商机制
BFD控制报文的发送时间间隔和检测时间需要通过协商确定。定时器值的选取原则为:BFD控制报文发送时间间隔=MAX(本端DesiredMinTXInterval,对端RequiredMinRXInterval);检测时间=对端DetectMult × MAX(本端RequiredMinRXInterval,对端DesiredMinTXInterval)。不同方向的BFD会话定时器是各自独立协商的,双向定时器时间可以不同。
在BFD会话有效期间,控制报文发送时间间隔和检测时间可以随时协商修改而不影响会话状态。修改定时器参数时,需要确保对端已同步调整检测时间或发送间隔,否则可能导致检测定时器错误超时。
SBFD技术实现——单向快速故障检测
SBFD(Seamless BFD,无缝BFD)是一种单向的故障检测机制,简化了BFD的状态机(SBFD仅支持UP、DOWN两个状态),缩短了会话协商时间,其检测速度比BFD更快速。SBFD适用于仅一端需要进行链路状态检测的情况。
SBFD会话中,设备的角色分为发起端(Initiator)和响应端(Reflector)。Initiator负责维护SBFD会话状态,周期性发送SBFD控制报文;Reflector监听到达本地节点的SBFD控制报文,并判断是否需要生成SBFD响应报文,无需维护SBFD会话状态。
Initiator上指定的SBFD会话的远端标识符必须为Reflector上手工指定的SBFD会话本地标识符。否则,Reflector不会发送响应报文给Initiator。