BFD原理描述
介绍BFD的实现原理。
原理简介
BFD在两台网络设备上建立会话,用来检测网络设备间的双向转发路径,为上层应用服务。BFD本身并没有邻居发现机制,而是靠被服务的上层应用通知其邻居信息以建立会话。会话建立后会周期性地快速发送BFD报文,如果在检测时间内没有收到BFD报文则认为该双向转发路径发生了故障,通知被服务的上层应用进行相应的处理。下面以OSPF与BFD联动为例,简单介绍会话工作流程。
图1 BFD会话建立流程图上图所示是一个简单的网络组网,两台设备上同时配置了OSPF与BFD,BFD会话建立过程如下所示:
-
OSPF通过自己的Hello机制发现邻居并建立连接。
-
OSPF在建立了新的邻居关系后,将邻居信息(包括目的地址和源地址等)通告给BFD。
-
BFD根据收到的邻居信息建立会话。
-
会话建立以后,BFD开始检测链路故障,并做出快速反应。
如上图所示:
-
被检测链路出现故障。
-
BFD快速检测到链路故障,BFD会话状态变为Down。
-
BFD通知本地OSPF进程BFD邻居不可达。
-
本地OSPF进程中断OSPF邻居关系。
BFD会话建立方式
BFD会话的建立有两种方式,即静态建立BFD会话和动态建立BFD会话。静态和动态创建BFD会话的主要区别在于本地标识符(Local Discriminator)和远端标识符(Remote Discriminator)的配置方式不同。BFD通过控制报文中的Local Discriminator和Remote Discriminator区分不同的会话。
-
静态建立BFD会话
静态建立BFD会话是指通过命令行手工配置BFD会话参数,包括配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。
-
动态建立BFD会话
动态建立BFD会话时,系统对本地标识符和远端标识符的处理方式如下:
-
动态分配本地标识符
当应用程序触发动态创建BFD会话时,系统分配属于动态会话标识符区域的值作为BFD会话的本地标识符。然后向对端发送Remote Discriminator的值为0的BFD控制报文,进行会话协商。
-
自学习远端标识符
当BFD会话的一端收到Remote Discriminator的值为0的BFD控制报文时,判断该报文是否与本地BFD会话匹配,如果匹配,则学习接收到的BFD报文中Local Discriminator的值,获取远端标识符。
-
BFD检测机制
BFD的检测机制是两个系统建立BFD会话,并沿它们之间的路径周期性发送BFD控制报文,如果一方在既定的时间内没有收到BFD控制报文,则认为路径上发生了故障。
BFD提供异步检测模式。在这种模式下,系统之间相互周期性地发送BFD控制报文,如果某个系统连续几个报文都没有接收到,就认为此BFD会话的状态是Down。
BFD会话管理
BFD会话有四种状态:Down、Init、Up和AdminDown。会话状态变化通过BFD报文的State字段传递,系统根据自己本地的会话状态和接收到的对端BFD报文驱动状态改变。BFD状态机的建立和拆除都采用三次握手机制,以确保两端系统都能知道状态的变化。以BFD会话建立为例,简单介绍状态机的迁移过程。
图3 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。
BFD协议报文
BFD协议报文的格式如图4所示。
图4 BFD协议报文的格式
字段 |
长度 |
含义 |
---|---|---|
Vers (Version) |
3 bits |
BFD协议版本号,目前为1。 |
Diag (Diagnostic) |
5 bits |
诊断字,标明本地BFD系统最近一次会话状态发生变化的原因。
|
Sta (State) |
2 bits |
BFD本地状态:
|
P (Poll) |
1 bit |
参数发生改变时,发送方在BFD报文中置位该标志,接收方必须立即响应该报文。
|
F (Final) |
1 bit |
是否发送响应P标志置位的回应报文由F标志的置位状态决定。
|
C (Control Plane Independent) |
1 bit |
转发/控制分离标志,一旦置1,控制平面的业务状态变化不影响BFD检测,如:控制平面为IS-IS,当IS-IS平滑重启(GR)时,BFD可以继续监测链路状态。
|
A (Authentication Present) |
1 bit |
认证标识。
|
D (Demand) |
1 bit |
查询请求,置位代表发送方期望采用查询模式对链路进行监测。
|
M (Multipoint) |
1 bit |
为BFD将来支持点对多点扩展而设的预留位。 |
Detect Mult |
8 bits |
检测超时倍数,用于检测方计算检测超时时间。
|
Length |
8 bits |
报文长度,单位为字节。 |
My Discriminator |
32 bits |
BFD会话连接本地标识符。发送系统产生的一个唯一的、非0鉴别值,用来区分一个系统的多个BFD会话。 |
Your Discriminator |
32 bits |
BFD会话连接远端标识符。
|
Desired Min TX Interval |
32 bits |
本地支持的最小BFD报文发送间隔,单位为毫秒。 |
Required Min RX Interval |
32 bits |
本地支持的最小BFD报文接收间隔,单位为毫秒。 |
Required Min Echo RX Interval |
32 bits |
本地支持的最小Echo报文接收间隔,单位为毫秒(如果本地不支持Echo功能,则设置0)。 |