BFD

网络故障检测遇到的问题

  • 在无法通过硬件信号检测故障的系统中,应用通常采用上层协议本身的Hello报文机制检测网络故障
  • 常用路由协议的Hello报文机制检测时间较长,检测时间超过1秒钟。当应用在网络中传输的数据超过GB/s时,秒级的检测时间将会导致应用传输的数据大量丢失
  • 在三层网络中,静态路由本身没有故障检测机制

   

BFD概述

BFD(Bidirectional Forwarding Detection,双向转发检测)提供了一个通用的、标准化的、介质无关的、协议无关的快速故障检测机制,用于快速检测、监控网络中链路或者IP路由的转发的连通状态

BFD的优点:

  • 对相邻转发引擎之间的通道提供轻负荷、快速故障检测
  • 用单一的机制对任何介质、任何协议层进行实时检测

BFD是一个简单的"Hello"协议。两个系统之间建立BFD会话通道,并周期性发送BFD检测报文,如果某个系统在规定的时间内没有收到对端的检测报文,则认为该通道的某个部分发生了故障

   

BFD工作原理

BFD报文结构

BFD检测是通过维护在两个系统之间建立的BFD会话来实现的,系统通过发送BFD报文建立会话

报文字段解释:

  • Ver:BFD协议版本号,目前为1
  • Diag:诊断字,标明本地BFD系统最近一次会话状态发生变化的原因
  • Sta:BFD本地状态
  • P:参数发生改变时,发送方在BFD报文中置该标志,接收方必须立即响应该报文
  • F:响应P标志置位的回应报文中必须将F标志置位
  • C:转发/控制分离标志,一旦置位,控制平面的变化不影响BFD检测
  • A:认证标识,置1代表会话需要进行验证
  • D:查询请求,置位代表发送方期望采用查询模式对链路进行监测
  • M:为BFD将来支持点对多点扩展而设的预留位
  • Detect Mult:检测超时倍数,用于检测方计算超时时间
  • Length:报文长度,单位为字节
  • My Discriminator:BFD会话连接本地标识(Local Discriminator)。发送系统产生的一个唯一的、非0鉴别值,用来区分一个系统的BFD会话
  • Your Discriminator:BFD会话连接远端标识符(Remote Discriminator)。从远端系统接收到的鉴别值,这个域直接返回接收到的"My Discriminator",如果不知道这个值就返回0
  • Desired Min TX Interval:本地支持的最小BFD报文发送间隔
  • Required Min RX Interval:本地支持的最小BFD报文接收间隔
  • Required Min Echo RX Interval:本地支持的最小Echo报文接收间隔,单位为微秒(如果本地不支持Echo功能,则设置0)

BFD会话建立

BFD会话的建立有两种方式:

  • 静态建立BFD会话
  • 动态建立BFD会话

BFD通过控制报文中的本地标识符和远端标识符区分不同的会话。

静态和动态创建BFD会话的主要区别在于Local Discriminator和Remote Discriminator的配置方式不同

动态建立BFD会话时,系统对本地标识符和远端标识符的处理方式:

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

BFD会话状态

BFD会话过程中包含有三个状态:Init和Up两个用来建立会话,down用来断开会话。建立和断开会话需要三次握手确保两端系统都感知到。还有一个特殊的状态:AdminDown使会话可以通过管理手段down,在状态机中AdminDown也是Down状态。每个系统通过报文中的sta字段发送本端状态,接收报文中的sta字段了解对端状态,综合起来决定状态机的跳转

  • Down状态说明会话down。一个会话会维持在down状态直到收到对端的报文并且该报文的sta字段标志着对端状态不是Up。
    • 如果收到的是down包,状态机将从down状态跳转到init状态
    • 如果收到的是init包,状态机将从down状态跳转到Up状态
    • 如果收到的是Up包,状态机维持down状态
  • Init状态说明与远端正在通信,并且本地会话期望进入Up状态,但是远端还没回应。
    • 一个init状态的会话会维持init状态直到收到对端的init包或者Up包,就会跳转到Up状态
    • 否则,等到检测时间超时以后,便会跳转到down状态,意味着与远端的通信丢失
  • Up状态说明BFD会话成功建立,并且正在确认链路的连通性,会话会一直保持在Up状态直到链路故障或者管理down操作
    • 如果收到远端的down包或者检测时间超时会话就会从Up状态跳转到down状态
  • AdminDown意味着会话时被管理操作down的,这会导致远端系统会话进入down状态,并且一直保持down状态直到本端退出AdminDown。AdminDown并不意味着转发路径的连通性问题

BFD检测模式

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

BFD的检测模式:

  • 异步模式:本端按一定的发送周期发送BFD控制报文,检测位置为远端,远端检测本端是否周期性发送BFD控制报文
  • 查询模式:本端检测自身发送的BFD控制报文是否得到了回应

BFD检测时间

BFD会话检测时长由TX(Desired Min TX Interval),RX(Required Min RX Interval),DM(Detect Multi)三个参数决定。BFD报文的实际发送时间间隔,实际接收时间间隔由BFD会话协商决定

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

BFD缺省时间参数

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

BFD Echo功能

BFD Echo功能也称为BFD回声功能,是由本地发送BFD Echo报文,远端系统将报文环回的一种检测机制

在两台直接相连的设备中,其中一台设备支持BFD功能(R1);另一台设备不支持BFD功能(R2),只支持基本的网络层转发。为了能够快速的检测到这两台设备之间的故障,可以在支持BFD功能的设备上创建单臂回声功能的BFD会话。支持BFD功能的设备主动发起回声请求功能,不支持BFD功能的设备接收到该报文后直接将其环回,从而时间转发乱路的连通性检测功能。

   

BFD应用场景

联动功能

联动功能由检测模块、Track和应用模块三部分组成

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

静态路由与BFD联动

静态路由自身没有检测机制,如果静态路由存在冗余路径,通过静态路由与BFD联动,当主用路径故障时,实现静态路由的快速切换

静态路由与BFD联动应用广泛,如图中R1是园区网的出口路由器,R1通过两条链路分别连接ISP1ISP2,正常情况下默认路由经过的链路为指向ISP1的链路,当通往ISP1的链路出现故障的时候,BFD会话能够快速感知,并通知路由器将流量切换到指向ISP2的链路

OSPF与BFD联动

OSPF在未绑定BFD的情况下,链路故障检测时间由协议Hello机制决定,通常是秒级。通过绑定BFD,可以实现毫秒级故障检测

BFD与OSPF联动就是将BFD和OSPF协议关联起来,BFD将链路故障的快速检测结果告知OSPF协议

  1. OSPF通过自己的Hello机制发现邻居并建立连接
  2. OSPF在建立了新的邻居关系后,将邻居信息(包括目的地址和源地址等)通告给BFD
  3. BFD根据收到的邻居信息建立会话,会话建立以后,BFD开始检测链路故障
  4. 正常情况下,R1根据OSPF路径开销大小选择经过R2到达R4

BFD会话建立后周期性快速发送BFD报文,如果在检测时间内,没有收到哦BFD报文则认为该双向转发路径发生了故障,通知被服务的上层应用进行相应的处理

  1. R1R2之间链路出现故障,BFD首先快速检测到链路故障,BFD会话状态变为Down并通知R1
  2. R1处理邻居Down事件,通知本地OSPF进程邻居不可达,重新进行路由计算,选择通过R3到达R4
posted @ 2022-09-15 16:06  hongliang888  阅读(561)  评论(0编辑  收藏  举报