BFD (双向转发检测) 协议简介与开发

         之前的开发的BFD协议,正好有空介绍一下协议基础内容以及开发时候的注意事项。内容分为如下

1. BFD背景简介

2. BFD特点

3. BFD报文格式

4. BFD 状态机处理

5. 开发注意事项

 

一. BFD背景简介

          为了保护关键应用,网络中会设计有一定的冗余备份链路,网络发生故障时就要求网络设备能够快速检测出故障并将流量切换至备份链路以加快网络收敛速度,减少故障时间。

二. BFD的特点

1. 提供了一种通用的标准化的介质无关和协议无关的协议,能够在网络设备间任意类型的双向转发路径进行故障检测。

2. 可以为不同的上层应用服务,提供一致的快速故障检测时间。

3. 微秒级的链路检测精度,减少应用中断时间,提高网络的可靠性。

三. BFD报文格式

各字段含义如下图:

 BFD报文

 如果报文加密的话,加密字段格式定义如下:

 

四. BFD 状态机处理

BFD协议状态机如下图:

初始建立会话前采用三次握手的方式:

5. 开发注意事项

1. BFD会话建立前BFD控制报文以1秒的时间间隔周期发送以减小报文流量。在会话建立后则以协商的时间间隔发送BFD控制报文以实现快速检测。在BFD会话建立的同时,BFD控制报文发送时间间隔以及检测时间也会通过报文交互协商确定。在BFD会话有效期间,这些定时器可以随时协商修改而不影响会话状态。BFD会话不同方向的定时器协商是分别独立进行的,双向定时器时间可以不同。

2. BFD控制报文发送时间间隔为本端Desired Min TX Interval与对端Required Min RX Interval之中的最大值,也就是说比较慢的一方决定了发送频率。

3. 检测时间为对端BFD控制报文中的Detect Mult乘以经过协商的对端BFD控制报文发送时间间隔。

4. 如果加大本端Desired Min TX Interval,那么本端实际发送BFD控制报文的时间间隔必须要等收到对端F字段置位的报文后才能改变,这是为了确保在本端加大BFD控制报文发送时间间隔前对端已经加大了检测时间,否则可能导致对端检测定时器错误超时。BFD控制报文发送时间间隔为本端Desired Min TX Interval与对端Required Min RX Interval之中的最大值,也就是说比较慢的一方决定了发送频率。

5. 如果减小本端Required Min RX Interval,那么本端检测时间必须要等收到对端F字段置位的报文后才能改变,这是为了确保在本端减小检测时间前对端已经减小了BFD控制报文发送间隔时间,否则可能导致本端检测定时器错误超时。

6. 如果减小Desired Min TX Interval,本端BFD控制报文发送时间间隔将会立即减小;加大Required Min RX Interval,本端检测时间将会立即加大。

 

参考资料:

1. rfc 5880

2. kbfd(BFD的内核实现)

3. OpenBFDD(开源的BFD实现,可以直接在Linux上编译运行,测试对接)

4. OpenBFDD的安装与使用

 

またね!