双向转发检测-BFD

BFD简介

双向转发检测BFD(Bidirectional Forwarding Detection)用于快速检测系统之间的通信故障,并在出现故障时通知上层应用。

为了减小设备故障对业务的影响、提高网络的可靠性,设备需要能够尽快检测到与相邻设备间的通信故障,以便能够及时采取措施,从而保证业务继续进行。

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

  • 硬件检测:硬件检测的优点是可以很快发现故障,但并不是所有介质都能提供硬件检测。
  • 慢Hello机制:通常采用路由协议中的Hello报文机制。这种机制检测到故障所需时间为秒级。对于高速数据传输,超过1秒的检测时间将导致大量数据丢失。并且,这种机制依赖于路由协议,在小型三层网络中,如果没有部署路由协议,则无法使用路由协议的Hello报文机制来检测故障。
  • 其他检测机制:不同的协议有时会提供专用的检测机制,但在特性间互联互通时,这样的专用检测机制通常难以应用于多个特性。

BFD提供了一个与介质和协议无关的快速故障检测机制。具有以下优点:

  • 对网络设备间任意类型的双向转发路径提供快速、轻负荷的故障检测。
  • 用单一的机制对任何介质、任何协议层进行实时检测,并支持不同的检测时间与开销。

设备支持的BFD特性:

设备支持的BFD特性主要包括:BFD会话建立、BFD检测模式、单跳和多跳检测、静态标识符自协商BFD、单臂回声功能、联动功能和动态改变BFD参数。

BFD会话建立:

BFD通过控制报文中的本地标识符(Local Discriminator)和远端标识符(Remote Discriminator)区分不同的会话。按照本地标识符和远端标识符创建方式的差异,设备支持以下BFD会话类型:

  • 手工指定标识符的静态BFD会话

    必须手工指定BFD会话的本地标识符和远端标识符。如果本端采用手工指定标识符,则对端也必须手工指定标识符。

  • 标识符自协商的静态BFD会话

    如果对端设备采用动态BFD,而本端设备既要与之互通,又要能够实现BFD检测静态路由,必须配置静态标识符自协商BFD,此时无需指定本地标识符和远端标识符。如果本端采用静态标识符自协商,则对端既可以配置静态标识符自协商,也可以配置动态BFD。

  • 协议触发的动态BFD会话

    动态分配本端标识符和自学习远端标识符,无需指定本地标识符和远端标识符。

BFD检测模式:

设备采用BFD异步检测模式。

各设备间按照协商好的周期发送BFD控制报文,如果某个设备在检测时间内没有收到对端发来的报文,则将BFD会话的状态置为Down。

单跳检测和多跳检测:

单跳检测指检测两台三层直连设备间转发链路的连通性。

多跳检测指检测两台三层非直连设备间任意路径的连通性,这些路径可能跨越很多跳,也可能在某些部分重叠。

静态标识符自协商BFD:

如果对端设备采用动态BFD,而本端设备既要与之互通,又要能够实现BFD检测静态路由,必须配置静态标识符自协商BFD。

单臂回声功能:

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

注:单臂回声功能只适用于单跳BFD会话中。

联动功能:

在实际组网中,BFD通常会和其他的协议联合使用,服务于上层应用,比如:BFD和OSPF联动。缺省情况下,OSPF发送Hello报文的时间间隔为10秒钟,设备能感知到邻居故障的时间最小也是秒级。在高速的网络环境中,这将导致报文大量丢失。BFD联动OSPF可以更快的发现邻接方面出现的故障,并及时通知OSPF重新计算相关路由以便正确指导报文的转发。

设备支持BFD和OSPF联动、BFD和IS-IS联动、BFD和BGP联动、BFD和静态路由联动、BFD和PIM联动、BFD和EFM联动以及BFD和VRRP联动。

BFD与接口状态联动:

当直连链路中间存在传输设备时,与接口本身的链路协议故障检测机制相比,BFD能够更快地检测到链路故障。另外对于Eth-Trunk或VLANIF等逻辑接口来说,链路协议状态是由其成员接口的链路协议状态决定的。

因此,为了将BFD检测结果更快地通告到应用程序,在设备接口管理模块中,为每个接口增加了一个属性,即BFD状态,指的是与该接口绑定的BFD会话的状态,系统根据接口的链路状态、协议状态和BFD状态决定接口的状态,并将结果通告给应用程序。

BFD会话状态与接口状态联动功能是指当BFD会话的状态变化时,直接修改接口的BFD状态。

  • 当BFD会话状态变为Down时,与其绑定的接口的BFD状态变为Down,然后将接口状态通告给接口上的应用。
  • 当BFD会话的状态变为Up时,与其绑定的接口的BFD状态变为Up。

该功能针对绑定出接口且使用缺省组播地址进行检测的单跳BFD会话。

BFD报文格式

BFD控制报文封装在UDP报文中传送,对于单跳检测其UDP目的端口号为3784,对于多跳检测其UDP目的端口号为4784或3784。

BFD控制报文根据场景不同封装不同。BFD控制报文包括两部分:强制部分和可选的认证字段。不同的认证类型,认证字段的格式不同。

BFD控制报文强制部分的格式如下:

这里写图片描述

图:BFD报文格式

字段解释:

字段长度含义
Version (Vers)3 bitsBFD协议版本号,目前为1。
Diagnostic (Diag)5 bits诊断字,标明本地BFD系统最近一次会话状态发生变化的原因,取值及含义: 0 – No Diagnostic ; 1 – Control Detection Time Expired ;2 – Echo Function Failed ; 3 – Neighbor Signaled Session Down ; 4 – Forwarding Plane Reset; 5 – Path Down; 6 – Concatenated Path Down ; 7 – Administratively Down; 8 – Reverse Concatenated Path Down; 9-31 – Reserved for future use
State (Sta)2 bitsBFD本地状态。0 – AdminDown; 1 – Down; 2 – Init; 3 – Up
Poll §1 bit参数发生改变时,发送方在BFD报文中置该标志,接收方必须立即响应该报文。1:表示发送系统请求进行连接确认,或者发送请求参数改变的确认。0:表示发送系统不请求确认。
Final (F)1 bit响应P标志置位的回应报文中必须将F标志置位。1:表示发送系统响应一个接收到P比特为1的BFD包。0:表示发送系统不响应一个P比特为1的包。
Control Plane Independent ©1 bit转发/控制分离标志,一旦置位,控制平面的变化不影响BFD检测,如:控制平面为IS-IS,当IS-IS重启/GR时,BFD可以继续监测链路状态。1:表示发送系统的BFD实现不依赖于它的控制平面。即,BFD报文在转发平面传输,即使控制平面失效,BFD仍然能够起作用。0:表示BFD报文在控制平面传输。
Authentication Present (A)1 bit认证标识,置1代表会话需要进行验证。
Demand (D)1 bit查询请求,置位代表发送方期望采用查询模式对链路进行监测。1:表示发送系统希望工作在查询模式。0:表示发送系统不希望、或不能工作在查询模式。
Multipoint (M)1 bit为BFD将来支持点对多点扩展而设的预留位。
Detect Mult8 bits检测超时倍数,用于检测方计算检测超时时间。查询模式:采用本地检测倍数。异步模式:采用对端检测倍数。
Length8 bits报文长度,单位为字节。
My Discriminator32 bitsBFD会话连接本地标识符。发送系统产生的一个唯一的、非0鉴别值,用来区分一个系统的多个BFD会话。
Your Discriminator32 bitsBFD会话连接远端标识符。从远端系统接收到的鉴别值,这个域直接返回接收到的“My Discriminator”,如果不知道这个值就返回0。
Desired Min TX Interval32 bits本地支持的最小BFD报文发送间隔,单位为微秒。
Required Min RX Interval32 bits本地支持的最小BFD报文接收间隔,单位为微秒。
Required Min Echo RX Interval32 bits本地支持的最小Echo报文接收间隔,单位为微秒(如果本地不支持Echo功能,则设置0)。

BFD报文抓包示例:

这里写图片描述

图:BFD报文抓包示例

配置BFD

配置VLANIF接口BFD单跳检测:

在两台交换机之间配置VLANif接口实现三层互通,配置BFD实现链路故障的快速检测。

这里写图片描述

图:配置VALNIF接口BFD单跳检测

配置文件:

<SW1>dis current-configuration 
#
sysname SW1
#
interface Vlanif1 //配置VALNIF接口
 ip address 12.1.1.1 255.255.255.0
#
bfd 1 bind peer-ip 12.1.1.2 interface Vlanif1 source-ip 12.1.1.1
//创建BFD会话绑定信息
 discriminator local 1 //配置BFD会话的本地标识符。
 discriminator remote 2 //配置BFD会话的远端标识符。 
 commit //用来提交BFD会话配置。
#

配置BFD多跳检测:

AR1和AR3为非直连设备,通过配置静态路由互通。在AR1和RAR3上分别配置BFD会话,实现AR1到AR3间多跳路径的检测。

这里写图片描述

图:配置BFD多跳检测

配置文件:

[AR1]dis current-configuration 
#
 sysname AR1
#
interface GigabitEthernet0/0/0
 ip address 12.1.1.1 255.255.255.0 
#
bfd 1 bind peer-ip 23.1.1.3
//配置BFD绑定远端IP地址
 discriminator local 2
 discriminator remote 1
 description duotainjiance
 //配置BFD会话的描述信息。 
 min-tx-interval 1200
 //配置BFD报文的发送间隔。 
 min-rx-interval 1200
//配置BFD报文的接收间隔。 
 wtr 3
//配置BFD会话的等待恢复时间。 缺省情况下,WTR为0,即不等待。
 commit
 //提交BFD配置
#
ip route-static 23.1.1.0 255.255.255.0 12.1.1.2
#

BFD会话状态:

这里写图片描述

图:BFD会话信息

配置BFD单臂回声功能:

AR4支持BFD功能,而AR5不支持,所以在AR4上配置BFD单臂回声功能,实现链路故障的快速检测。

这里写图片描述

图:配置BFD单臂检测功能

配置文件:

interface GigabitEthernet0/0/0
 ip address 12.1.1.1 255.255.255.0 
#
bfd 1 bind peer-ip 12.1.1.2 interface GigabitEthernet0/0/0 one-arm-echo
 discriminator local 1
 commit
#

其他常用BFD配置命令行:

bfd bind peer-ip source-ip auto
//用来创建静态标识符自协商BFD会话。
bfd one-arm-echo
//配置单臂回声功能的BFD会话。
default-ip-address
//配置BFD缺省组播地址。缺省情况下,组播缺省地址为224.0.0.184。
delay-up
//用来使能延迟BFD会话Up的功能。
detect-multiplier
//配置BFD会话的本地检测倍数。缺省情况下,BFD会话本地检测倍数为3。
discriminator//(鉴别器)
//用来配置静态BFD会话的本地标识符和远端标识符。
min-echo-rx-interval
//配置单臂回声功能的BFD报文的最小接收间隔。
multi-hop destination-port { 3784 | 4784 }
//用来配置多跳BFD会话的目的端口号。
//缺省情况下,使用3784作为多跳BFD会话报文的目的端口号。
peer-ip ttl 
//配置BFD报文的生存时间。
/*缺省情况下,不配置BFD报文的生存时间,采用默认值。对于静态配置的BFD会话,单跳BFD报文的生存时间为255,多跳BFD报文的生存时间为254;对于动态建立的BFD会话,单跳BFD报文的生存时间为255,多跳BFD报文的生存时间为253。*/
process-interface-status
//用来配置当前BFD会话与绑定的接口进行状态联动。
snmp-agent bfd trap-interval
//用来设置发送Trap消息定时器的时间间隔。
//缺省情况下,发送Trap消息定时器的时间间隔是120秒。
snmp-agent trap enable feature-name bfd
//用来打开BFD模块的告警开关。
tos-exp
//用来设置BFD报文的优先级。缺省情况下,BFD报文的优先级是7。
track bfd session-name
//用来把BFD会话加入BFD组。
unlimited-negotiate
//用来使能组播BFD会话无条件协商功能。

参考文档:华为HedEx文档


已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页