BFD基础

BFD概述

BFD(Bidirectional Forwarding Detection,双向转发检测),一个通用的、标准化的、介质无关的、协议无关的快速故障检测机制

BFD是一个简单的“Hello”协议,两个系统之间建立BFD会话通道,并周期性发送BFD检测报文,如果一个系统在规定的时间内没有收到对端的检测报文,则认为该通道的某个部分发生了故障。

工作原理

报文格式

BFD报文由强制部分和可选的认证字段组成

Ver:BFD协议版本号

Diag:诊断字,标明本地BFD系统最近一次会话状态发生变化的原因

Sta:BFD本地状态

P:参数发生变化时,发送方在BFD报文中置该标志,接受方必须立即响应该报文

F:响应P标志置位的回应报文中必须将F标志置位

C:转发/控制分离标志,一旦置位,控制平面的变化不影响BFD检测

A:认证标识,置1代表会话需要验证

D:查询请求:置位代表发送方期望采用查询模式对链路进行监测

M:为BFD将来支持点到多点扩展的预留位

Detect Mult:检测超时倍数,用于检测方计算检测超时时间

Length:报文长度,单位为字节

My discriminator:BFD会话连接本地标识符。发送系统产生的唯一的、非0鉴别值,用来区分一个系统的多个BFD会话

Your discriminator:BFD会话远端标识符。从远端系统接受到的鉴别值,即远端系统的“My discriminator”

Desired Min Tx Interval:本地支持的最小BFD发送间隔

Required Min RX Interval:本地支持的最小BFD报文接收间隔

Required Min Echo RX Interval:本地支持的最小Echo报文接收间隔,单位为微秒 (如本地不支持Echo,则设置为0)

BFD会话建立

会话建立分为静态建立和动态建立,区别主要在Local DiscriminatorRemote Discriminator的配置方式不同。(即报文格式中提到的My DiscriminatorYour Discriminator

静态建立中是手工配置BFD参数(包括本地和远端标识符),然后手动下发BFD会话建立请求;动态建立中本地标识符由本地系统分配,远端标识符通过接收对端BFD消息学习而来。

BFD会话状态

BFD有四种状态:DownInitUpAdminDown。会话状态通过BFD报文的State字段来传递。

而在BFD会话过程中主要包含前三个状态,Init和Up用来建立会话,Down用来断开会话。建立和断开会话都需要三次握手确保两端系统都能感知到。AdminDown是通过管理手段down,也属于donw状态。

Down状态: 表明当前会话down。当本机处于down状态时,收到了Down包,则状态机跳转到Init状态;而如果收到了Init报文,则跳转到Up报文;如果收到Up报文,则维持Down状态

Init状态: 表明与远端正在通信,并且本地会话期望进入Up状态,但是远端仍未回应。当处于Init状态时,收到了对端的InitUp包,则状态机进入Up状态,否则等到检测时间超时后,进入Down状态

Up状态: 说明BFD会话建立成功,并且正在确认链路的连通性。当处于Up状态时,发生链路故障或进行了管理down操作,或收到远端的down包或者检测时间超时,则进入down状态

BFD检测模式

两个系统建立BFD会话,并沿它们之间的路径周期性发送BFD控制报文,如果一方在既定的时间内没收到BFD控制报文,则认为路径上发生了故障。

BFD检测模式有异步模式和查询模式:

异步模式:系统之间相互发送BFD控制包,如果某个系统在检测时间内没有收到对端发来的BFD控制报文,则认为会话Down

查询模式:在需要验证的情况下,系统连续发送多个BFD控制报文,如果在检测时间内没有收到返回的报文,则认为会话Down

两个模式的区别在于是否存在主动方,异步模式中两端系统都为主动方,主动发送BFD控制报文,而查询模式是由一方主动发起查询,对端被动回应。

BFD检测时间

BFD 会话检测时间由 TX,RX 和 DM 三个参数决定。

本地BFD报文实际发送时间间隔 = MAX {本地配置的发送时间间隔,对端配置的接收时间间隔}

本地BFD报文实际接收时间间隔 = MAX {对端配置的发送时间间隔,本地配置的接收时间间隔}

本地BFD报文实际检测时间: - 异步模式:本地BFD报文实际接收时间间隔×对端配置的BFD检测倍数 - 查询模式:本地BFD报文实际接收时间间隔×本端配置的BFD检测倍数

BFD缺省时间参数: 发送间隔:1000ms 接受间隔:1000ms 本地检测倍数:3

BFD Echo功能

又称为BFD回声功能,本地发送BFD Echo报文,远端系统将报文换回的一种检测机制

比如在两台直连的设备中,一台设备支持BFD功能,另一台不支持,则在支持BFD功能的设备上创建单臂回声功能的BFD会话。支持BFD的设备主动发起回声请求功能,不支持BFD的设备收到该报文后直接将其换回,从而实现链路的连通信检测。

注意
  • 缺省情况下是不会创建BFD会话的,在第一次创建BFD单跳会话时,必须绑定对端IP地址和本端响应接口,且创建后不可修改,要修改也只能删除后再创建
  • 华三BFD实现中,当BFD会话工作于echo报文方式时,仅在MPLS TE隧道的场景中支持多跳检测,其他应用的BFD会话仅支持单跳检测,两种应用均不受检测模式的控制。

echo报文封装在UDP报文中传送,该报文IP头中的源IP和目的IP均为本端设备的IP地址,其UDP目的端口号为3785。

参考文章