BFD --- 双向转发检测协议概述

本文深入解析BFD的产生背景、原理,涵盖会话建立、状态转换、检测模式与时间计算。特别介绍BFDEcho功能及联动机制,揭示了如何利用BFD优化网络连通性和故障响应速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、BFG产生背景

我们清楚,相邻硬件设备间可以感知到系统是否发生异常,而非相邻硬件检测故障通常是采用交互协议来检测网络故障例如Hello报文。但是这种交互报文检测时间间隔较长,就拿Hello报文来说,检测时间就超过一秒钟,假如传输的数据是GB/s时,在这短短的一秒,一部电影都丢失完了。以上还是可以感知到发生故障,但是如果是静态路由呢,非相邻设备根本没有交互报文检测功能,这是就会产生流量黑洞
出现问题则解决问题,BFD(Bidirectional Forwarding Detection -双向转发检测),就是为我们提供了一个通用的、标准的并且和介质、协议无关单纯的快速故障检测机制,这个协议的作用就是为了检测部署BFD中间链路转发连通状态。

二、BFD概述

BFD(Bidirectional Forwarding Detection -双向转发检测),就是为我们提供了一个通用的、标准的并且和介质、协议无关单纯的快速故障检测机制,它具有以下优点:

  • 报文很小,链路负担很轻
  • 不受任何介质的影响
  • 不受任何协议的影响
  • 在TCP/IP五层间都可以应用

三、BFD运行原理

BFD原理就是在两个系统/设备之间建立一个BFD会话通道,并且连续不断周期性的互相发送BFD检测报文(放心 报文很小),双方有一方在规定时间内没有接收到对端的检测报文就认为这个通道途径的某个部分出现了故障,就会将该通道关闭,并执行删去路由、减少/增加路径优先级等操作,保障流量重新迅速不间断转发

1.BFD会话建立

在这里插入图片描述
会话建立主要分为静态建立BFD会话和动态建立BFD会话两种方式,BFD主要是通过报文中本地标识符和远端标识符来区分不同的会话。

  • 静态建立BFD会话:就是手动对两个系统分别配置本地标识符和远端标识符,注意一系统的本地标识符一定要与另一系统的远端标识符相同
  • 动态建立BFD会话:本地标识符由系统自动分配远端标识符统一为0向外发送,当其他系统看到由远端为0的报文发过来后,会检测是否和自己处于同一个会话通道属于的话就进行学习报文中的本地标识符作为本系统的远端标识符

2.会话状态

在这里插入图片描述
状态机的建立和拆除都采用三次握手的机制,保证两端系统都可以直到状态的变化,接下来我来解读一下。

  • Down状态:收到down状态就变为init状态,收到init状态就直接变为up状态 — 收到比自己高的状态就在收到状态基础上增加一层。
  • Iinit状态:收到down状态保持不变(只接受比自己等级高的),收到init或者up状态就直接变为up。 — 收到状态比自己低级的就保持不变,收到等级或者高级就向上增加一层。
  • Up状态:收到init或者up就保持不变。 — 收到低级或者等级保持不变(down除外)。
  • 无论是init还是up状态只要是收到timer状态就直接变为down状态(因为对端无反应)。

3.BFD检测模式

在这里插入图片描述

  • 异步模式:按照一定规律周期定期发送,已保证会话状态的连通性。
  • 查询模式(蝙蝠雷达):向对端连续发送多个控制包,看是否可以得到回应。 — 一般用在对运营商系统的检测

4.BFD检测时间

在这里插入图片描述

  • 本地BFD报文实际发送时间间隔=MAX { 本地配置的发送时间间隔,对端配置的接收时间间隔 }
  • 本地BFD报文实际接收时间间隔=MAX { 本地配置的接收时间间隔 ,对端配置的发送时间间隔}
    肯定要取最大值,就好比有一个活,A干完需要两天,B干完需要三天,我们设置发送时间(工期)就要取最大值也就是三天。
    本地BFD报文实际检测时间:
  • 异步模式:本地BFD报文实际检测时间=本地BFD报文实际接收时间间隔×对端配置的BFD检测倍数
  • 查询模式:本地BFD报文实际检测时间 = 本地BFD报文实际接收时间间隔×本端配置(因为不知道对端配置 哈哈哈 )的BFD检测倍数
    注:BFD报文发送间隔默认1000毫秒,接受间隔默认1000毫秒,本地检测倍数3次

5.BFD Echo功能

在这里插入图片描述
.BFD Echo功能可以理解为蝙蝠发超声波探路,可以对其中一方不可以使用BFD功能或者其中一方不愿意和你建立BFD会话时使用。不支持BFD功能的设备收到报文后直接将其环回,从而使另外一方收到回复,达到检测链路连通性的目的。

6.联动功能简介

在这里插入图片描述

  • 监测模块负责对链路状态、网络性能等进行监测,并将探测结果通知给Track模块 。
  • Track模块收到监测模块的探测结果后,及时改变Track项的状态,并通知应用模块。
  • 应用模块根据Track项的状态,进行相应的处理,从而实现联动。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦同学学学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值