双向转发检测(BFD)关键参数研究
1 引言
随着通信技术的发展,在IP网络上承载IMS(IP多媒体子系统)、3G(第三代通讯系统)、4G(第四代通讯系统)等实时、时延敏感业务的需求不断增长,如何保障数据传送质量,如何在数据传送出现问题时,快速对故障进行定位,已经成为了一个亟待解决的重要问题,因此,BFD作为一种快速检测机制,应运而生。
BFD(双向转发检测)是一套用来实现快速检测的国际标准协议,提供一种轻负荷、持续时间短的检测。它是一个简单的“Hello”协议,在很多方面它与那些著名的路由协议的邻居检测部分相似。网络设备一个越来越重要的特征是要求对相邻系统之间通信故障进行快速检测,这样在出现故障时可以更快的建立起替代通道或倒换到其他链路。BFD可以以毫秒级时间检测到链路出现了故障,可以以最快速度把业务切换到其它链路,不影响用户使用业务。
在部署BFD应用时,要注意一些关键参数配置,如果配置不当,可能会引起不必要故障。以下对定时器、会话标识、会话等待恢复时间这三个重要参数的实现机制及注意事项进行阐述。
2 BFD关键参数实现机制
2.1 定时器参数
定时器参数主要包括包括最小BFD控制报文发送时间间隔(下面简称为MIN_TX)、最小BFD控制报文接收时间间隔(下面简称为MIN_RX)、检测次数这三个参数。BFD会话建立前或者BFD状态变为DOWN状态时,BFD控制报文以1秒的时间间隔周期地发送以减小报文流量。在会话建立后则以协商的时间间隔发送BFD控制报文以实现快速检测。在BFD会话建立的同时,BFD控制报文发送时间间隔以及检测时间也会通过报文交互协商确定。在BFD会话UP期间,这些定时器参数可以随时协商修改而不影响会话状态。BFD会话不同方向的定时器协商是分别独立进行的,双向定时器时间可以不同。系统实际的BFD控制报文发送时间间隔及检测时间计算如下公式:
BFD控制报文发送时间间隔=MAX(本端MIN_TX,对端MIN_RX) (公式1)
检测时间=对端检测次数*协商后对端BFD控制报文发送时间间隔 (公式2)
下面详细介绍参数改变后定时器的协商过程如图7。
Router A与Router B建立BFD会话,双方的Desired Min TX Interval和Required Min RX Interval(下面简称为MIN_TX和MIN_RX)都为100ms,Detect Mult都为3。根据定时器协商规则,Router A的发送时间间隔为Router A的MIN_TX与Router B的MIN_RX中的最大值也就是100ms,Router B的发送时间间隔也是100ms,双方的检测超时时间都为300ms。
如果此时将Router A的MIN_TX和MIN_RX加大到200 ms。
(1)Router A会向对端发送定时器参数(Desired Min TX Interval和Required Min RX Interval加大到200 ms)修改后的BFD控制报文,并将控制报文中P字段置位。
(2)Router B收到Router A发送的P字段置位BFD控制报文,将根据报文中本端的定时器参数Desired Min TX Interval=100ms与对端定时器参数Required Min RX Interval=200ms之中的最大值决定了发送频率。并将协商后的定时器参数200ms的F字段置位的控制报文发送给Router A。
(3)Router A收到对端发来F字段置位的控制报文,根据公式1、公式2计算本端定时器发送频率为200ms,检测超时时间为600ms,后续将以200ms发送频率来发送控制报文。
(4)定时器协商结束,Router A、Router B两端BFD控制报文发送时间间隔均为200ms,检测超时时间均为600ms。
理论上MIN_TX、MIN_RX、检测次数这三个参数可根据用户需求配置,但实际应用必须根据设备支持的参数配置,不同厂商不同设备不同版本支持的数值可能都不一样。如思科路由器C7609的早期版本就不支持BFD,华为三层交换机S9306(V100R002C00SPC200)只支持1000ms的发包速率。下面以华为三层交换机S9306和路由器NE80E对接设置不同定时器参数值进行测试。
(1)测试涉及的设备及版本。
华为三层交换机S9306(配置FSU子卡):V100R002C00SPC200 +HP0011
华为路由器NE80E:Version 5.50 (V300R003C02B382)
(2)测试内容。
S9306-1和NE80E-1建立BFD会话,两台设备的MIN_TX、MIN_RX分别同时配置为10ms、50ms、100ms、150ms、200、300ms测试,检测次数均配置为3,发现配置为10ms、50ms、100ms、200ms时BFD会话能正常建立,配置为150ms、300ms时BFD会话出现频繁UP、DOWN震荡现象。原因是S9306设备的FSU子卡只支持10ms、20ms、50ms、100ms、1000ms这5种固定的发包速率,当配置为200ms时根据软件算法实际发包周期为100ms,配置为150ms和300ms时无法得到5种固定发包速率中的任何一种,所以出现震荡现象。
(3)测试结论。在实际应用中,为实现BFD对链路故障的精确检测,要提前了解设备支持的MIN_TX、MIN_RX值,提前进行不同厂商设备间的对接测试。
2.2 会话标识参数
会话标识包括本端、对端标识符两个参数。由于在两个系统之间可能运行多个BFD会话,因此需要引入一种机制来区分这些会话,本端、对端标识符就是用来区分两个系统之间不同BFD会话的。本端标识符将在BFD控制报文的“My Discriminator”字段表示出来。在对端发送过来的应答报文中,本端标识符将在“Your Discriminator”字段表示出来。一旦对端在回应报文中携带了自己的标识符,以后双方之间的所有BFD会话将完全根据标识符进行区分。也就是说,对于一个BFD会话,如果本端和对端的标识符已经确定下来,那么不论双方的IP地址发生变化,还是出端口发生变化都不会影响这个BFD会话。
本端标识符用来唯一标识一条BFD会话,这个系统的所有BFD会话的标识符必须不一样,并且是非0的。为了安全性应该为随机的一个非0值。
BFD会话的远端标识,是由远端系统决定的,本端系统完全不知道。这个值初始化为0,如果在一个检测周期时间内没有从远端系统收到一个有效的BFD报文,这个值将被设置为0。
这两个参数可配置也可自动协商生成,不同厂商的设备实现方式不太一样。比如华为设备可人工配置也可自动协商,中兴、思科设备不可配置,由设备随机生成。对于人工配置的,一定要注意本端配置的本端标识与对端配置的对端标识的值必须一致。
2.3 会话等待恢复时间
会话等待恢复时间WTR(Wait to Recovery)
这个参数是华为私有的,主要用于避免BFD会话震荡时,应用程序在主备之间来回切换。如果配置了WTR,会话变为Up状态的事件在WTR超时后才上报给应用程序,其它状态变化的事件仍立即上报,不受WTR影响。BFD会话是单向的,BFD双向检测通过分别在会话两端配置相对独立的会话实现。因此,如果配置WTR,用户需要手工在两端配置相同的WTR。否则,当一端会话状态变化时,两端的应用程序感知到的BFD会话状态将不一致。下面仍然以华为三层交换机S9306和路由器NE80E对接配置WTR进行测试。
(1)测试涉及的设备及版本。
华为三层交换机S9306(配置FSU子卡):V100R002C00SPC200 +HP0011
华为路由器NE80E:Version 5.50(V300R003C02B382)
(2)测试内容。S9306-1和NE80E-1建立BFD会话,两台设备的MIN_TX、MIN_RX同时配置为100ms,同时配置wtr 5。先关闭S9306-1与NE80E-1互联中继,确认端口、BFD均为DOWN后再开启端口,查看设备NE80E-1的日志接口UP的时间点为10:55:59,S9306-1设备接口UP的时间点为10:56:52,S9306-1设备接口up的时间点比NE80E-1接口up的时间要慢53s,2台设备的系统时间是一致的。这样导致10:55:59时间点NE80E-1上接口已经up,NE80E-1的流量走到S9306-1,而这时候S9306-1上接口协议还是down的,将会造成流量丢失。
S9306-1设备接口up的时间晚于NE80E-1的原因是因为S9306-1配置了wtr 5,具体流程如下:
1)S9 306-1设备开启接口后,接口立即UP,并开始进行BFD协商;
2)BFD协商UP之后,通知接口管理模块,接口管理模块控制延迟5分钟UP,但由于该版本S9306的接口管理模块对时间的处理存在误差,造成接口延迟UP时间不准。
(3)测试结论。会话等待恢复时间WTR这个参数是华为私有的,虽然设计初衷是好的,但实际应用中有可能引来新的问题,在配置这个参数时,需要提前测试,确定设备对这个参数的支持情况。
3 结语
由于BFD可以实现快速检测,同时对设备的性能也提出了更高要求,不同厂商、不同设备、不同版本对BFD的支持情况可能都不一样。在实际部署BFD应用时,要特别注意关键参数的配置,提前测试,提前了解设备对这个参数的支持情况。
参考文献
[1]Katz D., Ward D., "Bidirectional Forwarding Detection", draft-ietf-bfd-base-05.