「BFD」- 概念、术语

  CREATED BY JENKINSBOT

检测机制

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

建立会话

BFD 通过控制报文中的 本地标识符远端标识符 区分不同的 Session(会话);

根据 Local Discriminator 和 Remote Discriminator 的配置方式不同,会话的建立有两种方式:静态建立会话;动态建立会话:

静态建立会话

对于静态建立的会话:
1)通过命令行手工配置会话参数,包括配置本地标识符和远端标识符等;
2)然后手工下发 BFD 会话建立请求;

应用场景:单臂回声(当对方不支持 BFD 时使用)

动态建立会话

对于动态建立的会话:
1)Local Discriminator,是由触发创建会话的系统动态分配;
2)Remote Discriminator 从收到对端 BFD 消息的 Local Discriminator 的值学习而来。

动态建立会话时,系统对本地标识符和远端标识符的处理方式如下:
1)动态分配本地标识符,当应用程序触发动态创建BFD会话时,系统分配属于动态会话标识符区域的值作为BFD会话的本地标识符。然后向对端发送 Remote Discriminator=0 的BFD控制报文,进行会话协商。
2)自学习远端标识符,当BFD会话的一端收到 Remote Discriminator=0 的BFD控制报文时,判断该报文是否与本地BFD会话匹配(?),如果匹配,则学习接收到的 BFD 报文中 Local Discriminator 的值,获取远端标识符。

应用场景:通过协议驱动,需要协议程序支持 BFD 功能。比如 OSFP 的 BFD 特性,当开启后,运行 OSPF 的同时会进行 BFD 检测。

会话状态

会话有四种状态:
1)在会话过程中包含有三个状态:Init、Up 两个用来建立会话;Down 用来断开会话;
2)另外还有一个特殊状态:AdminDown,使会话可以通过管理手段 down,在状态机中 AdminDown 也是 down 状态。

Down 状态说明当前会话断开。会话将持续维持在 down 状态,直到收到对端的报文并且该报文的 sta 字段标志着对端状态不是 up 状态:
1)如果收到的是 down 报文,状态机将从 down 状态跳转到 init 状态;
2)如果收到的是 init 报文,状态机将从 down 状态跳转到 up 状态;
3)如果收到的是 up 包,状态机维持 down 状态。

Init 状态说明与远端正在通信,并且本地会话期望进入 up 状态,但是远端还没回应。一个init状态的会话会维持init状态直到收到对端的init包或者up包,就会跳转到up状态,否则等到检测时间超时以后,便会跳转到down状态,意味着与远端的通信丢失。

Up 状态说明BFD会话成功建立,并且正在确认链路的联通性,会话会一直保持在 up 状态直到链路故障或者 AdminDown 操作。如果收到远端的down包或者检测时间超时会话就会从up状态跳转到down状态。

AdminDown 意味着会话是被管理操作结束的,这会导致远端系统会话进入 down 状态,并且一直保持 down 状态直到本端退出 AdminDown 状态。AdminDown 并不意味着转发路径的连通性问题。

会话状态变化通过 BFD.State 字段传递。
每个系统通过报文中的sta域发送本端状态,接收报文中的sta域了解对端状态,综合起来决定状态机的跳转。
建立和断开会话都需要三次握手确保两端系统都感知到。

建立机制

BFD状态机的建立和拆除都采用三次握手机制,如图所示,以确保两端系统都能知道状态的变化:

状态变化

系统根据自己本地的会话状态和接收到的对端 BFD 报文驱动状态改变,如图所示:

检测模式

BFD的检测模式有异步模式和查询模式两种。

异步模式和查询模式的本质区别:检测的位置不同,异步模式下本端按一定的发送周期发送BFD控制报文,检测位置为远端,远端检测本端是否周期性发送BFD控制报文;查询模式下本端检测自身发送的BFD控制报文是否得到了回应。

异步模式

在系统间,相互周期性地发送 BFD 控制包,如果某个系统在检测时间内没有收到对端发来的BFD控制报文,就宣布会话为 Down 状态;

查询模式

在需要验证连接性的情况下,系统连续发送多个 BFD 控制包,如果在检测时间内没有收到返回的报文就宣布会话为 Down 状态;

检测时间

BFD 会话检测时长由 TX(Desired Min TX Interval),RX(Required Min RX Interval),DM(Detect Multi)三个参数决定。

BFD 报文的 实际发送时间间隔、实际接受时间间隔 参数,都是由 BFD 会话协商决定:
1)本地BFD报文实际发送时间间隔=MAX(本地配置的发送时间间隔,对端配置的接收时间间隔)
2)本地BFD报文实际接收时间间隔=MAX(对端配置的发送时间间隔,本地配置的接收时间间隔)

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

BFD缺省时间参数
BFD报文发送间隔默认1000毫秒,接受间隔默认1000毫秒,本地检测倍数3次。
BFD会话等待恢复时间0秒,会话延迟Up时间0秒。

检测超时倍数,用于检测方计算检测超时时间。
1)查询模式:采用本地检测倍数。
2)异步模式:采用对端检测倍数。