0

「BFD」- 概念、术语

 2 years ago
source link: https://blog.k4nz.com/b0f7c8211e78adef27ec848fa5d3a82b/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

静态建立会话

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

pasted_image.png

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

动态建立会话

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

pasted_image001.png

动态建立会话时,系统对本地标识符和远端标识符的处理方式如下:
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状态机的建立和拆除都采用三次握手机制,如图所示,以确保两端系统都能知道状态的变化:
pasted_image003.png

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

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

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

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

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

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检测倍数

pasted_image006.png

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK