国家 / 地区

BFD技术白皮书-6W100

手册下载

BFD技术白皮书

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Copyright © 2019 新华三技术有限公司 版权所有,保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。

除新华三技术有限公司的商标外,本手册中出现的其它公司的商标、产品标识及商品名称,由各自权利人拥有。

本文中的内容为通用性技术信息,某些信息可能不适用于您所购买的产品。



概述

1.1  产生背景

网络设计时,通常使用冗余备份链路来保护关键应用。网络发生故障时,需要设备能够快速检测出故障,并将流量切换至备份链路以加快网络收敛速度。目前有些链路(如POS)通过硬件检测机制来实现快速故障检测。但是某些链路(如以太网链路)不具备这样的检测机制。此时,应用就要依靠上层协议自身的机制来进行故障检测,上层协议的检测时间都在1秒以上,这样的故障检测时间对某些应用来说是不能容忍的。某些路由协议如OSPFIS-IS虽然有Fast Hello功能来加快检测速度,但是检测时间也只能达到1秒的精度,而且Fast Hello功能只是针对本协议的,无法为其它协议提供快速故障检测。

1.2  技术优点

BFD协议提供了一个通用的、标准化的、介质无关的、协议无关的快速故障检测机制。具有以下优点:

·     对网络设备间任意类型的双向转发路径进行故障检测,包括直连物理链路、虚电路、隧道、MPLS LSP、多跳路由路径以及单向链路等。

·     可以为不同的上层应用服务,提供一致的快速故障检测时间。

·     提供毫秒级的检测速度,从而加快网络收敛速度,减少应用中断时间,提高网络的可靠性。

BFD技术实现

2.1  原理简介

BFD在两台网络设备上建立会话,用来检测网络设备间的双向转发路径,为上层应用服务。BFD本身并没有发现机制,而是靠被服务的上层协议通知来建立会话。上层协议在建立新的邻居关系后,将邻居的参数及检测参数(包括目的地址和源地址等)通告给BFDBFD根据收到的参数建立BFD会话。会话建立后会周期性地快速发送BFD报文,如果在检测时间内没有收到BFD报文则认为该双向转发路径发生了故障,并通知该会话所服务的上层应用发生故障,由上层应用采取相应的措施。下面以OSPFBFD联动为例,简单介绍会话工作流程。

(3)1所示,上层应用与BFD联动触发建立会话的流程为:

(1)     OSPF通过自己的Hello机制发现邻居并建立连接;

(2)     OSPF在建立了新的邻居关系后,将邻居信息(包括目的地址和源地址等)通告给BFD

(3)     BFD根据收到的邻居信息建立会话。

图1 BFD会话建立流程图

 

2所示,BFD检测到链路故障通知上层应用的流程为:

(1)     BFD检测到链路故障,BFD邻居不可达,BFD会话状态变为Down

(2)     BFD通知本地OSPF进程BFD邻居不可达;

(3)     本地OSPF进程中断OSPF邻居关系。

图2 BFD故障发现处理流程图

 

根据使用报文的不同,分为echo报文方式的BFD会话和控制报文方式的BFD会话,下面将分别对这两种方式进行介绍。

2.2  echo报文方式的BFD会话

2.2.1  BFD echo报文

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

BFD协议并没有对BFD echo报文的格式进行定义,唯一的要求是发送方能够通过报文内容区分会话。

2.2.2  BFD会话的建立

本端发送echo报文建立BFD会话,对链路进行检测。对端不建立BFD会话。

2.2.3  BFD会话的检测机制

本端发送echo报文,对端只需把收到的echo报文转发回本端。如果本端在检测时间内没有收到对端转发回的echo报文,则认为会话down

2.3  控制报文方式的BFD会话

2.3.1  BFD控制报文

BFD控制报文封装在UDP报文中,源端口号的范围为4915265535,对于单跳检测其UDP目的端口号为3784,对于多跳检测其UDP目的端口号为4784

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

图3 BFD控制报文

 

 

BFD控制报文各字段含义如1所示。

表1 BFD控制报文各字段含义

字段

含义

Vers

BFD协议版本号,目前版本号为1

Diag

诊断码,表明发送方最近一次会话Down的原因

Sta

发送方BFD会话当前状态,取值为:0代表AdminDown1代表Down2代表Init3代表Up

P

会话参数变化时置位

F

如果收到的BFD控制报文P字段置位,则将下一个发送的BFD控制报文的F字段置位作为应答

C

该字段置位表明BFD的实现是独立于控制平面的

A

该字段置位表明报文包含认证部分,会话需要进行认证

D

该字段置位表明发送方希望以查询模式运行,不置位表明不希望以查询模式运行或不支持查询模式

R

保留位,发送时设为0,接收时忽略该字段

Detect Mult

检测时间倍数

Length

BFD控制报文长度,单位为字节

My Discriminator

发送方产生的一个唯一非0值,用来标识不同的BFD会话

Your Discriminator

如果已经收到会话邻居发送的BFD控制报文则该值为收到报文中的My Discriminator,否则为0

Desired Min TX Interval

发送方支持的最小BFD控制报文发送时间间隔,单位为微秒。

Required Min RX Interval

发送方支持的最小BFD控制报文接收时间间隔,单位为微秒

Required Min Echo RX Interval

发送方支持的最小BFD Echo报文接收时间间隔,单位为微秒。为0表示不支持BFD Echo报文

Auth Type

认证类型

Auth Len

可选认证部分长度,包括Auth TypeAuth Len字段,单位为字节

Authentication Data

认证数据区

 

2.3.2  BFD会话建立过程

1. BFD会话的状态机迁移机制

BFD会话有三种状态,分别为:DOWNINITUPINITUP用来建立会话,DOWN用来断开会话。另外,还有一个特殊状态:ADMIN DOWN,通过管理手段使本端系统阻止建立BFD会话时,BFD会话状态为ADMIN DOWN。在状态机中ADMIN DOWN也是DOWN状态。状态机迁移机制如4所示。

图4 BFD会话状态机迁移机制

 

2. BFD会话的建立

BFD会话建立前,通过改变BFD会话的运行模式可以控制发送BFD控制报文的方式:

·     主动模式:在建立会话前不管是否收到对端发来的BFD控制报文,都会主动发送BFD控制报文;

·     被动模式:在建立会话前不会主动发送BFD控制报文,直到收到对端发送来的控制报文。

通信双方至少要有一方运行在主动模式才能成功建立起BFD会话。

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

图5 BFD会话建立过程

 

5所示,以两端均为主动模式的会话建立过程为例,说明BFD如何通过报文交互和状态机的变化建立会话,一端主动模式一端被动模式的会话建立过程基本相同:

(1)     Router ARouter BBFD收到上层应用的通知后,发送状态为DOWNBFD控制报文。

(2)     Router B收到对端状态为DOWNBFD控制报文后,本地会话状态由DOWN迁移到INIT,随后发送的BFD控制报文中将Sta字段填为2表明会话状态为INITRouter ABFD状态变化同Router B

(3)     Router A收到对端状态为INITBFD控制报文后,本地会话状态由INIT迁移到UP,随后发送的BFD控制报文中将Sta字段填为3表明会话状态为UPRouter BBFD状态变化同Router A

(4)     BFD双方状态都为UP,会话成功建立并开始检测链路状态。

(5)     如果本端BFD会话DOWN,将会向对端发送Sta字段填为1BFD控制报文,通知对端会话DOWN,对端的BFD会话也迁移到DOWN状态。

2.3.3  定时器协商

1. 定时器简介

在建立BFD会话的过程中,可以通过报文交互协商的定时器包括:

·     BFD控制报文的发送时间间隔:BFD会话建立前,发送时间间隔至少为1秒,具体发送时间间隔与设备的型号有关,部分设备上会话数量越多发送的间隔越大。这样可以减小报文流量;在会话建立后,则以协商的时间间隔发送BFD控制报文,以实现快速检测。

·     检测时间:每当收到BFD控制报文时,就会重置检测时间定时器,保持会话UP状态。如果在检测时间内没有收到BFD控制报文,BFD会话会迁移到DOWN状态,并通知该会话所服务的上层应用发生故障,由上层应用采取相应的措施。

2. 定时器协商机制

BFD会话协商时,定时器值的选取原则为:

·     BFD控制报文发送时间间隔=MAX本端Desired Min TX Interval对端Required Min RX Interval,也就是说比较慢的一方决定了发送频率。

·     检测时间=对端BFD控制报文中的Detect Mult×MAX(本端Required Min RX Interval,对端Desired Min TX Interval)。

BFD会话不同方向的定时器协商是分别独立进行的,双向定时器时间可以不同。

BFD会话有效期间,控制报文发送时间间隔和检测时间可以随时协商修改而不影响会话状态。修改原则为:

·     如果加大本端Desired Min TX Interval,那么本端实际发送BFD控制报文的时间间隔必须要等收到对端F字段置位的报文后才能改变,这是为了确保在本端加大BFD控制报文发送时间间隔前对端已经加大了检测时间,否则可能导致对端检测定时器错误超时。

·     如果减小本端Required Min RX Interval,那么本端检测时间必须要等收到对端F字段置位的报文后才能改变,这是为了确保在本端减小检测时间前对端已经减小了BFD控制报文发送间隔时间,否则可能导致本端检测定时器错误超时。

·     然而如果减小Desired Min TX Interval,本端BFD控制报文发送时间间隔将会立即减小;加大Required Min RX Interval,本端检测时间将会立即加大。

下面详细介绍参数改变后定时器的协商过程。如6所示,Router ARouter B建立BFD会话,双方Desired Min TX IntervalRequired Min RX Interval(下面简称为TXRX)都为100msDetect Mult都为3。根据定时器协商规则,Router A的发送时间间隔为Router ATXRouter BRX中的最大值也就是100msRouter B的发送时间间隔也是100ms,双方的检测超时时间都为300ms

如果此时将Router ATXRX加大到150 ms

(1)     Router A比较本端的RX150ms)和Router BTX100ms),从而将本端检测时间改为450ms。同时向对端发送P字段置位的BFD控制报文(TXRX均为150ms)。

(2)     Router B收到报文后,将收到报文中的RX与本端的TX进行比较,由于RX较大,故Router B的发送间隔改为150ms。经过比较本端RX和对端的TX,从而将检测时间也增大到450ms。调整完成后Router A回复F字段置位的BFD控制报文(TXRX均为100ms)。

(3)     Router A收到对端发来F字段置位的控制报文。根据报文中的RX与本端的TX进行比较计算出新的时间间隔为150ms

(4)     定时器协商完成,双方的发送间隔和检测时间分别为150ms450ms

图6 BFD检测时间协商

 

2.3.4  BFD会话的检测机制

BFD会话建立后,两端通过周期性发送控制报文对链路进行检测。

BFD支持两种检测模式:

·     异步模式:设备周期性发送BFD控制报文,如果在检测时间内没有收到对端发送的BFD控制报文,则认为会话down

·     查询模式:

¡     本端的BFD会话工作在查询模式时,本端设备会向对端发送D比特位置1BFD控制报文,对端(缺省为异步模式)收到该报文后将停止周期性发送BFD控制报文。

¡     如果通信双方都是查询模式,则双方都停止周期性发送BFD控制报文。当需要验证连通性的时候,设备会以协商的周期连续发送几个P比特位置1BFD控制报文。如果在检测时间内没有收到返回的报文,就认为会话down;如果收到对方回应的F比特位置1的报文,就认为连通,停止发送报文,等待下一次触发查询。

¡     当系统中的BFD会话数量较多时,采用查询模式可防止周期性发送BFD控制报文的开销对系统的正常运行造成影响。

控制报文方式的BFD会话还可以通过回声功能辅助进行故障检测。回声功能启动后,会话的一端周期性地发送BFD echo报文,同时自动降低控制报文的接收速率,减少对带宽资源的消耗。对端不对BFD echo报文进行处理,而只将此报文转发回发送端。如果发送端连续几个echo报文都没有接收到,会话状态将变为DOWN

回声功能只可以检测直连网段故障,即BFD echo报文是单跳发送。

SBFD技术实现

3.1  原理简介

SBFDSeamless BFD,无缝BFD)是一种单向的故障检测机制,其检测速度比BFD更快速,适用于仅一端需要进行链路状态检测的情况,如MPLS TE隧道和使用LDP动态建立LSP的场景。

3.2  运行机制

SBFD会话中,设备的角色分为InitiatorReflector

·     Initiator通过周期性发送SBFD控制报文来检测网络节点到远端实体的链路是否可达。InitiatorSBFD报文注入到MPLS TE隧道或LDP LSP中,由Initiator发起SBFD会话并维护SBFD会话的状态信息。

·     Reflector监听到达本地实体的SBFD控制报文,并发送SBFD控制报文类型的响应报文给Initiator

7所示,作为InitiatorRouter A通过基于SRSegment Routing,段路由)建立的MPLS TE隧道,向作为ReflectorRouter E发送SBFD控制报文。Router A只要能够收到Router E发送的SBFD控制报文,即认为从Router ARouter ESRLSP路径可达。

图7 SBFDInitiatorReflector

 

3.3  应用限制

Initiator上指定的SBFD会话的远端标识符必须为Reflector上手工指定的SBFD会话本地标识符。否则,当Reflector收到Initiator发送的SBFD控制报文后,发现报文中携带的远端标识符不是自己的本地标识符时,不会发送响应报文给Initiator

Comware实现的技术特色—硬件BFD技术

4.1  产生背景

软件BFD是指BFD检测过程中的报文收发、BFD会话状态机的维护完全依赖CPU来处理。软件BFD会极大的消耗CPU能力。同时,受CPU性能影响,能够支持的BFD会话规格较小,无法用于大规格BFD会话需求的应用场景。

硬件BFD将发送报文、接收报文以及故障检测等消耗CPU性能的功能转移到硬件芯片上处理,从而提升CPU的利用率,以便支持大规格的BFD会话。

4.2  运行机制

对于echo报文方式的BFD会话,第一次收到转发回来的echo报文后,BFD会话就会尝试转移到硬件芯片。如果检测到硬件芯片可以支持BFD,系统会通知软件处理成功,软件不再维护BFD会话。如果检测到硬件芯片不支持BFD,系统会通知软件处理失败,仍然由软件维护BFD会话。

控制报文方式的BFD会话状态需要通过控制报文进行协商,硬件芯片的功能比较简单,不能完成BFD会话协商功能。因此在会话状态UP之前,需要通过CPU维护。会话UP之后,会尝试转移到硬件芯片。如果系统检测到硬件芯片可以支持BFD,会通知软件处理成功,软件不再维护BFD会话。如果系统检测到硬件芯片不支持BFD,会通知软件处理失败,仍然由软件维护BFD会话。如果需要调整会话的各种参数,则由软件进行协商。

为了支持大规格BFD会话的并发协商能力,在协商定时器时,硬件BFD会话有一些特殊的处理:

(1)     本端在DOWN状态收到INIT报文,或者在INIT状态收到UP报文后,BFD会话变成UP状态,并开始向对端发送P字段置位的报文。报文中携带的会话发送时间间隔、接收时间间隔和检测倍数都设置为设备支持的最大值。

(2)     对端收到P字段置位的报文时,回应F字段置位的报文。

(3)     当本端收到对端回应的F字段置位的报文,表明对端已经按照最大值调整好,此时开始尝试将发送时间间隔、接收时间间隔和检测倍数下调到配置的值,并向对端发送新的P字段置位的报文。报文中携带的发送时间间隔、接收时间间隔和检测倍数为配置的值。由于发送时间间隔变小,因此本端报文的发送时间间隔调整为MAX(配置的发送时间间隔,上一次收到的对端发送时间间隔);测时间调整为MAX(最大接收时间间隔,对端接收时间间隔)×本端检测倍数。

(4)     对端收到新的P字段置位的报文时,回应F字段置位的报文。

(5)     当本端收到对端回应的新的F字段置位的报文,表明对端已经按照P字段置位的报文中携带的发送时间间隔、接收时间间隔和检测倍数调整好了实际发送时间间隔和检测时间。此时本端检测时间调整为MAX(配置的接收时间间隔,对端接收时间间隔)×本端检测倍数。

(6)     如果本端未收到对端回应的F字段置位的报文,会持续向对端发送P字段置位的报文,在此期间定时器的值为发起协商前的值。直到收到对端回应的F字段置位的报文,协商过程才能结束,BFD按照协商后的结果调整定时器的值。

4.3  应用限制

目前,硬件BFD存在如下限制:

·     硬件芯片对BFD会话的发送时间、接收时间和检测倍数有一定的限制,比如发送时间、接收时间可能要求必须是10ms的整数倍。

·     暂不支持对BFD报文进行认证。

·     硬件BFD的协商较普通BFD的协商流程复杂,因此耗时更久,如果在协商未完成之前链路发生故障,可能导致检测时间较长。

典型组网应用

5.1  路由协议与BFD联动典型组网应用

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

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

图8 路由协议与BFD联动组网图

 

5.2  快速重路由与BFD联动典型组网应用

随着网络的快速发展,IP网络越来越多的承载语音、视频等多种业务,这些业务对网络的高可靠性提出了更高的要求,从而运营商网络要求更快的收敛速度。

BFD应用于路由协议以及路由协议快速收敛技术的使用虽然很大程度提高了收敛速度,但还是无法满足语音、视频等新业务对业务中断时间的要求。

而快速重路由和BFD联动技术可以很好的满足这种要求,如9所示,通过提前计算备用路径,快速发现主用路径故障,并在主用路径故障时不依赖于控制平面的收敛而直接在转发平面切换至备用路径,极大的缩短了业务中断时间。

图9 快速重路由与BFD联动组网图

 

5.3  VRRPBFD联动典型组网应用

VRRP的协议关键点是当Master出现故障时,Backup能够快速接替Master的转发工作,保证用户数据流的中断时间尽量短。当Master出现故障时,VRRP依靠Backup设置的超时时间来判断是否应该抢占,切换速度在1秒以上。如10所示,将BFD应用于BackupMaster的检测,可以实现对Master故障的快速检测,缩短用户流量中断时间。

VRRP还会监视Master的上行链路能否正常工作,Master即使正常工作,但是如果其上行链路出现了故障,用户报文实际上也是无法正常转发的。VRRP是依靠监视接口状态来判断上行链路是否正常工作的,当被监视的接口DOWN掉时,Master主动降低优先级,引起切换。这种监视接口的处理方式依赖于接口的协议状态,如果上行链路出现故障而接口不DOWN则无法感知到。将BFD应用于VRRP上行链路的检测可以有效解决问题。

图10 VRRPBFD联动典型组网图

 

参考文献

·     RFC 5880Bidirectional Forwarding Detection (BFD)

·     RFC 5881Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop)

·     RFC 5882Generic Application of Bidirectional Forwarding Detection (BFD)

·     RFC 5883Bidirectional Forwarding Detection (BFD) for Multihop Paths