BFD的原理及配置

2023-05-16

BFD

简述

BFD(Bidirectional Forwarding Detection,双向转发检测)是一个通用的、标准化的、介质无关和协议无关的快速故障检测机制,用于检测IP网络中链路的连通状况,保证设备之间能够快速检测到通信故障,以便能够及时采取措施,保证业务持续运行。

在现有网络中,通常采用以下几种方法检测链路故障:

  • 硬件检测:通过硬件检测信号,如SDH告警,检测链路硬件故障。
  • Hello报文机制:如果无法通过硬件信号检测故障,通常采用路由协议的Hello报文机制。这种机制检测到故障所需时间比较长,超过1秒钟。当数据达到吉比特速率级时,这么长的检测时间将导致大量数据丢失。
  • 在小型网络中,如果没有部署路由协议,就要用到其他检测机制。这对系统间互连互通定位故障造成困难。全网统一的检测机制BFD就是为解决上述问题产生的。

BFD可以为各种上层协议(如路由协议、MPLS、PIM等)快速检测两台设备间双向转发路径的故障。上层协议通常采用Hello报文机制检测故障,所需时间为秒级,而BFD可以提供毫秒级检测。

实际应用中,BFD可以用来进行单跳和多跳检测:

  • 单跳检测:用于两个直连的路由器间进行IP连通性检测,这里的单跳,仅代表IP的一跳。(Ps Echo也仅限于单跳检测中)

  • 多跳检测:用于两个非直连间的三层设备间,任意路径的链路情况(Ps 这里的路径可以跨域多跳)

BFD需要双方都支持BFD,且双方建立BFD会话,一台不支持BFD会话的情况,那么就是BFD Echo。


会话建立

BFD通过控制报文中的本地标识符(Local Discriminator)和远端标识符(Remote Discriminator)来区分一个系统中的多个BFD会话。

  • 手工指定标识符的静态BFD会话

    如果本段采用手工指定标识符,则对端也必须手工指定标识符。

  • 标识符自协商的静态BFD会话

    如果本端采用静态标签自协商,则对端既可以配置静态标识自协商,也可以配置成动态BFD。

  • 协议触发的动态BFD会话

    动态分配本端标识符和自学习远端标识符。

  • 当本端即配置了静态标识符自协商,又配置了动态BFD时,按照如下规则处理:

    如果二者共用同一个四元组(源目地址、出接口和VPN索引),将采用动态会话,共享对话的流程,将静态标识符自协商类型和动态会话公用。

    如果先配置了动态BFD(此时动态BFD配置名称为XXX),然后再配置标识符自协商的静态BFD,将更新配置名称为静态BFD名称。

    共用会话的参数采用共用会话的最小值。

BFD 报文格式

r8XdG4.png

字段长度含义
013bits版本号,目前为1
025bits诊断码,标明本地BFD系统最近一次会话状态发生变化的原因,取值及含义看下方详解
032bits本地状态,0 Admindown 1Down,2:Init 3:up
046bitsMessage Flags,消息Flag位,取值及含义看下方详解。
058bits检测超时倍数,默认为3 用于检测方计算检测超时时间。注:异步模式中采用对端检测倍数,查询模式为本段检测倍数
068bits报文长度,该单位为字节
0732bitsBFD会话连接本地标识符。发送系统产生的一个唯一的,非0的鉴别值,来区别一个系统的多个BFD会话。
0832bitsBFD会话连接远端标识符。从远端系统接收到的鉴别值,该域值直接返回到My Discri。如果无法识别,则返回0。
0932bits本地支持的最小BFD报文发送间隔,单位:微秒
1032bits本地支持的最小BFD报文接收间隔,单位:微秒
1132bits本地支持的最小Echo报文接收间隔,单位:微秒(如果本地不支持Echo功能,则设置为0)

有关诊断码的详解
0 – No Diagnostic
1 – Control Detection Time Expired
2 – Echo Function Failed
3 – Neighbor Signaled Session Down
4 – Forwarding Plane Reset
5 – Path Down
6 – Concatenated Path Down
7 – Administratively Down
8 – Reverse Concatenated Path Down
9-31 – Reserved for future use
Message Flags;
	Poll:会话参数变化时置位(P置位)
	Fin :如果收到的BFD P置位,则采用F位应答
	Con :表明BFD实现是独立于控制平面的
	Auth:认证,表明会话是否配置了认证
	Demad:表明是否采用查询模式,默认或0 则为异步模式
	Multipoint:为了支持MP-PPP的预留位

检测模式

异步模式和查询模式,查询模式已淘汰,故仅了解异步即可

异步模式(常用):

BFD的主要操作模式为异步模式。异步模式下,设备之间相互周期性发送BFD控制报文,如果某个设备连续几个报文都没有接收到BFD控制报文,则将BFD的回环状态置为Down。

BFD单臂回声Echo

BFD需要检测链路的两台设备上,均支持BFD功能,如果对端不支持BFD功能,那么可以通过单臂Echo,来达成链路检测的目的。支持BFD功能的设备主动发起Echo请求功能,不支持BFD功能的设备(即对端)接收到该报文后,直接将其环回,从而实现转发链路的连通性检测功能。

**注:**单臂回声只适用于单跳BFD会话中。

BFD与接口状态联动

当直连链路中间存在传输设备时,与接口本身的链路协议故障检测机制相比,BFD能够更快地检测到链路故障。另外对于Eth-Trunk或VLANIF等逻辑接口来说,链路协议状态是由其成员接口的链路协议状态决定的。

因此,为了将BFD检测结果更快地通告到应用程序,在设备接口管理模块中,为每个接口增加了一个属性,即BFD状态,指的是与该接口绑定的BFD会话的状态,系统根据接口的链路状态、协议状态和BFD状态决定接口的状态,并将结果通告给应用程序。

BFD会话状态与接口状态联动功能是指当BFD会话的状态变化时,直接修改接口的BFD状态。

  • 当BFD会话状态变为Down时,与其绑定的接口的BFD状态变为Down,然后将接口状态通告给接口上的应用。
  • 当BFD会话的状态变为Up时,与其绑定的接口的BFD状态变为Up。

该功能针对绑定出接口且使用缺省组播地址进行检测的单跳BFD会话。

BFD配置

BFD静态单跳检测配置

r8XaiF.png

配置如下:

[Huawei]bfd #创建BFD配置视图
[Huawei-bfd]quit
[Huawei]bfd 1 bind peer-ip 1.1.1.2 source-ip 1.1.1.1 #配置BFD会话绑定信息
[Huawei-bfd-session-1]discriminator local 1 #配置BFD会话的本地标识符
[Huawei-bfd-session-1]discriminator remote 2 #配置BFD会话的远端标识符
[Huawei-bfd-session-1]commit #用于提交会话配置
[Huawei-bfd-session-1]di th
[V200R003C00]
#
bfd 1 bind peer-ip 1.1.1.2 source-ip 1.1.1.1
 discriminator local 1
 discriminator remote 2
 commit
#
AR1上配置如上,AR2配置相反即可。

说明:配置在AR1上进行,AR2上配置有默认路由指向回来,要求访问AR2上的环回接口 8.8.8.8/32

BFD配置单臂Echo功能且联动静态路由

r8XaiF.png

为了偷懒,我直接拿单跳检测的图来了。

[Huawei]bfd #创建BFD配置视图
[Huawei-bfd]quit
[Huawei]bfd 2 bind peer-ip 2.2.2.2 interface GigabitEthernet0/0/1 one-arm-echo #配置echo功能
[Huawei-bfd-session-2]discriminator local 10 #配置BFD会话的本地标识符
Echo无需指定远端标识符,且采用Echo就是因为远端不支持,所以就算是指定了远端标识符,也没用。
[Huawei-bfd-session-2]commit #用于提交会话配置
[Huawei-bfd-session-2]quit

[Huawei]ip route-static 0.0.0.0 0.0.0.0 g0/0/1 2.2.2.2 track bfd-session 2
#配置默认路由,且绑定BFD,若Echo功能无法建立,那么默认路由也不会出现在IP路由表中。

BFD多跳检测

r8XNIU.png

[AR1]dis current-configuration 
[Huawei]bfd #创建BFD配置视图
[Huawei-bfd]quit
[Huawei]bfd 1 bind peer-ip 3.3.3.3 #配置BFD绑定远端IP地址
[Huawei-bfd-session-1]discriminator local 10 #配置BFD会话的本地标识符
[Huawei-bfd-session-1]discriminator remote 10 #配置BFD会话的本地标识符
[Huawei-bfd-session-1]commit #用于提交会话配置
注:无论中间采用静态,OSPF还是什么协议,能够保证去往对端的连通性即可。

思维脑图

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

BFD的原理及配置 的相关文章

  • MFC单文档程序不设置文档标题

    对于MFC单文档 多文档估计也是一样 程序来说 xff0c 创建一个工程后不做任何修改 xff0c 直接编译运行 xff0c 会发现程序标题 xff0c 除了带有程序名称之外 xff0c 还带有 未命名 xff0c 整个标题的样子差不多是这
  • Mvc Web工程中加入Web Api后,Web Api接口无法访问

    用vs2015 C 建立了一个web mvc工程 xff0c 实现了一些简单的功能 xff0c 包括对后台数据库的访问 xff0c 添加 修改数据等普通功能 xff0c 其中有好几个controller xff0c 比如用户管理 任务添加修
  • OpenMP与OpenMPI介绍与简单程序编写

    首先说一下OpenMP与OpenMPI的区别 OpenMP主要是在单机上进行并行 xff0c 是基于共享内存的 xff0c 共享内存就是多个核 xff08 包括单CPU多核和多CPU多核 xff08 都是单机 xff09 xff09 共享一
  • Web Api获取POST中的body数据

    一个普通的web api xff0c 大佬说为了安全 xff0c 上传的参数数据一般是放在Body中的 xff0c 所以后台也要从body中来拿参数 xff0c 这个确实好一些 xff0c 在地址栏中看不到参数 xff0c 相对来说 xff
  • MFC视图中的OnPaint()更新

    今天弄了个工具 xff0c vs2015 mfc 单文档结构的工程 xff0c 没有选择 34 文档 视图体系结构支持 34 xff0c 因为我不需要文档 xff0c 只需要有个视图就行了 后台有个从网络接收数据的服务 xff0c 当收到数
  • vs中加入.h文件后改名为.cpp后,其中的函数无法被链接

    这个问题一般碰不到 一个项目 xff0c 是vs2015 c 43 43 win32类型的 xff0c 项目不大 xff0c 大约有10来个源文件 xff0c 一切都是正常的 后来由于需要添加md5加密 xff0c 所以就从别的项目中拿了一
  • windows下编译opencv 3.4.0

    为了方便后期的调试 xff0c 自己动手编译opencv3 4 0 xff0c 这样有需要的时候还可以自己修改修改源代码 通常来说 xff0c 编译32位比较简单 xff0c 直接用cmake生成编译的工程就行了 xff0c 但64位就比较
  • opencv添加的新接口clearVec()的实现

    自己编译的opencv xff0c 之前文章有说添加了这个接口 xff0c 也有上传3 3 0版本添加这个接口之后编译好的库 xff0c 但是没有把实现过程展现出来 xff0c 导致有些朋友问我如何实现的 xff0c 今天把这个实现放出来
  • Unity 3D代码在vs中无法自动提示的解决办法

    我安装Unity 3D后 xff0c 建立一个工程 xff0c 采用vs2019来编写代码 xff0c 发现没有自动提示功能 xff0c 根据网上说的 xff0c 要在unity中选择vs2019做为编辑器 xff0c 我也选择了 xff0
  • Arduino的全局变量的单独定义

    Arduino语言和C语言很像 xff0c 比如先定义变量再使用 xff0c 也可以采用 define 进行一些预定义等等 xff0c 但又有一些不同 当一个文件中的代码理过多时 xff0c 如果想把它们分开成多个文件 xff0c 则涉及到
  • 苏泊尔电饭煲不工作的维修

    本篇文章与其说是维修 xff0c 倒不如说成是 拆 xff0c 因为维修相对容易 xff0c 但想拆开却很艰难 xff0c 大部分的时间都花在了拆的工作上面 老家伙的样子如下 型号为 xff1a CYSB50FC99 100 xff0c 铭
  • 萨克斯吹不响的解决办法

    刚开始吹萨克斯 xff0c 发现总是吹不响 看各种入门的文章 xff0c 很多都强调口型的重要性 xff0c 各文章说得也都差不多 xff0c 我仔细捉摸 xff0c 不断尝试 xff0c 似乎还是不得要领 特别是安装好之后 xff0c 很
  • webpack是什么

    一 webpack是什么 webpack 是一个用于现代 JavaScript 应用程序的静态模块化打包构建工具 模块化 xff1a 服务端Common js xff08 module exports require xff09 浏览器端E
  • OLED显示秒表

    OLED显示秒表 include stm32f10x h include sys h include delay h include relay h include oled0561 h include led h include key
  • IP和MAC的通俗理解

    首先看下为什么有IP地址 xff0c 借鉴大佬的帖子 https showme codes 2018 05 17 understand mac ip 若有侵权 xff0c 即刻删除 IP和MAC都是为了确定一个地址 xff0c 区别在于 I
  • 图像特征提取三大法宝:HOG特征、LBP特征、Haar-like特征

    转自http dataunion org 20584 html xff08 一 xff09 HOG特征 1 HOG特征 xff1a 方向梯度直方图 xff08 Histogram of Oriented Gradient HOG xff09
  • 中英文环境配置 /etc/environment

    lwg 64 anima cat etc environment 中文界面配置 LANGUAGE 61 34 zh CN zh en US en 34 LC ALL 61 zh CN UTF 8 LANG 61 zh CN UTF 8 GS
  • SDN你必须知道的十大问题——SDN有哪些开源项目

    SDN之所以能够发展的如此之快 xff0c 其中开源社区的贡献不容忽视 随着SDN 各类社区的不断发展状大 xff0c 开源项目也在不断增多 xff0c 从控制器到交换机再到网络虚拟化 xff0c 开源项目一度让小编眼花缭乱 可能你熟悉Op
  • 使用Eclipse编译运行MapReduce程序 Hadoop2.6.0/Ubuntu

    上篇介绍了使用命令行编译打包运行自己的MapReduce程序 xff0c 使用 Eclipse 更加方便 要在 Eclipse 上编译和运行 MapReduce 程序 xff0c 需要安装 hadoop eclipse plugin xff
  • windows远程连接阿里云ubuntu(问题集合)

    w 阿里云轻量应用服务器简单图形化界面以及VNC安装使用 橘游静的博客 CSDN博客 成功部署如上 xff1a 灰屏问题解决方法如下 xff1a vncviewe连接ubuntu系统显示灰屏解决方案 jx18080136806的专栏 CSD

随机推荐