专题十九:BFD技术

一、BFD概述

BFD(Bidirectional Forwarding Detection,双向转发检测),提供了一个通用的、标准化的、介质无关和协议无关的快速故障检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状态,拥有以下两大优点:

对相邻转发引擎之间的通道提供轻负荷、快速故障检测。

用单一的机制对任何介质、任何协议层进行实时检测。

BFD是一个简单的"Hello"协议。两个系统之间建立BFD会话通道,并周期性发送BFD检测报文,如果某个系统在规定的时间内没有收到对端的检测报文,则认为该通道的某个部分发生了故障。

二、BFD报文结构

BFD检测是通过维护在两个系统之间建立的BFD会话来实现的,系统通过发送BFD报文建立会话。BFD控制报文根据场景不同封装不同,报文结构由强制部分可选的认证字段组成。

BFD控制报文采用UDP封装,目的端口号为3784,源端口号在49152到65535的范围内。

BFD Echo报文

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

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

BFD会话连接建立

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

要建立BFD会话的两端中至少要有一端为主动模式才能成功建立起会话。下面对两端都为主动模式的会话建立过程进行说明,一端主动模式一端被动模式的会话建立过程基本相同

bfd会话建立连接图

01

Router_A和Router_B的BFD收到上层应用的通知后,发送状态为DOWN的BFD控制报文。

02

Router_B收到状态为Down的BFD控制报文后,本地状态切换至Init,并发送状态为Init的BFD控制报文。Router_A的BFD状态变化同Router_B

03

Router_B收到状态为Init的BFD控制报文后,本地状态切换至up,并发送状态为up的BFD控制报文。Router_A的BFD状态变化同Router_B。

04

Router_A和Router_B双向状态都为UP,会话成功建立并开始检测链路状态

Router_A和Rourer_B发生“DOWN=>INIT"的状态迁移后,会启动一个超时定时器。如果定时器超时仍未收到状态为Init或up的BFD控制报文,则本地状态自动切换回DOWN

对于手工指定标识符的静态BFD会话,报文中的You Discrimimnator的值是用户指定的;

而对于标识符自协商的静态BFD会话,报文中的Your Discriminatior的值由双方协商而定;

对于动态创建BFD会话,报文中Your Discriminator的值是0

三、BFD会话建立

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

BFD通过控制报文中的本地标识符和远端标识符区分不同的会话。静态和动态创建BFD会话的主要区别在于Local Discriminator和Remote Discriminator的配置方式不同。

静态建立BFD会话是指通过命令行手工配置BFD会话参数,包括配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。

动态建立BFD会话的本地标识符由触发创建BFD会话的系统动态分配,远端标识符从收到对端BFD消息的Local Discriminator的值学习而来。

四、BFD会话状态

BFD会话有四种状态:Down、Init、Up和AdminDown。

Down状态说明会话down。一个会话会维持在down状态直到收到对端的报文并且该报文的sta字段标志着对端状态不是up。如果收到的是down包,状态机将从down状态跳转到init状态,如果收到的是init包,状态机将从down状态跳转到up状态,如果收到的是up包,状态机维持down状态。

Init状态说明与远端正在通信,并且本地会话期望进入up状态,但是远端还没回应。一个init状态的会话会维持init状态直到收到对端的init包或者up包,就会跳转到up状态,否则等到检测时间超时以后,便会跳转到down状态,意味着与远端的通信丢失。

Up状态说明BFD会话成功建立,并且正在确认链路的联通性,会话会一直保持在up状态直到链路故障或者管理down操作。如果收到远端的down包或者检测时间超时会话就会从up状态跳转到down状态。
会话状态变化通过BFD报文的State字段传递,系统根据自己本地的会话状态和接收到的对端BFD报文驱动状态改变,如左下图所示。BFD状态机的建立和拆除都采用三次握手机制,如右下图所示,以确保两端系统都能知道状态的变化。

五、BFD检测机制

BFD的检测机制:两个系统建立BFD会话,并沿它们之间的路径周期性发送BFD控制报文,如果一方在既定的时间内没有收到BFD控制报文,则认为路径上发生了故障。BFD的检测模式有异步模式和查询模式两种。

异步模式和查询模式的本质区别:检测的位置不同,异步模式下本端按一定的发送周期发送BFD控制报文,检测位置为远端,远端检测本端是否周期性发送BFD控制报文;查询模式下本端检测自身发送的BFD控制报文是否得到了回应。

六、BFD Echo功能

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应用场景

联动功能由检测模块、Track和应用模块三部分组成

7.1 BFD与接口状态联动

BFD与接口状态联动提供一种简单的机制,使得BFD检测行为可以关联接口状态,提高了接口感应链路故障的灵敏度,减少了非直连链路故障导致的问题。BFD检测到链路故障会立即上报Down消息到相应接口,使接口进入一种特殊的Down状态:BFD Down状态。该状态等效于链路协议Down状态,在该状态下只有BFD的报文可以正常处理,从而使接口也可以快速感知链路故障。

如图所示,链路中间存在其他设备,虽然三层仍是直连,但由于实际物理线路分段,一旦链路故障,两端设备需要比较长的时间才能检测到,导致直连路由收敛慢,网络中断时间长。在SwitchA和SwitchB上配置BFD会话,配置接口联动后,当BFD检测到链路出现故障,立即上报Down消息到相应接口,使接口进入BFD Down状态。

7.2 BFD与OSPF联动

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

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

OSPF协议收敛速度
是否绑定BFD链路故障检测机制收敛速度
未绑定BFDOSPF HELLO keepalive定时器超时秒级
绑定BFDBFD会话Down亳秒级

如上图所示,SwitchA分别与SwitchC和SwitchD建立OSPF邻居关系,SwitchA到SwitchB的路由出接口为Interface 1,经过SwitchC到达SwitchB。邻居状态到达FULL状态时通知BFD建立BFD会话。

当SwitchA和SwitchC之间链路出现故障,BFD首先感知到并通知SwitchA。SwitchA处理邻居Down事件,重新计算路由,新的路由出接口为Interface 2,经过SwitchD到达SwitchB

7.3 静态路由与BFD联动

静态路由自身没有检测机制,如果静态路由存在冗余路径,通过静态路由与BFD联动,当主用路径故障时,实现静态路由的快速切换

静态路由与BFD联动应用广泛,如下图中R1是园区网的出口路由器,R1通过两条链路分别连接ISP1ISP2,正常情况下默认路由经过的链路为指向ISP1的链路,当通往ISP1的链路出现故障的时候,BFD会话能够快速感知,并通知路由器将流量切换到指向ISP2的链路。

八、BFD的基本配置

8.1 BFD基础命令

1.创建BFD会话绑定信息,并进入BFD会话视图。

[Huawei] bfd session-name bind peer-ip ip-address [ vpn-instance vpn-name ] interface interface-type interface-number [ source-ip ip-address ]

缺省情况下,未创建BFD会话。在第一次创建单跳BFD会话时,必须绑定对端IP地址和本端相应接口,且创建后不可修改。如果需要修改,则只能删除后重新创建。

2.创建使用组播地址作为对端地址的BFD会话,并进入BFD会话视图。

[Huawei] bfd session-name bind peer-ip default-ip interface interface-type interface-number [ source-ip ip-address ]

3.创建BFD for IPv6的绑定信息,并进入BFD会话视图。

[Huawei] bfd session-name bind peer-ipv6 ip-address [ vpn-instance vpn-name ] interface interface-type interface-number [ source-ipv6 ip-address ]

在第一次创建单跳BFD6会话时,必须绑定对端IPv6地址和本端相应接口,且创建后不可修改。

4.创建静态标识符自协商BFD会话

[Huawei] bfd session-name bind peer-ip ip-address [ vpn-instance vpn-name ] interface interface-type interface-number [ source-ip ip-address ] auto

5.创建单臂Echo功能的BFD会话

[Huawei] bfd session-name bind peer-ip ip-address [ vpn-instance vpn-name ] interface interface-type interface-number [ source-ip ip-address ] one-arm-echo

6.配置BFD会话的本地标识符

[Huawei-bfd-session-test] discriminator local discr-value

此处假设BFD Session名称是test

7.配置BFD会话的远端标识符

[Huawei-bfd-session-test] discriminator remote discr-value

配置标识符时,本端的本地标识符与对端的远端标识符必需相同,否则BFD会话无法正确建立。并且,本地标识符和远端标识符配置成功后不可修改。

8.2 BFD三层单跳检测

RouterA和RouterB之间通过三层物理链路直连。用户希望可以实现设备间链路故障的快速检测。
检测RouteA到RouteB的单跳路径,BFD会话绑定出接口。
配置步骤:
配置RouterA和RouterB的直连接口IP地址
# 配置RouterA的接口IP地址。

<Huawei> system-view
[Huawei] sysname RouterA
[RouterA] interface gigabitethernet 1/0/0
[RouterA-GigabitEthernet1/0/0] ip address 10.1.1.1 24
[RouterA-GigabitEthernet1/0/0] quit


# 配置RouterB的接口IP地址。

<Huawei> system-view
[Huawei] sysname RouterB
[RouterB] interface gigabitethernet 1/0/0
[RouterB-GigabitEthernet1/0/0] ip address 10.1.1.2 24
[RouterB-GigabitEthernet1/0/0] quit


配置BFD单跳检测
# 在RouterA上使能BFD,并配置与RouterB之间的BFD Session。需要在BFD Session中绑定接口。

[RouterA] bfd    //开启bfd
[RouterA-bfd] quit
[RouterA] bfd atob bind peer-ip 10.1.1.2 interface gigabitethernet 1/0/0   //配置了一个名为atob的session,对端是10.1.1.2,接口是G1/0/0
[RouterA-bfd-session-atob] discriminator local 1   //配置BFD会话本端标识符
[RouterA-bfd-session-atob] discriminator remote 2   //配置BFD会话对端标识符
[RouterA-bfd-session-atob] commit  //提交配置
[RouterA-bfd-session-atob] quit


# 在RouterB上使能BFD,并配置与RouterA之间的BFD Session。需要在BFD Session中绑定接口。

[RouterB] bfd
[RouterB-bfd] quit
[RouterB] bfd btoa bind peer-ip 10.1.1.1 interface gigabitethernet 1/0/0  //与routeA配置相反
[RouterB-bfd-session-btoa] discriminator local 2
[RouterB-bfd-session-btoa] discriminator remote 1
[RouterB-bfd-session-btoa] commit
[RouterB-bfd-session-btoa] quit

验证配置结果
# 配置完成后,在RouterA和RouterB上执行display bfd session all verbose命令,可以看到建立了一个单跳(one hop)的BFD Session,且状态为Up。
# 以RouterA上的显示为例。

[RouterA] display bfd session all verbose

8.3 BFD多跳检测

RouterA和RouterC为非直连设备,通过配置静态路由互通。用户希望可以实现对设备间链路故障的快速检测。
检测RouteA和RouteC之间的IP多跳路径,BFD会话绑定对端IP但不绑定出接口。
配置步骤:
配置静态路由,使RouterA、RouterC之间有可达路由
# RouterC的配置与RouterA类似,具体配置过程略,详见配置文件。

<Huawei> system-view
[Huawei] sysname RouterA
[RouterA] ip route-static 10.2.1.0 24 10.1.1.2


配置多跳BFD检测
# 在RouterA上配置与RouterC之间的BFD会话。

[RouterA] bfd  //开启bfd
[RouterA-bfd] quit
[RouterA] bfd atoc bind peer-ip 10.2.1.2   //创建名字为atoc的bfd,对端IP是10.2.1.2
[RouterA-bfd-session-atoc] discriminator local 10         //本地标识符10
[RouterA-bfd-session-atoc] discriminator remote 20     //对端标识符20
[RouterA-bfd-session-atoc] commit
[RouterA-bfd-session-atoc] quit


# 在RouterC上配置与RouterA之间的BFD会话。

[RouterC] bfd
[RouterC-bfd] quit
[RouterC] bfd ctoa bind peer-ip 10.1.1.1
[RouterC-bfd-session-ctoa] discriminator local 20
[RouterC-bfd-session-ctoa] discriminator remote 10
[RouterC-bfd-session-ctoa] commit
[RouterC-bfd-session-ctoa] quit

验证配置结果
# 配置完成后,在RouterA和RouterC上执行display bfd session all verbose命令,可以看到建立了一个BFD会话,且状态为Up。以RouterA上的显示为例

8.4 BFD单臂回声

单臂回声功能是指通过BFD报文的环回操作检测转发链路的连通性。(记住命令,模拟器不支持)
在两台直接相连的设备中,其中一台设备支持BFD功能,另一台设备不支持BFD功能,只支持基本的网络层转发。为了能够快速的检测这两台设备之间的故障,可以在支持BFD功能的设备上创建单臂回声功能的BFD会话。支持BFD功能的设备主动发起回声请求功能,不支持BFD功能的设备接收到该报文后直接将其环回,从而实现转发链路的连通性检测功能。
 

RouterA和RouterB通过直连链路连通,RouterA支持BFD功能,RouterB不支持BFD功能。用户希望实现对链路故障的快速检测。
配置步骤:
(1)配置RouterA和RouterB的直连接口IP地址
# 配置RouterA的接口IP地址。

<Huawei> system-view
[Huawei] sysname RouterA
[RouterA] interface gigabitethernet 1/0/0
[RouterA-GigabitEthernet1/0/0] undo portswitch
[RouterA-GigabitEthernet1/0/0] ip address 10.1.1.1 24
[RouterA-GigabitEthernet1/0/0] quit


# 配置RouterB的接口IP地址。

<Huawei> system-view
[Huawei] sysname RouterB
[RouterB] interface gigabitethernet 1/0/0
[RouterB-GigabitEthernet1/0/0] undo portswitch
[RouterB-GigabitEthernet1/0/0] ip address 10.1.1.2 24
[RouterB-GigabitEthernet1/0/0] quit


(2)配置单臂ECHO功能的BFD会话

# 配置RouterA。
[RouterA] bfd   //开启BFD
[RouterA-bfd] quit
[RouterA] bfd atob bind peer-ip 10.1.1.2 interface gigabitEthernet1/0/0 one-arm-echo  //单臂回声参数
[RouterA-bfd-session-atob] discriminator local 1
[RouterA-bfd-session-atob] min-echo-rx-interval 100
[RouterA-bfd-session-atob] commit   //提交配置 
[RouterA-bfd-session-atob] quit

(3)验证配置结果
# 配置完成后,在RouterA上执行display bfd session all verbose命令,可以看到建立了一个单跳(one hop)的BFD会话,且状态为Up。

<RouterA> display bfd session all verbose

8.5 BFD联动VRRP
 

配置步骤:
配置BFD会话。
# 配置DeviceA。

<HUAWEI> system-view
[HUAWEI] sysname DeviceA
[DeviceA] bfd
[DeviceA-bfd] quit
[DeviceA] interface 10ge 0/0/1
[DeviceA-10GE0/0/1] ip address 10.1.1.1 24
[DeviceA-10GE0/0/1] quit
[DeviceA] bfd trackbfd bind peer-ip 10.1.1.2 interface 10ge 0/0/1
[DeviceA-bfd-session-trackbfd] discriminator local 1
[DeviceA-bfd-session-trackbfd] discriminator remote 2
[DeviceA-bfd-session-trackbfd] quit


# 配置DeviceB。

<HUAWEI> system-view
[HUAWEI] sysname DeviceB
[DeviceB] bfd
[DeviceB-bfd] quit
[DeviceB] interface 10ge 0/0/1
[DeviceB-10GE0/0/1] ip address 10.1.1.2 24
[DeviceB-10GE0/0/1] quit
[DeviceB] bfd trackbfd bind peer-ip 10.1.1.1 interface 10ge 0/0/1
[DeviceB-bfd-session-trackbfd] discriminator local 2
[DeviceB-bfd-session-trackbfd] discriminator remote 1
[DeviceB-bfd-session-trackbfd] quit


配置VRRP备份组1。
# 在DeviceA上配置VRRP备份组1,并配置DeviceA在该备份组中的优先级为120,确保DeviceA为Master设备。

[DeviceA] interface 10ge 0/0/1
[DeviceA-10GE0/0/1] vrrp vrid 1 virtual-ip 10.1.1.111
[DeviceA-10GE0/0/1] vrrp vrid 1 priority 120
[DeviceA-10GE0/0/1] quit


# 在DeviceB上配置VRRP备份组1,DeviceB在该备份组中使用缺省优先级,确保DeviceB为Backup设备。

[DeviceB] interface 10ge 0/0/1
[DeviceB-10GE0/0/1] vrrp vrid 1 virtual-ip 10.1.1.111
[DeviceB-10GE0/0/1] quit


在DeviceB上配置VRRP备份组监视BFD会话。
[

DeviceB] interface 10ge 0/0/1
[DeviceB-10GE0/0/1] vrrp vrid 1 track bfd 2 increase 40   //A出现故障B优先级增加40
[DeviceB-10GE0/0/1] quit


# 对DeviceA的10ge 0/0/1接口执行shutdown操作,模拟链路故障。

[DeviceA] interface 10ge 0/0/1
[DeviceA-10GE0/0/1] shutdown
[DeviceA-10GE0/0/1] quit


在DeviceA上查看VRRP备份组状态信息,可以看到备份组的状态为Initialize。
在DeviceB上查看VRRP备份组状态信息,可以看到此时BFD会话的状态为Down,DeviceB的优先级增加40,此时备份组的状态为Master。
 

8.6 BFD联动OSPF

R1、R2、R3运行OSPF协议,且都属于Area0;配置OSPF与BFD联动,通过设置所有OSPF接口的BFD会话参数进一步提高链路状态变化时OSPF的收敛速度;
将BFD会话的最大发送间隔和最大接受间隔都设置为100ms检测次数默认不变
配置命令:
省略ospf配置步骤,R2、R3配置同理

[R1]bfd
[R1]interface GigabitEthernet 0/0/1
[R1-GigabitEtheret0/0/1]ip address 10.0.12.1 30
[R1]ospf 1[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 10.0.12.0 0.0.0.3
[R1-ospf-1-area-0.0.0.0]quit
[R1-ospf-1]bfd all-interfaces enable  //打开OSPF BFD特性的开关,建立BFD会话
[R1-ospf-1]bfd all-interfaces min-tx-interval 100 min-rx-interval100 detect-multiplier 3 
min-rx-interval receive-interval表示期望从对端接收BFD报文的最小接收间隔。
min-tx-interval transmit-interval表示向对端发送BFD报文的最小发送间隔。
detect-multiplier multiplier-value表示本地检测倍数。

8.7 BFD联动静态路由

在R1上配置到达R4的Loopback0:4.4.4.4/32网段的浮动静态路由,正常情况下通过R2访问R4,当R2故障时,自动选路通过R3访问R4的Loopback0;在R1与R2之间建立BFD会话,
并与静态路由绑定,实现故障快速检测和路径快速收敛。
配置步骤:
静态路由配置省略
# BFD基本配置

[R1]bfd
[R1]bfd 12 bind peer 10.0.12.2 interface GigabitEthernet 0/0/1
[R1-bfd-session-12]discriminator local 10
[R1-bfd-session-12]discriminator remote 20
[R1-bfd-session-12]commit
[R2]bfd
[R2]bfd 21 bind peer 10.0.12.1 interface GigabitEthernet 0/0/1
[R2-bfd-session-21]discriminator local 20
[R2-bfd-session-21]discriminator remote 10
[R2-bfd-session-21]commit
#联动BFD配置
[R1]ip route-static 4.4.4.4 32 10.0.12.2 track bfd-session 12  //联动BFD关键配置
[R1]ip route-static 4.4.4.4 32 10.0.13.2 preference 100


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网工老刘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值