关键词:BFD
摘 要:BFD是用来实现快速故障检测的标准协议。本文对BFD技术实现和典型组网应用进行介绍。
缩略语:
字段 | 英文全名 | 中文解释 |
BFD | Bidirectional Forwarding Detection | 双向转发检测 |
UDP | User Datagram Protocol | 用户数据报协议 |
目 录
为了保护关键应用,网络中会设计有一定的冗余备份链路,网络发生故障时就要求网络设备能够快速检测出故障并将流量切换至备份链路以加快网络收敛速度。目前有些链路(如POS)通过硬件检测机制来实现快速故障检测。但是某些链路(如以太网链路)不具备这样的检测机制。此时,应用就要依靠上层协议自身的机制来进行故障检测,上层协议的检测时间都在1秒以上,这样的故障检测时间对某些应用来说是不能容忍的。某些路由协议如OSPF、IS-IS虽然有Fast Hello功能来加快检测速度,但是检测时间也只能达到1秒的精度,而且Fast Hello功能只是针对本协议的,无法为其它协议提供快速故障检测。
BFD协议就是在这种背景下产生的,提供了一个通用的标准化的介质无关和协议无关的快速故障检测机制。具有以下优点:
l 对网络设备间任意类型的双向转发路径进行故障检测,包括直连物理链路、虚电路、隧道、MPLS LSP、多跳路由路径以及单向链路等。
l 可以为不同的上层应用服务,提供一致的快速故障检测时间。
l 提供小于1秒的检测时间,从而加快网络收敛速度,减少应用中断时间,提高网络的可靠性。
BFD在两台网络设备上建立会话,用来检测网络设备间的双向转发路径,为上层应用服务。BFD本身并没有邻居发现机制,而是靠被服务的上层应用通知其邻居信息以建立会话。会话建立后会周期性地快速发送BFD报文,如果在检测时间内没有收到BFD报文则认为该双向转发路径发生了故障,通知被服务的上层应用进行相应的处理。下面以OSPF与BFD联动为例,简单介绍会话工作流程。
图1 BFD会话建立流程图
(1) OSPF通过自己的Hello机制发现邻居并建立连接;
(2) OSPF在建立了新的邻居关系后,将邻居信息(包括目的地址和源地址等)通告给BFD;
(3) BFD根据收到的邻居信息建立会话。
图2 BFD故障发现处理流程图
(1) 被检测链路出现故障;
(2) BFD检测到链路故障,拆除BFD邻居会话;
(3) BFD通知本地OSPF进程BFD邻居不可达;
(4) 本地OSPF进程中断OSPF邻居关系
BFD有两种操作模式:异步模式和查询模式。目前Comware只支持异步模式。在此模式下,会话两端周期性地发送BFD控制报文,根据是否能收到对端的BFD控制报文来检测会话状态。
另外,Comware还支持回声功能。回声功能启动后,会话的一端周期性地发送BFD Echo报文,对端不对此报文进行处理,而只将此报文转发回发送端。根据发送端是否能收到BFD Echo报文来检测会话状态。
BFD会话的两端可能是在直连网段(即IP报文的一跳),也可能是在不同网段。回声功能只可以检测直连网段故障,即BFD Echo报文是单跳发送;而BFD控制报文可以检测直连网段和非直连网段的故障,即BFD控制报文可以是单跳或多跳发送。
BFD控制报文包括强制部分和可选认证部分。
强制部分格式如图3:
图3 BFD控制报文
可选认证部分格式如图4:
图4 BFD控制报文(认证部分)
BFD控制报文各字段含义如表1:
表1 BFD控制报文各字段含义
字段 | 含义 |
Vers | BFD协议版本号,目前版本号为1 |
Diag | 诊断码,表明发送方最近一次会话Down的原因 |
Sta | 发送方BFD会话当前状态,取值为:0代表AdminDown,1代表Down,2代表Init,3代表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 Type和Auth Len字段,单位为字节 |
BFD控制报文采用UDP封装,目的端口号为3784,源端口号在49152到65535的范围内。
BFD Echo报文提供了一种不依赖于BFD控制报文的故障检测方法。本端发送本端接收,远端不对报文进行处理,而只是将此报文在反向通道上返回。因此BFD协议并没有对BFD Echo报文的格式进行定义,较少的要求是发送方能够通过报文内容区分会话。
BFD Echo报文采用UDP封装,目的端口号为3785,目的IP地址为发送接口的地址,源IP地址由配置产生(配置的源IP地址要避免产生ICMP重定向)。
& 说明:
下面仅介绍通过发送控制报文来建立会话并进行故障检测的过程。
BFD会话建立前有主动与被动两种模式。如果一台设备为主动模式,那么在会话建立前不管有没有收到对端发来的BFD控制报文,都会主动发送BFD控制报文。如果一台设备为被动模式,那么在会话建立前就不会主动发送BFD控制报文,直到收到对端发来的BFD控制报文才发送。
要建立BFD会话的两端中至少要有一端为主动模式才能成功建立起会话。下面对两端都为主动模式的会话建立过程进行说明,一端主动模式一端被动模式的会话建立过程基本相同。
图5 BFD会话连接建立
BFD使用三路握手的机制来建立会话,发送方在发送BFD控制报文时会在Sta字段填入本地当前的会话状态,接收方根据收到的BFD控制报文的Sta字段以及本地当前会话状态来进行状态机的迁移,建立会话。
l Router A和Router B的BFD收到上层应用的通知后,发送状态为DOWN的BFD控制报文。Router B的BFD状态变化同Router A。
l Router B收到对端状态为DOWN的BFD控制报文后,本地会话状态由DOWN迁移到INIT,随后发送的BFD控制报文中将Sta字段填为2表明会话状态为INIT。Router A的BFD状态变化同Router B。
l Router A收到对端状态为INIT的BFD控制报文后,本地会话状态由INIT迁移到UP,随后发送的BFD控制报文中将Sta字段填为3表明会话状态为UP。Router B的BFD状态变化同Router A。
l BFD双方状态都为UP,会话成功建立并开始检测链路状态。
BFD会话建立前BFD控制报文以1秒的时间间隔周期发送以减小报文流量。在会话建立后则以协商的时间间隔发送BFD控制报文以实现快速检测。在BFD会话建立的同时,BFD控制报文发送时间间隔以及检测时间也会通过报文交互协商确定。在BFD会话有效期间,这些定时器可以随时协商修改而不影响会话状态。BFD会话不同方向的定时器协商是分别独立进行的,双向定时器时间可以不同。
BFD控制报文发送时间间隔为本端Desired Min TX Interval与对端Required Min RX Interval之中的最大值,也就是说比较慢的一方决定了发送频率。
检测时间为对端BFD控制报文中的Detect Mult乘以经过协商的对端BFD控制报文发送时间间隔。
如果加大本端Desired Min TX Interval,那么本端实际发送BFD控制报文的时间间隔必须要等收到对端F字段置位的报文后才能改变,这是为了确保在本端加大BFD控制报文发送时间间隔前对端已经加大了检测时间,否则可能导致对端检测定时器错误超时。
如果减小本端Required Min RX Interval,那么本端检测时间必须要等收到对端F字段置位的报文后才能改变,这是为了确保在本端减小检测时间前对端已经减小了BFD控制报文发送间隔时间,否则可能导致本端检测定时器错误超时。
然而如果减小Desired Min TX Interval,本端BFD控制报文发送时间间隔将会立即减小;加大Required Min RX Interval,本端检测时间将会立即加大。
下面详细介绍参数改变后定时器的协商过程:
图6 BFD检测时间协商
Router A与Router B建立BFD会话,双方的Desired Min TX Interval和Required Min RX Interval(下面简称为TX和RX)都为100ms,Detect Mult都为3。根据定时器协商规则,Router A的发送时间间隔为Router A的TX与Router B的RX中的最大值也就是100ms,Router B的发送时间间隔也是100ms,双方的检测超时时间都为300ms。
如果此时将Router A的TX和RX加大到150 ms。
(1) Router A比较本端的RX(150ms)和Router B的TX(100ms),从而将本端检测时间改为450ms。同时向对端发送P字段置位的BFD控制报文(TX和RX均为150ms)。
(2) Router B收到报文后,给Router A回复F字段置位的BFD控制报文(TX和RX均为100ms)。同时将收到报文中的RX与本端的TX进行比较,由于TX较大,故Router B的发送间隔改为150ms。经过比较本端RX和对端的TX,从而将检测时间也增大到450ms。
(3) Router A收到对端发来F字段置位的控制报文。根据报文中的RX与本端的TX进行比较计算出新的时间间隔为150ms。
(4) 定时器协商完成,双方的发送间隔和检测时间分别为150ms和450ms。
BFD会话建立及定时器协商完成后,两端会以协商后的间隔发送BFD控制报文。每当收到BFD控制报文时,就会重置检测时间定时器,保持会话UP状态。如果在检测时间内没有收到BFD控制报文,BFD会话会迁移到DOWN状态,并通知该会话所服务的上层应用发生故障,由上层应用采取相应的措施。本端BFD会话DOWN后,发给对端的BFD控制报文中的Sta字段就填为1,通知对端会话DOWN,对端的BFD会话也迁移到DOWN状态。
图7 路由协议与BFD联动组网图
两台路由器Router A、Router B通过二层交换机互连,在设备上运行路由协议,网络层相互可达。
由于通过二层交换机相连,Router A与Router B之间的链路故障可能不会导致接口DOWN,只能通过协议握手去检测。通过在Router A与Router B之间使用BFD就能快速检测出故障,路由协议得到BFD通知后可以尽快计算新的路由,从而缩短收敛时间。
图8 快速重路由与BFD联动典型组网图
随着网络的快速发展,IP网络越来越多的承载语音、视频等多种业务,这些业务对网络的高可靠性提出了更高的要求,从而运营商网络要求更快的收敛速度。
BFD应用于路由协议以及路由协议快速收敛技术的使用虽然很大程度提高了收敛速度,但还是无法满足语音、视频等新业务对业务中断时间的要求。
而快速重路由和BFD联动技术可以很好的满足这种要求,通过提前计算备用路径,快速发现主用路径故障,并在主用路径故障时不依赖于控制平面的收敛而直接在转发平面切换至备用路径,极大的缩短了业务中断时间。
图9 VRRP与BFD联动典型组网图
VRRP的协议关键点是当Master出现故障时,Backup能够快速接替Master的转发工作,保证用户数据流的中断时间尽量短。当Master出现故障时,VRRP依靠Backup设置的超时时间来判断是否应该抢占,切换速度在1秒以上。将BFD应用于Backup对Master的检测,可以实现对Master故障的快速检测,缩短用户流量中断时间。
VRRP还会监视Master的上行链路能否正常工作,Master即使正常工作,但是如果其上行链路出现了故障,用户报文实际上也是无法正常转发的。VRRP是依靠监视接口状态来判断上行链路是否正常工作的,当被监视的接口DOWN掉时,Master主动降低优先级,引起切换。这种监视接口的处理方式依赖于接口的协议状态,如果上行链路出现故障而接口不DOWN则无法感知到。将BFD应用于VRRP上行链路的检测可以有效解决问题。
l Katz D., Ward D., "Bidirectional Forwarding Detection”, draft-ietf-bfd-base-05.
l Katz D., Ward D., "Generic Application of BFD”, draft-ietf-bfd-generic-02.
l Katz D., Ward D., "BFD for IPv4 and IPv6 (Single Hop)”, draft-ietf-bfd-v4v6-1hop-05.
l Katz D., Ward D., "BFD for Multihop Paths”, draft-ietf-bfd-multihop-03.
Copyright ©2008 杭州华三通信技术有限公司 版权所有,保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
本文档中的信息可能变动,恕不另行通知。