BFD协议简介

2023-11-09

1. 背景

双向转发检测BFD(Bidirectional Forwarding Detection)是一种全网统一的检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状况。
为了保护关键应用,网络中会设计有一定的冗余备份链路,网络发生故障时就要求网络设备能够快速检测出故障并将流量切换至备份链路以加快网络收敛速度。目前有些链路具备硬件检测机制来快速故障检测,但某些链路(如以太网链路)不具备这样的检测功能。这种情况下就需要上层协议自身的机制来进行故障检测。但大部分协议如OSPF,BGP等检测链路故障的速度都很慢,最快也需要1s的时间,而且这些功能只针对本协议有效,无法为其他的协议或者应用提供快速检测机制。这对于某些实时性较高的上层应用如音频,视频等是不能接受的。
BFD就是在这种背景下产生的,它提供了一个通用的标准化的介质无关和协议无关的检测机制

2. 工作原理

BFD在两台网络设备上建立会话,用来检测网络设备间的双向转发路径,为上层应用服务。会话建立后会周期性地快速发送BFD报文,如果在检测时间内没有收到BFD报文则认为该双向转发路径发生了故障,通知被服务的上层应用进行相应的处理。
BFD协议本身没有邻居发现机制,BFD邻居的创建依赖于上层的应用。根据BFD会话建立过程可以将其分为动态BFD和静态BFD。
动态BFD:是通过上层应用(例如OSPF)的邻居发现机制,有上层应用将邻居信息发送到BFD模块,BFD则根据接收到的邻居信息创建会话并建立自己的邻居。
静态BFD:是通过静态配置手动添加对端的邻居信息来创建会话,静态BFD配置完后,会定时发送BFD控制报文。只有对端接口也开启BFD的情况下并对本端的BFD报文做出正确应答后,双方建立邻居信息。

3. BFD报文结构

3.1BFD控制报文

BFD控制报文包括两部分:强制部分和可选认证部分
强制部分的报文格式是固定的,如下图所示:
在这里插入图片描述
可选认证部分根据认证的类型的不同而异,如下图所示:
在这里插入图片描述
BFD控制协议各字段代表的意义如下:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3.2BFD Echo报文

BFD
Echo报文提供了一种不依赖于BFD控制报文的故障检测方法。本端发送本端接收,远端不对报文进行处理,而只是将此此报文在反向通道上返回。因此BFD协议并没有对BFD
Echo报文的格式进行定义,唯一的要求是发送方能够通过报文内容区分会话。BFD
Echo报文采用UDP封装,目的端口号为3785,目的IP地址为发送接口的地址,源IP地址由配置产生(配置的源IP地址要避免产生ICMP重定向)。

4 BFD会话建立过程

BFD共有4种类型的控制报文维持BFD状态,分别为:

#define    BSM_AdminDown		     0
#define    BSM_Down		             1
#define    BSM_Init		             2
#define    BSM_Up		             3

BFD控制报文交互及其状态切换图如下所示: 在这里插入图片描述

5. BFD系统架构

这个系统架构包括有四部分组成(实际使用过程中,而不是纯BFD协议)。架构图如下:
…[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G4tZcBd5-1600689737899)(.https://img-blog.csdnimg.cn/20191019004058806.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3MyNjAzODk4MjYw,size_16,color_FFFFFF,t_70#pic_center)]

6.应用层bfdd数据结构

…[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kwb3Ubvk-1600689759907)(.https://img-blog.csdnimg.cn/20191019004340145.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3MyNjAzODk4MjYw,size_16,color_FFFFFF,t_70#pic_center)]

7.内核态kbfd数据结构

kbfd是开源代码,因此内核框架部分是通用的
在这里插入图片描述
kbfd维护两个哈希表的原因:
1)down状态:发送BFD报文无法知道对端鉴别值,只知道对端的IP,因此只能根据IP进行查表;
2)其他状态:已经进行了初步交互,既有对端的IP也有对端鉴别值,对端可以根据发来的鉴别值进行查表
实际是同一个哈希表,只是有两种查找方式。

8.内核态kbfd处理流程

在这里插入图片描述
内核态处理使用到的知识:
1)netlink套接字通信: 用来和应用层进行通信;
2)工作队列和工作这线程:用来定时发送报文,一个用来超时检测;
3)状态机:用来维护不同BFD会话的工作状态。
4)哈希表存储会话信息。

kbfd开源源码中的状态机代码实现个人感觉比较经典,属于常用的那种,我是在这里才正式接触到状态机的,并更新了一篇《C语言实现状态机》的博客。

8.内核态kbfd状态机流程图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9. BFD联动ospf动态路由

9.1 BFD会话建立过程

在这里插入图片描述
上图所示是一个简单的网络组网,两台设备上同时配置了OSPF与BFD,BFD会话建立过程如下所示:

  • 动态配置流程:
    (1) OSPF通过自己的Hello机制发现邻居并建立连接。
    (2) OSPF在建立了新的邻居关系后,将邻居信息(包括目的地址和源地址等)通告给BFD。
    (3) BFD根据收到的邻居信息建立会话。
    (4) 会话建立以后,BFD开始快速发送bfd控制报文,检测链路故障,并做出快速反应。
  • 静态配置流程:
    (1) 通过手动配置,直接将邻居信息(包括目的地址和源地址)通告给BFD
    (2) BFD根据收到的邻居信息建立会话。
    (3) 会话建立以后,BFD开始快速发送bfd控制报文,检测链路故障,并做出快速反应。
    目前与HA的联动采用的是静态配置方式。

9.2 BFD故障发现过程

在这里插入图片描述
(1) 被检测链路出现故障。
(2) BFD快速检测到链路故障,BFD拆除邻居会话,会话状态变为Down。
(3) BFD通知本地OSPF进程BFD邻居不可达。
(4) 本地OSPF进程中断OSPF邻居关系并根据需求切换到备用链路。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BFD协议简介 的相关文章

  • security与cas的集成(serviceProperties中的sendRenew的设置)

    在spring于security的集成中 serviceProperties的配置如下
  • File类的知识1

    File类 递归 java io File 类是文件和目录路径名的抽象表示 主要用于文件和目录的创建 查找和删除等操作 java io File类 文件和目录路径名的抽象表示形式 java把电脑中的文件和文件夹 目录 封装为了一个File类
  • python数据可视化毕业设计题目_基于Python的数据可视化

    基于 Python 的数据可视化 杨凯利 1 山美娟 2 期刊名称 现代信息科技 年 卷 期 2019 000 005 摘要 在大数据快速发展的今天 Python 丰富的工具包在科学计算 文件处 理 数据可视化等领域越来越凸显其价值 能够发
  • UWB信号对服务器有没有干扰,UWB组网定位的系统及方法技术方案

    技术实现步骤摘要 本专利技术涉及一种UWB组网定位的系统 更具体地 涉及一种UWB组网定位的系统及方法 技术介绍 UWB UltraWideband 是一种无载波通信技术 利用纳秒至微微秒级的非正弦波窄脉冲传输数据 通过在较宽的频谱上传送极
  • DEDECMS调用指定ID文章内容

    备忘自用 dede arclist idlist 113 114 115 116 channelid 1 addfields body li a href div class show h2 field shorttitle h2 p fi
  • 【华为OD】 最佳对手_贪心思维

    目录 一 题目描述 二 输入描述 三 输出描述 3 1 用例 四 题目解析 五 Java玩法 六 JavaScript玩法 一 题目描述 游戏里面 队伍通过匹配实力相近的对手进行对战 但是如果匹配的队伍实力相差太大 对于双方游戏体验都不会太
  • 1330. 翻转子数组得到最大的数组值

    贪心法 1 翻转中间 则使用 最小区间最大值 最大区间最小值 2 基准为数组值 这里不一定为正收益 2 翻转头或者尾 则位基准重新计算翻转点 基准 sum abs num i num i 1 1 lt i
  • 一阶系统的时域和频域分析

    文章目录 1 一阶系统传递函数的标准形式 2 一阶系统动态性能指标 2 1 时域响应下的性能指标 2 2 系统单位阶跃响应 2 2 其他典型输入下一阶系统的响应和动态性能 3 惯性环节 4 一阶系统的频域分析 1 一阶系统传递函数的标准形式
  • yaml for java_java操作yaml文件

    前言 YAML YAML Ain t Markup Language 也可以叫做YML 是一种人性化的数据序列化的语言 类似于XML JSON SpringBoot的配置文件就支持yaml文件 官网 语法 大小写敏感 使用缩进表示层级关系
  • 快速上手笔记,PyTorch模型训练实用教程(附代码)

    前言 自 2017 年 1 月 PyTorch 推出以来 其热度持续上升 一度有赶超 TensorFlow 的趋势 PyTorch 能在短时间内被众多研究人员和工程师接受并推崇是因为其有着
  • JAVA程序员预备知识&初识JAVA

    JAVA程序员预备知识 什么是计算机 能够按照程序运行 自动 高速处理海量数据的现代化智能电子设备 由硬件和软件组成 广泛应用在 科学计算 数据处理 自动控制 人工智能等 计算机硬件 一些物理装置按系统结构的要求构成一个有机整体 组成 CP
  • Linux 快捷键

    Linux 快捷键 文章目录 linux控制台快捷键 linux控制台快捷键 ctrl a e Ctrl Shift n 新终端 Shift Ctrl T 打开新的标签页 Shift Ctrl W 关闭标签页 Alt 数字 切换至对应的标签
  • Hive--HiveQL:查询

    4 查询 4 1 select from语句 4 1 1 基本操作 select是SQL的射影算子 from子句标识了从哪个表 视图或嵌套查询中选择记录 回顾之前创建的employees表 hive mydb gt create table
  • 【Detectron2】入门05 Schedules Faster R-CNN

    Detectron2的Learning Rate和Schedules 1x and 3x schedules 1x 16 images iterations 90 000 iterations in total with the LR re
  • 14 - Spring5 学习笔记 - 整合日志框架、@Nullable 注解

    Spirng5 框架新功能 1 整个 Spring5 框架基于 Java8 运行时兼容 JDK9 许多不建议使用的类和方法在代码库中删除 2 Spring5 框架自带了通用的日志封装 1 Spring5 已经移除了 Log4jConfigL
  • c++ 不插入重复元素但也不排序_十大经典排序算法,看这篇文章就够了

    微信公众号 小超说 如果你觉得对你有帮助 欢迎分享 如果你想系统地学习 建议在电脑端阅读 我想大家学习算法之旅的开端就是各种排序算法吧 的确 排序算法广泛的应用性以及它的简洁基础等性质是初学者的不二之选 那今天我就带着你复习回顾以下各种经典
  • Docker镜像相关操作有哪些?

    什么是Docker Docker是一个开源的应用容器引擎 它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 然后发布到安装了任何 Linux 发行版本的机器上 Docker基于LXC来实现类似VM的功能 可以在更有限的硬件资源上提

随机推荐

  • 2020年第十一届蓝桥杯省赛javab组寻找2020

    简单的模拟 向右 向下 向右下 package 算法 import java util Scanner public class 寻找20 static int N 100000 4 5 static int M 1000 5 static
  • python实现车牌识别系统

    车牌识别系统 算法参考 http www zengqiang club blog 34 GUI参考 https blog csdn net wzh191920 article details 79589506 基于opencv的模板识别来实
  • 设计模式的应用场景(9)--装饰模式

    装饰模式 定义 装饰模式以对客户端透明的方式扩展对象的功能 是继承方案的一个替代方案 提供比继承更多的灵活性 优点 能够提供比使用继承关系更加灵活的拓展对象的功能 它可以动态增加对象的功能并且可以随意组合这些功能 缺点 使用装饰模式进行设计
  • Hadoop学习之Hadoop完全分布式集群安装

    注 本文的主要目的是为了记录自己的学习过程 也方便与大家做交流 转载请注明来自 http blog csdn net ab198604 article details 8250461 要想深入的学习hadoop数据分析技术 首要的任务是必须
  • 在 Python 中生成随机字符串

    介绍生成随机字符串的几种方法 1 使用random choice 实现 import string import random number of strings 5 length of string 8 for x in range nu
  • Latex的使用

    1 语法规则 是TeX中做为命令的标志 格式 命令名 可选参数 不可省略参数 2 常用的宏包 amsmath 数学符号与公式宏包 amsfonts 数学符号与字体宏包 Ctex 支持中文的排版 gaphicx 插图处理 Xcolor 颜色处
  • Vmwarexiade镜像下载地址

    https msdn itellyou cn 复制链接在迅雷上下载
  • Reactive判断的API,toRef & toRefs,ref其他的API,customRef

    Reactive判断的API isProxy 检查对象是否是由 reactive 或 readonly创建的 proxy isReactive 检查对象是否是由 reactive创建的响应式代理 如果该代理是 readonly 建的 但包裹
  • 基于Arduino Uno的智能小车(可遥控,避障,调速)模块:L298N HC-05 HC-SR04及sg90(180度)舵机

    文章目录 一 先让小车动起来 二 加入对应模块实现对应功能 1 HC SR04及SG90舵机 2 完整程序编写 总结 一 先让小车动起来 1 用到的函数 定义引脚的输入 输出函数 pinMode pin OUT INPUT 通过使用pinM
  • jupyter 设置主题Error:Could not find a version that satisfies the requirement jupyterthemes from version

    1 jupyter设置主题的步骤 命令窗口输入 pip install jupyterthemes 具体主题讲解可参考 https www cnblogs com shanger p 12006161 html 2 遇到的问题 Could
  • QT的Tree View Model示例

    一 介绍 使用MVC架构 Tree View与Tree Widget 相比而言 需要为tree view 设置一个model 使Tree View 能有效降低内存的使用率 下面参考Qt官方提供的demo Simple Tree Model
  • SSM框架controller类正常部分页面跳转404

    一 问题 在做项目的时候 将写好的页面整合到SSM框架过程中 写好controller类 将相关页面调整过后 启动Tomcat 进入系统进行测试页面跳转问题 发现一部分页面跳转成功 一部分页面跳转失败 且跳转失败的页面是同一个目录下的 二
  • blender怎么移动骨骼_Blender

    1 打开blender可以通过 shift a 调出创建菜单 2 通过 rgs 这三个按键 可以分别对模型进行旋转移动缩放 3 shift d 可以实现复制功能 4 使用 z 键可以切换到线框模式 再按一次切换回来 5 tab 按键可以切换
  • 完全小白的pycharm深度学习调试+for循环断点条件设置

    完全小白的pycharm深度学习调试 for循环断点条件设置 写在最前面 基础方法 pycharm断点调试 控制台输入 代码中循环的debug方法 pycharm中图标的介绍 常见的Bug Debug经验 1 检查激活函数的输入值 2 检查
  • Hive往表写入数据的八种方法

    1 使用insert select 语法 insert overwrite table dest table partition dt xxxxxx selectc1 c2from src tablewhere 复制代码 select中的字
  • EC11编码器和单片机通信

    EC11编码器 EC11编码器通常又被称作为旋转编码器 一般主要是用于亮度 温度 频率 音量调节等参数控制 三只脚中的C脚接地 AB脚接上拉电阻后 当左转或右转时 AB脚就有脉冲信号输出 S1和S2脚为按压开关 按下时导通 旋转编码器的引脚
  • ARM汇编学习三

    有时 一次性加载 或存储 多个值更有效率 因此 我们需要使用LDM 载入多个值 和STM 存储多个值 这些指令基于起始地址的不同 有不同的形式 下面是我们将在本节中将会使用的代码 我们将一步一步地完成每一个指令 代码在test5 s中 da
  • [HNCTF 2022 WEEK2]ez_ssrf

    HNCTF 2022 WEEK2 ez ssrf
  • Windows下使用Linux命令 - GNUWin32 安装

    https sourceforge net projects getgnuwin32 source typ redirect 下载 GetGnuWin32 0 6 3 exe https sourceforge net projects g
  • BFD协议简介

    1 背景 双向转发检测BFD Bidirectional Forwarding Detection 是一种全网统一的检测机制 用于快速检测 监控网络中链路或者IP路由的转发连通状况 为了保护关键应用 网络中会设计有一定的冗余备份链路 网络发