1、BFD 技术白皮书BFD 技术白皮书关键词:BFD摘 要:BFD 是用来实现快速故障检测的标准协议。本文对 BFD 技术实现和典型组网应用进行介绍。缩略语:字段 英文全名 中文解释BFD Bidirectional Forwarding Detection 双向转发检测UDP User Datagram Protocol 用户数据报协议目 录1 概述1.1 产生背景1.2 技术优点2 BFD 技术实现2.1 BFD 实现简介2.2 BFD 报文2.2.1 BFD 控制报文2.2.2 BFD Echo 报文2.3 BFD 会话连接建立2.4 定时器协商2.5 故障检测3 典型组网应用3.1 路由
2、协议与 BFD 联动典型组网应用3.2 快速重路由与 BFD 联动典型组网应用3.3 VRRP 与 BFD 联动典型组网应用4 参考文献1 概述1.1 产生背景为了保护关键应用,网络中会设计有一定的冗余备份链路,网络发生故障时就要求网络设备能够快速检测出故障并将流量切换至备份链路以加快网络收敛速度。目前有些链路(如 POS)通过硬件检测机制来实现快速故障检测。但是某些链路(如以太网链路)不具备这样的检测机制。此时,应用就要依靠上层协议自身的机制来进行故障检测,上层协议的检测时间都在 1 秒以上,这样的故障检测时间对某些应用来说是不能容忍的。某些路由协议如 OSPF、IS-IS 虽然有 Fast
3、 Hello 功能来加快检测速度,但是检测时间也只能达到 1 秒的精度,而且 Fast Hello 功能只是针对本协议的,无法为其它协议提供快速故障检测。1.2 技术优点BFD 协议就是在这种背景下产生的,提供了一个通用的标准化的介质无关和协议无关的快速故障检测机制。具有以下优点: 对网络设备间任意类型的双向转发路径进行故障检测,包括直连物理链路、虚电路、隧道、MPLS LSP、多跳路由路径以及单向链路等。 可以为不同的上层应用服务,提供一致的快速故障检测时间。 提供小于 1 秒的检测时间,从而加快网络收敛速度,减少应用中断时间,提高网络的可靠性。2 BFD 技术实现2.1 BFD 实现简介B
4、FD 在两台网络设备上建立会话,用来检测网络设备间的双向转发路径,为上层应用服务。BFD本身并没有邻居发现机制,而是靠被服务的上层应用通知其邻居信息以建立会话。会话建立后会周期性地快速发送 BFD 报文,如果在检测时间内没有收到 BFD 报文则认为该双向转发路径发生了故障,通知被服务的上层应用进行相应的处理。下面以 OSPF 与 BFD 联动为例,简单介绍会话工作流程。1. BFD 会话建立流程图 1 BFD 会话建立流程图(1) OSPF 通过自己的 Hello 机制发现邻居并建立连接;(2) OSPF 在建立了新的邻居关系后,将邻居信息(包括目的地址和源地址等)通告给 BFD;(3) BF
5、D 根据收到的邻居信息建立会话。2. BFD 故障发现处理流程图 2 BFD 故障发现处理流程图(1) 被检测链路出现故障;(2) BFD 检测到链路故障,拆除 BFD 邻居会话;(3) BFD 通知本地 OSPF 进程 BFD 邻居不可达;(4) 本地 OSPF 进程中断 OSPF 邻居关系BFD 有两种操作模式:异步模式和查询模式。目前 Comware 只支持异步模式。在此模式下,会话两端周期性地发送 BFD 控制报文,根据是否能收到对端的 BFD 控制报文来检测会话状态。另外,Comware 还支持回声功能。回声功能启动后,会话的一端周期性地发送 BFD Echo 报文,对端不对此报文进
6、行处理,而只将此报文转发回发送端。根据发送端是否能收到 BFD Echo 报文来检测会话状态。BFD 会话的两端可能是在直连网段(即 IP 报文的一跳),也可能是在不同网段。回声功能只可以检测直连网段故障,即 BFD Echo 报文是单跳发送;而 BFD 控制报文可以检测直连网段和非直连网段的故障,即 BFD 控制报文可以是单跳或多跳发送。2.2 BFD 报文2.2.1 BFD 控制报文BFD 控制报文包括强制部分和可选认证部分。强制部分格式如图 3:图 3 BFD 控制报文可选认证部分格式如图 4:图 4 BFD 控制报文(认证部分)BFD 控制报文各字段含义如表 1:表 1 BFD 控制报
7、文各字段含义字段 含义Vers BFD 协议版本号,目前版本号为 1Diag 诊断码,表明发送方最近一次会话 Down 的原因Sta 发送方 BFD 会话当前状态,取值为:0 代表AdminDown,1 代表 Down,2 代表 Init,3 代表 UpP 会话参数变化时置位F 如果收到的 BFD 控制报文 P 字段置位,则将下一个发送的 BFD 控制报文的 F 字段置位作为应答C 该字段置位表明 BFD 的实现是独立于控制平面的A 该字段置位表明报文包含认证部分,会话需要进行认证字段 含义D 该字段置位表明发送方希望以查询模式运行,不置位表明不希望以查询模式运行或不支持查询模式R 保留位,发
8、送时设为 0,接收时忽略该字段Detect Mult 检测时间倍数Length BFD 控制报文长度,单位为字节My Discriminator发送方产生的一个唯一非 0 值,用来标识不同的 BFD会话Your Discriminator如果已经收到会话邻居发送的 BFD 控制报文则该值为收到报文中的 My Discriminator,否则为 0Desired Min TX Interval发送方支持的最小 BFD 控制报文发送时间间隔,单位为微秒。Required Min RX Interval发送方支持的最小 BFD 控制报文接收时间间隔,单位为微秒Required Min Echo RX
9、 Interval发送方支持的最小 BFD Echo 报文接收时间间隔,单位为微秒。为 0 表示不支持 BFD Echo 报文Auth Type 认证类型Auth Len 可选认证部分长度,包括 Auth Type 和 Auth Len 字段,单位为字节BFD 控制报文采用 UDP 封装,目的端口号为 3784,源端口号在 49152 到 65535 的范围内。2.2.2 BFD Echo 报文BFD Echo 报文提供了一种不依赖于 BFD 控制报文的故障检测方法。本端发送本端接收,远端不对报文进行处理,而只是将此此报文在反向通道上返回。因此 BFD 协议并没有对 BFD Echo 报文的格
10、式进行定义,唯一的要求是发送方能够通过报文内容区分会话。BFD Echo 报文采用 UDP 封装,目的端口号为 3785,目的 IP 地址为发送接口的地址,源 IP 地址由配置产生(配置的源 IP 地址要避免产生 ICMP 重定向)。2.3 BFD 会话连接建立 说明:下面仅介绍通过发送控制报文来建立会话并进行故障检测的过程。BFD 会话建立前有主动与被动两种模式。如果一台设备为主动模式,那么在会话建立前不管有没有收到对端发来的 BFD 控制报文,都会主动发送 BFD 控制报文。如果一台设备为被动模式,那么在会话建立前就不会主动发送 BFD 控制报文,直到收到对端发来的 BFD 控制报文才发送
11、。要建立 BFD 会话的两端中至少要有一端为主动模式才能成功建立起会话。下面对两端都为主动模式的会话建立过程进行说明,一端主动模式一端被动模式的会话建立过程基本相同。图 5 BFD 会话连接建立BFD 使用三路握手的机制来建立会话,发送方在发送 BFD 控制报文时会在 Sta 字段填入本地当前的会话状态,接收方根据收到的 BFD 控制报文的 Sta 字段以及本地当前会话状态来进行状态机的迁移,建立会话。 Router A 和 Router B 的 BFD 收到上层应用的通知后,发送状态为 DOWN 的 BFD 控制报文。Router B 的 BFD 状态变化同 Router A。 Router
12、 B 收到对端状态为 DOWN 的 BFD 控制报文后,本地会话状态由 DOWN 迁移到 INIT,随后发送的 BFD 控制报文中将 Sta 字段填为 2 表明会话状态为 INIT。Router A 的 BFD 状态变化同 Router B。 Router A 收到对端状态为 INIT 的 BFD 控制报文后,本地会话状态由 INIT 迁移到 UP,随后发送的 BFD 控制报文中将 Sta 字段填为 3 表明会话状态为 UP。Router B 的 BFD 状态变化同Router A。 BFD 双方状态都为 UP,会话成功建立并开始检测链路状态。2.4 定时器协商BFD 会话建立前 BFD 控制
13、报文以 1 秒的时间间隔周期发送以减小报文流量。在会话建立后则以协商的时间间隔发送 BFD 控制报文以实现快速检测。在 BFD 会话建立的同时,BFD 控制报文发送时间间隔以及检测时间也会通过报文交互协商确定。在 BFD 会话有效期间,这些定时器可以随时协商修改而不影响会话状态。BFD 会话不同方向的定时器协商是分别独立进行的,双向定时器时间可以不同。BFD 控制报文发送时间间隔为本端 Desired Min TX Interval 与对端 Required Min RX Interval 之中的最大值,也就是说比较慢的一方决定了发送频率。检测时间为对端 BFD 控制报文中的 Detect M
14、ult 乘以经过协商的对端 BFD 控制报文发送时间间隔。如果加大本端 Desired Min TX Interval,那么本端实际发送 BFD 控制报文的时间间隔必须要等收到对端 F 字段置位的报文后才能改变,这是为了确保在本端加大 BFD 控制报文发送时间间隔前对端已经加大了检测时间,否则可能导致对端检测定时器错误超时。如果减小本端 Required Min RX Interval,那么本端检测时间必须要等收到对端 F 字段置位的报文后才能改变,这是为了确保在本端减小检测时间前对端已经减小了 BFD 控制报文发送间隔时间,否则可能导致本端检测定时器错误超时。然而如果减小 Desired M
15、in TX Interval,本端 BFD 控制报文发送时间间隔将会立即减小;加大 Required Min RX Interval,本端检测时间将会立即加大。下面详细介绍参数改变后定时器的协商过程:图 6 BFD 检测时间协商Router A 与 Router B 建立 BFD 会话,双方的 Desired Min TX Interval 和 Required Min RX Interval(下面简称为 TX 和 RX)都为 100ms,Detect Mult 都为 3。根据定时器协商规则,Router A 的发送时间间隔为 Router A 的 TX 与 Router B 的 RX 中的最
16、大值也就是100ms,Router B 的发送时间间隔也是 100ms,双方的检测超时时间都为 300ms。如果此时将 Router A 的 TX 和 RX 加大到 150 ms。(1) Router A 比较本端的 RX(150ms)和 Router B 的 TX(100ms),从而将本端检测时间改为 450ms。同时向对端发送 P 字段置位的 BFD 控制报文(TX 和 RX 均为 150ms)。(2) Router B 收到报文后,给 Router A 回复 F 字段置位的 BFD 控制报文(TX 和 RX 均为100ms)。同时将收到报文中的 RX 与本端的 TX 进行比较,由于 TX
17、 较大,故 Router B 的发送间隔改为 150ms。经过比较本端 RX 和对端的 TX,从而将检测时间也增大到 450ms。(3) Router A 收到对端发来 F 字段置位的控制报文。根据报文中的 RX 与本端的 TX 进行比较计算出新的时间间隔为 150ms。(4) 定时器协商完成,双方的发送间隔和检测时间分别为 150ms 和 450ms。2.5 故障检测BFD 会话建立及定时器协商完成后,两端会以协商后的间隔发送 BFD 控制报文。每当收到 BFD控制报文时,就会重置检测时间定时器,保持会话 UP 状态。如果在检测时间内没有收到 BFD控制报文,BFD 会话会迁移到 DOWN
18、状态,并通知该会话所服务的上层应用发生故障,由上层应用采取相应的措施。本端 BFD 会话 DOWN 后,发给对端的 BFD 控制报文中的 Sta 字段就填为 1,通知对端会话 DOWN,对端的 BFD 会话也迁移到 DOWN 状态。3 典型组网应用3.1 路由协议与 BFD 联动典型组网应用图 7 路由协议与 BFD 联动组网图两台路由器 Router A、Router B 通过二层交换机互连,在设备上运行路由协议,网络层相互可达。由于通过二层交换机相连,Router A 与 Router B 之间的链路故障可能不会导致接口 DOWN,只能通过协议握手去检测。通过在 Router A 与 Ro
19、uter B 之间使用 BFD 就能快速检测出故障,路由协议得到 BFD 通知后可以尽快计算新的路由,从而缩短收敛时间。3.2 快速重路由与 BFD 联动典型组网应用图 8 快速重路由与 BFD 联动典型组网图随着网络的快速发展,IP 网络越来越多的承载语音、视频等多种业务,这些业务对网络的高可靠性提出了更高的要求,从而运营商网络要求更快的收敛速度。BFD 应用于路由协议以及路由协议快速收敛技术的使用虽然很大程度提高了收敛速度,但还是无法满足语音、视频等新业务对业务中断时间的要求。而快速重路由和 BFD 联动技术可以很好的满足这种要求,通过提前计算备用路径,快速发现主用路径故障,并在主用路径故障时不依赖于控制平面的收敛而直接在转发平面切换至备用路径,极大的缩短了业务中断时间。3.3 VRRP 与 BFD 联动典型组网应用