BFD基本概念
BFD用于检测转发引擎之间的通信故障。具体来说,BFD对系统间的、同一路径上的一种数据协议的连通性进行检测,这条路径可以是物理链路或逻辑链路,包括隧道。
可以把BFD看作是系统提供的一种服务:
上层应用向BFD提供检测地址、检测时间等参数。
BFD根据这些信息创建、删除或修改BFD会话,并把会话状态通告给上层应用。
BFD具有以下特点:
对相邻转发引擎之间的路径提供轻负荷、短持续时间的检测。
采用单一机制对所有类型的介质、协议层进行检测,实现全网统一的检测机制。
下面从BFD检测机制、检测的链路类型、会话建立方式以及会话管理来介绍BFD的基本原理。
BFD检测机制
BFD的检测机制是两个系统建立BFD会话,并沿它们之间的路径周期性发送BFD控制报文,如果一方在既定的时间内没有收到BFD控制报文,则认为路径上发生了故障。
BFD控制报文封装在UDP报文中传送。会话开始阶段,双方系统通过控制报文中携带的参数(会话标识符、期望的收发报文最小时间间隔、本端BFD会话状态等)进行协商。协商成功后,以协商的报文收发时间在彼此之间的路径上定时发送BFD控制报文。
BFD提供的检测模式:
异步模式:BFD的主要操作模式称为异步模式。在这种模式下,系统之间相互周期性地发送BFD控制报文,如果某个系统连续几个报文都没有接收到,就认为此BFD会话的状态是Down。
这种模式的一个辅助功能是Echo功能。当Echo功能激活时,一个BFD控制报文按照如下方式发送:本地发送一个BFD控制报文,远端系统通过它的转发通道将它们环回回来。如果连续几个Echo报文都没有接收到,会话状态就被宣布为Down。
BFD检测的链路类型
BFD检测链路类型 |
具体链路类型 |
说明 |
---|---|---|
IP链路 |
|
对于一个物理以太网接口有多个子接口的情况,BFD会话可以独立建立在各个子接口上和此物理以太网接口上。 |
IP-Trunk |
|
检测Trunk成员口与检测Trunk口的BFD会话互相独立,可同时检测。 |
Eth-Trunk |
|
检测Trunk成员口与检测Trunk口的BFD会话互相独立,可同时检测。 |
VLANIF |
|
检测VLANIF与检测VLAN成员口的BFD会话相互独立,可同时检测。 |
MPLS LSP |
|
检测MPLS LSP的连通性时,BFD会话协商有两种方式
BFD能够检测信令协议为CR-Static和RSVP-TE的TE隧道,并且能够检测与TE隧道绑定的主用LSP。 动态BFD不支持检测整条TE隧道。 |
PW |
|
BFD检测PW支持静态方式(手工配置标识符)和动态方式。 |
BFD会话建立方式
BFD会话的建立有两种方式,即静态建立BFD会话和动态建立BFD会话。
BFD通过控制报文中的My Discriminator和Your Discriminator区分不同的会话。静态和动态创建BFD会话的主要区别在于My Discriminator和Your Discriminator的配置方式不同。
BFD会话建立方式 |
描述 |
---|---|
静态配置BFD会话 |
静态配置BFD会话是指通过命令行手工配置BFD会话参数,包括了配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。
说明:
在配置静态BFD会话时,需要在网络中精确规划BFD的描述符,避免出现配置错误的BFD会话对正常BFD会话发生攻击,从而导致会话震荡。 |
动态建立BFD会话 |
动态建立BFD会话时,系统对本地标识符和远端标识符的处理方式如下:
|
BFD会话管理
BFD会话有四种状态:Down、Init、Up和AdminDown。
Down:会话处于Down状态或刚刚创建。
Init:已经能够与对端系统通信,本端希望使会话进入Up状态。
Up:会话已经建立成功。
AdminDown:会话处于管理性Down状态。
会话状态变化通过BFD报文的State字段传递,系统根据自己本地的会话状态和接收到的对端BFD报文驱动状态改变。
BFD状态机的建立和拆除都采用三次握手机制,以确保两端系统都能知道状态的变化。
以BFD会话建立为例,简单介绍状态机的迁移过程。
DeviceA和DeviceB各自启动BFD状态机,初始状态为Down,发送状态为Down的BFD报文。对于静态配置BFD会话,报文中的Your Discriminator的值是用户指定的;对于动态创建BFD会话,Your Discriminator的值是0。
DeviceB收到状态为Down的BFD报文后,状态切换至Init,并发送状态为Init的BFD报文。
DeviceB本地BFD状态为Init后,不再处理接收到的状态为Down的报文。
DeviceA的BFD状态变化同DeviceB,并且向DeviceB发送状态为Init的报文。
DeviceB收到状态为Init的BFD报文后,本地状态切换至Up。
DeviceA的BFD状态变化同DeviceB。
BFD协议报文
BFD协议报文的格式如图2-2所示。
字段 |
长度 |
含义 |
---|---|---|
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)。 |