一、概诉
BFD提供了一个通用的、标准化的、介质无关的、协议无关的快速故障检测机制,有以下两大优点:
1.对相邻转发引擎之间的通道提供轻负荷、快速故障检测。
2.用单一的机制对任何介质、任何协议层进行实时检测。
BFD是一个简单的“Hello”协议。两个系统之间建立BFD会话通道,并周期性发送BFD检测报文,如果某个系统在规定的时间内没有收到对端的检测报文,则认为该通道的某个部分发生了故障。
二、工作原理
1、BFD报文结构
BFD检测是通过维护在两个系统之间建立的BFD会话来实现的,系统通过发送BFD报文建立会话。BFD控制报文根据场景不同封装不同,报文结构由强制部分和可选的认证字段组成,BFD的报文格式如图所示:
- Sta:BFD本地状态。
- Detect Mult:检测超时倍数,用于检测方计算检测超时时间。
- My Discriminator:BFD会话连接本地标识符(Local Discriminator) 。发送系统产生的一个唯一的、非0鉴别值,用来区分一个系统的多个BFD会话。
- Your Discriminator:BFD会话连接远端标识符(Remote Discriminator) 。从远端系统接收到的鉴别值,这个域直接返回接收到的“My Discriminator”,如果不知道这个值就返回0。
- Desired Min TX Interval:本地支持的最小BFD报文发送间隔。
- Required Min RX Interval:本地支持的最小BFD报文接收间隔。
- Required Min Echo RX Interval:本地支持的最小Echo报文接收间隔,单位为微秒(如果本地不支持Echo功能,则设置0)。
2、BFD会话建立方式
- 静态建立BFD会话
静态建立BFD会话是指通过命令行手工配置BFD会话参数,包括配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。
- 动态建立BFD会话
动态建立BFD会话的本地标识符由触发创建BFD会话的系统动态分配,远端标识符从收到对端BFD消息的Local Discriminator的值学习而来。
3、BFD会话状态
BFD会话有四种状态:Down、Init、Up和AdminDown。会话状态变化通过BFD报文的State字段传递,系统根据自己本地的会话状态和接收到的对端BFD报文驱动状态改变。BFD状态机的建立和拆除都采用三次握手机制,以确保两端系统都能知道状态的变化。以BFD会话建立为例,简单介绍状态机的迁移过程,BFD的会话状态如图所示:
- SwitchA和SwitchB各自启动BFD状态机,初始状态为Down,发送状态为Down的BFD报文。对于静态配置BFD会话,报文中的Remote Discriminator的值是用户指定的;对于动态创建BFD会话,Remote Discriminator的值是0。
- SwitchB收到状态为Down的BFD报文后,状态切换至Init,并发送状态为Init的BFD报文。
- SwitchB本地BFD状态为Init后,不再处理接收到的状态为Down的报文。
- SwitchA的BFD状态变化同SwitchB。
- SwitchB收到状态为Init的BFD报文后,本地状态切换至Up。
- SwitchA的BFD状态变化同SwitchB。
4、BFD检测模式
两个系统建立BFD会话,并沿它们之间的路径周期性发送BFD控制报文,如果一方在既定的时间内没有收到BFD控制报文,则认为路径上发生了故障。BFD的检测模式有异步模式和查询模式两种
- 异步模式
系统之间相互周期性地发送BFD控制包,如果某个系统在检测时间内没有收到对端发来的BFD控制报文,就宣布会话为Down。
- 查询模式
在需要验证连接性的情况下,系统连续发送多个BFD控制包,如果在检测时间内没有收到返回的报文就宣布会话为Down。
5、BFD检测时间
BFD会话检测时长由TX(Desired Min TX Interval),RX(Required Min RX Interval),DM(Detect Multi)三个参数决定。BFD报文的实际发送时间间隔,实际接受时间间隔由BFD会话协商决定。
- 本地BFD报文实际发送时间间隔=MAX { 本地配置的发送时间间隔,对端配置的接收时间间隔 }
- 本地BFD报文实际接收时间间隔=MAX { 对端配置的发送时间间隔,本地配置的接收时间间隔 }
- 本地BFD报文实际检测时间:
- 异步模式:本地BFD报文实际检测时间=本地BFD报文实际接收时间间隔×对端配置的BFD检测倍数
- 查询模式:本地BFD报文实际检测时间 = 本地BFD报文实际接收时间间隔×本端配置的BFD检测倍数
6、BFD单臂回声功能
在两台直接相连的设备中,其中一台设备支持BFD功能,另一台设备不支持BFD功能,只支持基本的网络层转发。为了能够快速的检测这两台设备之间的故障,可以在支持BFD功能的设备上创建单臂回声功能的BFD会话。支持BFD功能的设备主动发起回声请求功能,不支持BFD功能的设备接收到该报文后直接将其环回,从而实现转发链路的连通性检测功能。