双向转发检测BFD介绍

概述

产生背景

为了保护关键应用,网络中会设计有一定的冗余备份链路,网络发生故障时就要求网络设备能够快速检测出故障并将流量切换至备份链路以加快网络收敛速度。

目前有些链路(如POS)通过硬件检测机制来实现快速故障检测。但是某些链路(如以太网链路)不具备这样的检测机制。此时,应用就要依靠上层协议自身的机制来进行故障检测,上层协议的检测时间都在1秒以上,这样的故障检测时间对某些应用来说是不能容忍的。某些路由协议如OSPF、IS-IS虽然有Fast Hello功能来加快检测速度,但是检测时间也只能达到1秒的精度,而且Fast Hello功能只是针对本协议的,无法为其它协议提供快速故障检测。

现有的故障检测方法主要包括以下几种:

硬件检测:例如通过SDH(Synchronous Digital Hierarchy,同步数字体系)告警检测链路故障。硬件检测的优点是可以很快发现故障,但并不是所有介质都能提供硬件检测。

慢Hello机制:通常采用路由协议中的Hello报文机制。这种机制检测到故障所需时间为秒级。对于高速数据传输,例如吉比特速率级,超过1秒的检测时间将导致大量数据丢失;对于时延敏感的业务,例如语音业务,超过1秒的延迟也是不能接受的。并且,这种机制依赖于路由协议。

其他检测机制:不同的协议有时会提供专用的检测机制,但在系统间互联互通时,这样的专用检测机制通常难以部署。

bfd技术优点

BFD(Bidirectional Forwarding Detection,双向转发检测)就是为了解决上述检测机制的不足而产生的。BFD提供了一个通用的、标准化的、介质无关、协议无关的快速故障检测机制,可以为各上层协议如路由协议、MPLS等统一地快速检测两台路由器间双向转发路径的故障。

BFD具有以下优点:
(1)对网络设备间任意类型的双向转发路径进行故障检测,包括直连物理链路、虚电路、隧道、MPLS LSP、多跳路由路径以及单向链路等。
(2)可以为不同的上层应用服务,提供一致的快速故障检测时间.
(3)提供小于1秒的检测时间,从而加快网络收敛速度,减少应用中断时间,提高网络的可靠性。

BFD技术实现

工作原理

  • BFD在两台网络设备上建立会话,用来检测网络设备间的双向转发路径,为上层应用服务。
  • BFD本身并没有邻居发现机制,而是靠被服务的上层应用通知其邻居信息以建立会话。
  • 会话建立后会周期性地快速发送BFD报文,如果在检测时间内没有收到BFD报文则认为该双向转发路径发生了故障,通知被服务的上层应用进行相应的处理。

BFD会话建立流程

在这里插入图片描述
图1 BFD会话建立流程:
(1) OSPF通过自己的Hello机制发现邻居并建立连接
(2) OSPF在建立了新的邻居关系后,将邻居信息(包括目的地址和源地址等)通告给BFD
(3) BFD根据收到的邻居信息建立会话。

BFD故障发现处理流程

在这里插入图片描述
BFD故障发现处理流程图:
(1) 被检测链路出现故障
(2) BFD检测到链路故障,BFD会话状态变为Down,拆除BFD邻居会话
(3) BFD通知本地OSPF进程BFD邻居不可达
(4) 本地OSPF进程中断OSPF邻居关系

检测方式

  • 单跳检测
    BFD单跳检测是指对两个直连系统进行IP连通性检测,这里所说的“单跳”是IP的一跳
  • 多跳检测
    BFD可以检测两个系统间的任意路径,这些路径可能跨越很多跳,也可能在某些部分发生重叠
  • 双向检测
    BFD通过在双向链路两端同时发送检测报文,检测两个方向上的链路状态,实现毫秒级的链路故障检测。(BFD检测LSP是一种特殊情况,只需在一个方向发送BFD控制报文,对端通过其他路径报告链路状况。)

BFD会话工作方式

BFD会话工作方式:

控制报文方式:链路两端会话通过控制报文交互监测链路状态。

Echo报文方式:链路某一端通过发送Echo报文由另一端转发回来,实现对链路的双向监测。

运行模式

  • BFD会话建立前模式:主动模式和被动模式:
  • 主动模式:在建立对话前不管是否收到对端发来的BFD控制报文,都会主动发送BFD控制报文;
  • 被动模式:在建立对话前不会主动发送BFD控制报文,直到收到对端发送来的控制报文;
    在会话初始化过程中,通信双方至少要有一个运行在主动模式才能成功建立起会话。
  • BFD会话建立后模式:异步模式和查询模式:
  • 异步模式:以异步模式运行的路由器周期性地发送BFD控制报文,如果在检测时间内没有收到BFD控制报文则将会话down。

  • 查询模式:假定每个系统都有一个独立的方法,确认自己连接到其他系统。这样,只要有一个BFD会话建立,系统停止发送BFD控制报文,除非某个系统需要显式地验证连接性。

报文结构

在这里插入图片描述

BFD控制报文封装在UDP报文中传送,对于单跳检测其UDP目的端口号为3784,对于多跳检测其UDP目的端口号为4784(也可配置为3784,具体参见配置任务)。

BFD echo报文与BFD控制报文格式类似(区别在于字段Desired Min TX Interval和Required Min RX Interval为空),其UDP目的端口号为3785。

BFD控制报文

BFD控制报文包括强制部分和可选认证部分。

强制部分格式如下图:
在这里插入图片描述
可选认证部分格式如下图:
在这里插入图片描述
在这里插入图片描述

BFD Echo报文

BFD Echo报文提供了一种不依赖于BFD控制报文的故障检测方法。本端发送本端接收,远端不对报文进行处理,而只是将此报文在反向通道上返回。因此BFD协议并没有对BFD Echo报文的格式进行定义,较少的要求是发送方能够通过报文内容区分会话。

BFD Echo报文采用UDP封装,目的端口号为3785,目的IP地址为发送接口的地址,源IP地址由配置产生(配置的源IP地址要避免产生ICMP重定向)。

BFD会话连接建立

BFD会话建立前有主动与被动两种模式。如果一台设备为主动模式,那么在会话建立前不管有没有收到对端发来的BFD控制报文,都会主动发送BFD控制报文。如果一台设备为被动模式,那么在会话建立前就不会主动发送BFD控制报文,直到收到对端发来的BFD控制报文才发送。

要建立BFD会话的两端中至少要有一端为主动模式才能成功建立起会话。

在这里插入图片描述

BFD会话连接建立,如上所示:

BFD使用三路握手的机制来建立会话,发送方在发送BFD控制报文时会在Sta字段填入本地当前的会话状态,接收方根据收到的BFD控制报文的Sta字段以及本地当前会话状态来进行状态机的迁移,建立会话:

  • Router A和Router B的BFD收到上层应用的通知后,发送状态为DOWN的BFD控制报文。Router B的BFD状态变化同Router A
  • Router B收到对端状态为DOWN的BFD控制报文后,本地会话状态由DOWN迁移到INIT,随后发送的BFD控制报文中将Sta字段填为2表明会话状态为INIT。Router A的BFD状态变化同Router B
  • Router A收到对端状态为INIT的BFD控制报文后,本地会话状态由INIT迁移到UP,随后发送的BFD控制报文中将Sta字段填为3表明会话状态为UP。Router B的BFD状态变化同Router A
  • BFD双方状态都为UP,会话成功建立并开始检测链路状态。

BFD会话建立方式

BFD有两种会话建立方式,即静态方式和动态方式。

静态和动态创建BFD会话的主要区别在于本地标识符(Local Discriminator)和远端标识符(Remote Discriminator)的配置方式不同。

BFD通过控制报文中的Local Discriminator和Remote Discriminator区分不同的会话。

  • 静态建立BFD会话:
    静态建立BFD会话是指通过命令行手工配置BFD会话参数,包括配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。
  • 动态建立BFD会话:
    动态建立BFD会话时,系统对本地标识符和远端标识符的处理方式如下
  • 动态分配本地标识符:当应用程序触发动态创建BFD会话时,系统分配属于动态会话标识符区域的值作为BFD会话的本地标识符。然后向对端发送Remote Discriminator的值为0的BFD报文,进行会话协商.
  • 自学习远端标识符:当BFD会话的一端收到Remote Discriminator的值为0的BFD报文时,判断该报文是否与本地BFD会话匹配,如果匹配,则学习接收到的BFD报文中Local Discriminator的值,获取远端标识符。

定时器协商

  • 会话建立前
    BFD会话建立前BFD控制报文以1秒的时间间隔周期发送以减小报文流量。
  • 会话建立后
    在会话建立后则以协商的时间间隔发送BFD控制报文以实现快速检测。
    在BFD会话建立的同时,BFD控制报文发送时间间隔以及检测时间也会通过报文交互协商确定。在BFD会话有效期间,这些定时器可以随时协商修改而不影响会话状态。BFD会话不同方向的定时器协商是分别独立进行的,双向定时器时间可以不同。

故障检测

BFD会话建立及定时器协商完成后,两端会以协商后的间隔发送BFD控制报文。每当收到BFD控制报文时,就会重置检测时间定时器,保持会话UP状态。如果在检测时间内没有收到BFD控制报文,BFD会话会迁移到DOWN状态,并通知该会话所服务的上层应用发生故障,由上层应用采取相应的措施。

本端BFD会话DOWN后,发给对端的BFD控制报文中的Sta字段就填为1,通知对端会话DOWN,对端的BFD会话也迁移到DOWN状态。

BFD单臂回声功能

BFD除了与其他协议联动使用,还有一种特殊场景,即BFD单臂回声功能。
单臂回声功能是指通过BFD报文的环回操作检测转发链路的连通性。
在两台直连设备中,其中一台设备支持BFD功能,另一台设备不支持BFD功能,只支持基本的网络层转发,此时可以使用BFD单臂回声功能来检测链路。
为了能够快速检测两台设备之间的故障,可以在支持BFD功能设备上创建单臂回声功能的BFD会话,支持BFD功能的设备主动发起回声请求报文,不支持BFD功能的设备接收到该报文后直接将其环回,从而实现转发链路的连通性检测功能。单臂回声功能只适用于单跳BFD会话。
在这里插入图片描述
如上图所示,SwitchA支持BFD功能,SwitchB不支持BFD功能。在SwitchA上配置单臂回声功能的BFD会话,检测SwitchA到SwitchB之间的单跳路径。SwitchB接收到SwitchA发送的BFD报文后,直接在网络层将该报文环回,从而快速检测SwitchA和SwitchB之间的直连链路的连通性。

bfd 应用

BFD与接口状态联动

BFD与接口状态联动提供一种简单的机制,使得BFD检测行为可以关联接口状态,提高了接口感应链路故障的灵敏度,减少了非直连链路故障导致的问题。BFD检测到链路故障会立即上报Down消息到相应接口,使接口进入一种特殊的Down状态:BFD Down状态。该状态等效于链路协议Down状态,在该状态下只有BFD的报文可以正常处理,从而使接口也可以快速感知链路故障。
在这里插入图片描述
如图所示,链路中间存在其他设备,虽然三层仍是直连,但由于实际物理线路分段,一旦链路故障,两端设备需要比较长的时间才能检测到,导致直连路由收敛慢,网络中断时间长。在SwitchA和SwitchB上配置BFD会话,配置接口联动后,当BFD检测到链路出现故障,立即上报Down消息到相应接口,使接口进入BFD Down状态。

路由协议与BFD联动

在这里插入图片描述
图7 路由协议与BFD联动组网图

两台路由器Router A、Router B通过二层交换机互连,在设备上运行路由协议,网络层相互可达。

由于通过二层交换机相连,Router A与Router B之间的链路故障可能不会导致接口DOWN,只能通过协议握手去检测。通过在Router A与Router B之间使用BFD就能快速检测出故障,路由协议得到BFD通知后可以尽快计算新的路由,从而缩短收敛时间。

bfd 和 ospf 联动

网络上的链路故障或拓扑变化都会导致路由重新计算,要提高网络可用性,缩短路由协议收敛时间非常重要。由于链路故障无法完全避免,因此,加快故障感知速度并将故障快速通告给路由协议是一种可行的方案。

缺省情况下,OSPF发送Hello报文的时间间隔为10秒钟,设备能感知到邻居故障的时间最小也是秒级。在高速的网络环境中,这将导致报文大量丢失。BFD联动OSPF可以更快的发现邻接方面出现的故障,并及时通知OSPF重新计算相关路由以便正确指导报文的转发。

BFD与OSPF联动就是将BFD和OSPF协议关联起来,通过BFD对链路故障的快速感应进而通知OSPF协议,从而加快OSPF协议对于网络拓扑变化的响应。下图显示了OSPF协议是否绑定BFD时收敛速度的数据。
在这里插入图片描述

在这里插入图片描述
如上图所示,SwitchA分别与SwitchC和SwitchD建立OSPF邻居关系,SwitchA到SwitchB的路由出接口为Interface 1,经过SwitchC到达SwitchB。邻居状态到达FULL状态时通知BFD建立BFD会话。
当SwitchA和SwitchC之间链路出现故障,BFD首先感知到并通知SwitchA。SwitchA处理邻居Down事件,重新计算路由,新的路由出接口为Interface 2,经过SwitchD到达SwitchB。

bfd和 bgp 联动

BGP协议通过周期性的向对等体发送Keepalive报文来实现邻居检测机制,但这种机制检测到故障所需时间比较长,超过1秒钟。当数据达到吉比特速率级别时,将会导致大量的数据丢失。

因此,BGP协议通过引入BFD与BGP联动功能,利用BFD的快速检测机制,迅速发现BGP对等体间链路的故障,并报告给BGP协议,从而实现BGP路由的快速收敛。

范例

下表1显示了BGP协议是否绑定BFD时收敛速度的数据。
在这里插入图片描述
在这里插入图片描述
如上图1所示,SwitchA和SwitchB分别属于AS100和AS200,两台交换机直接相连并建立EBGP连接。使用BFD检测SwitchA和SwitchB之间的BGP邻居关系,当SwitchA和SwitchB之间的链路发生故障时,BFD能够快速检测到故障并通告给BGP协议。

bird中的bfd配置

在这里插入图片描述

参考

bird 中 bfd配置:
https://bird.network.cz/?get_doc&v=20&f=bird-6.html


华为的bfd介绍:
https://info.support.huawei.com/info-finder/encyclopedia/zh/BFD.html


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值