1.1.0 IGP高级特性之BFD

2023-12-26 12:01:45

双向转发检测技术

BFD(Bidirectional Forwarding Detection,双向转发检测)

提供了一个通用的、标准化的、介质无关和协议无关的快速故障检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状态。【每个厂家都支持的】

BFD建立的关系叫作BFD会话,会话建立后会周期性地快速发送BFD报文,如果在检测时间内没有收到BFD报文则认为该双向转发路径发生了故障,通知被服务的上层应用进行相应的处理。如果此时与OSPF进行绑定,那么将会断开相应的邻居关系。

  • BFD主要起到一种快速检测作用,用于提供更快的故障检测方式。

如下图,A设备与B设备通过光纤连接,中间经过光传输设备。

  • 当传输设备B方向端出现故障,A设备无法快速感知,只能等待**邻居超时(40秒)**才会断开邻居关系。
  • 等待正式断开期间的40多秒会导致大量的转发流量丢包,造成业务短暂中断。
    在这里插入图片描述

如下图,AB设备上建立BFD会话与OSPF进行绑定,实现快速检测,当中间链路故障后一定时间,BFD会话断开,将会马上触发A与B设备的OSPF邻居关系中断,从而防止大量流量丢包。

扩展:邻居断开之后,OSPF需要重新计算拓扑再进行路由也需要消耗一定时间。

为此可以配合FRR技术实现OSPF故障之后的快速收敛。
在这里插入图片描述

报文字段

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

下图中,标注出下文中常见最多的一些报文字段信息:

在这里插入图片描述
在这里插入图片描述

其它字段可自行查看《IP报文格式大全.html

工作原理

BFD主要是通过让两端建立起一条BFD会话,然后通过指定的检测方式进行检测对方是否存活,如果判定对方死亡,将马上中断BFD会话。

第一阶段:会话建立

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

静态和动态创建BFD会话的主要区别在于本地标识符(Local Discriminator)远端标识符(Remote Discriminator)配置方式不同。

BFD通过控制报文中的【My Discriminator字段】和【Your Discriminator字段】区分不同的会话。

如下图:

  • 静态建立会话需要手动指定本地与远端的标识符
  • 动态建立则只需要配置本端的标识符

在这里插入图片描述

BFD会话状态机

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

会话状态变化通过BFD报文的【Sta字段】传递,系统根据自己本地的会话状态和接收到的对端BFD报文驱动状态改变。

BFD状态机的建立和拆除都采用三次握手机制,以确保两端系统都能知道状态的变化。

BFD会话建立过程

在这里插入图片描述

下图抓包中,R2向R1发送Sta=Down,R1进入Init状态后回复Sta=Init,R2收到Init回复之后进入到Up状态并回复R1 Sta=up,后继双方定期发送Sta=Up的BFD报文进行保活。

在这里插入图片描述

BFD会话拆除过程

BFD中关闭BFD会话,与删除BFD会话都会向对端发送Sta=AdminDown的BFD报文,使得对端快速断开会话。

192.168.2.1为R1/A

192.168.2.2为R2/B
在这里插入图片描述

会话断开之后,由于R2的会话还未删除,故会定期的发送BFD给R1。

故从现象得知,Sta=AdminDown的作用是通知对方断开与自己的会话状态,而不会删除对端的会话

而R2定期的发送BFD报文可以使得R1重新建立会话时可以快速的建立。

BFD抓包

BFD抓包中,会看到 Info信息中有显眼的【Diag字段】,它是BFD的诊断字。

BFD诊断字,标明本地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 目前未使用到的标识

抓包举例:下图中(192.168.2.2)端最近一次断开会话是因为Neighbor Signaled Session Down邻居会话断开,即对端手动断开会话/删除会话导致的

在这里插入图片描述

第二阶段:维持会话

两个系统建立BFD会话,并周期性发送BFD控制报文,如果一方在既定的时间内没有收到BFD控制报文,则认为路径上发生了故障,即会断开会话。

BFD的检测模式有异步模式查询模式两种。

异步模式:周期性地向对方发送BFD报文,如果在检测时间内没有收到对端的BFD报文,则会话断开(Down)。

查询模式:在需要验证连接性的情况下,系统连续向对端发送多个BFD报文,如果在检测时间内没有收到返回的报文则会话断开(Down)。

在这里插入图片描述

检测间隔

BFD会话检测时长由TX(Desired Min TX Interval),RX(Required Min RX Interval),DM(Detect Multi)三个参数决定。

BFD报文的实际发送时间间隔实际接受时间间隔由BFD会话协商决定,即双方间隔不一致时需要进行协商出双方都能接收的间隔。

默认情况下的参数

Tx 发送间隔,1000毫秒

Rx 接收间隔,1000毫秒

DM 检测倍数,3倍

时间间隔协商规则

本地BFD报文实际发送时间间隔TX=MAX {本地配置的发送时间间隔,对端配置的接收时间间隔 }

本地BFD报文实际接收时间间隔RX=MAX { 对端配置的发送时间间隔,本地配置的接收时间间隔 }

本地BFD报文实际检测时间

  • 异步模式:本地BFD报文实际检测时间=本地BFD报文实际接收时间间隔×对端配置的BFD检测倍数
  • 查询模式:本地BFD报文实际检测时间 = 本地BFD报文实际接收时间间隔×本端配置的BFD检测倍数

协商案例如下

R1协商TX = (本地TX100ms,对端RX50ms)取最大值,故TX=100ms

R1协商RX = (本地RX200ms,对端TX150ms)取最大值,故RX=200ms

R1异步模式下的检测时间 = RX200ms * 对端DM 4

R1查询模式下的检测时间 = RX200ms * 本端DM 3

在这里插入图片描述

其它功能

BFD Echo 回声

由本地发送BFD Echo报文,远端系统将报文环回的一种检测机制(我发给对端,对端重新发回来给我,对端并不需要读取报文中的内容)。

主要应用于两台直接相连的设备中,其中一台设备支持BFD功能(R1);另一台设备不支持BFD功能(R2),只支持基本的网络层转发。

为了能够快速的检测这两台设备之间的故障,可以在支持BFD功能的设备上创建单臂回声功能的BFD会话。

注意:PC设备并不支持IP路由功能,故需要与PC端建立BFD Echo回声功能

在这里插入图片描述

BFD 多跳检测

常规下BFD用于设备与设备之间进行检测链路通断,而BFD多跳检测则可以跨越多个设备进行与对端进行BFD检测。

关于多跳与单跳之间的利弊简单分析:

  1. BFD多跳检测:
    利:可以检测两个系统间的任意路径,这些路径可能跨越很多跳,也可能在某些部分发生重叠。这种检测方式可以确保整个链路的连通性,但无法判断具体故障节点位置。
    弊:多跳检测需要跨越多个其他设备,可能增加故障排查的复杂性。
  2. BFD单跳检测:
    利:设置设备只在相邻的设备之间进行测试,能够具体判断出现故障的节点位置。
    弊:单跳检测只能测试相邻设备之间的连通性,无法检测整个链路的连通性。

如下图,可以很明显看出区别:

在这里插入图片描述

但可能会有疑问:AR3到AR8如果原先走465(上链路),如果AR6故障了,路由重新切换回475(下链路)的时候是否会出现BFD会话中断?

不会中断,因为默认情况下,对于AR4来说去往AR8走AR6、AR7都是等价的,如果AR6故障了,那么将会马上切换到AR7上进行流量转发,切换过程会非常快,并不需要重新计算。

配置命令介绍

基础BFD会话建立

实验拓扑:

仅有AR3、AR4路由设备,互联地址10.1.34.0/34。
在这里插入图片描述

实验需求:

AR3与AR4之间建立BFD会话检测保障链路故障后能够快速感知。

AR3

[AR3]bfd
[AR3-bfd]quit
[AR3]bfd 1 bind peer-ip default-ip interface g0/0/0
[AR3-bfd-session-1]discriminator local 3
[AR3-bfd-session-1]discriminator remote 4
[AR3-bfd-session-1]commit 

AR4

[AR4]bfd
[AR4-bfd]quit
[AR4]bfd 1 bind peer-ip default-ip interface g0/0/0
[AR4-bfd-session-1]discriminator local 4
[AR4-bfd-session-1]discriminator remote 3
[AR4-bfd-session-1]commit 
(1)查看BFD状态

AR3

<AR3>dis bfd session all 
--------------------------------------------------------------------------------
Local Remote     PeerIpAddr      State     Type        InterfaceName            
--------------------------------------------------------------------------------

3     4          224.0.0.184     Up        S_IP_IF     GigabitEthernet0/0/0     
--------------------------------------------------------------------------------
     Total UP/DOWN Session Number : 1/0

AR4

<AR4>dis bfd session all 
--------------------------------------------------------------------------------
Local Remote     PeerIpAddr      State     Type        InterfaceName            
--------------------------------------------------------------------------------

4     3          224.0.0.184     Up        S_IP_IF     GigabitEthernet0/0/0     
--------------------------------------------------------------------------------
     Total UP/DOWN Session Number : 1/0
(2)观察抓包信息

缺省情况下,BFD使用组播IP地址224.0.0.184作为目的地址发送BFD报文。

也可进入BFD会话中进行修改默认组播地址:

[AR3]bfd

[AR3-bfd]default-ip-address ?
IP_ADDR<X.X.X.X> Default multicast address 224.0.0.107-224.0.0.250

在这里插入图片描述

BFD多跳检测

实验拓扑:

在这里插入图片描述

实验需求:

由于AR3与AR8建立起了IBGP邻居关系,为了提高链路故障之后快速感知,要求AR3与AR8建立BFD多跳检测保障设备之间存在通信故障时能够快速断开IBGP邻居防止大量数据丢包。

省略配置路由协议部分,使得AR3能够访问到AR8的环回口地址

[AR3]ping -a 3.3.3.3 8.8.8.8
  PING 8.8.8.8: 56  data bytes, press CTRL_C to break
    Reply from 8.8.8.8: bytes=56 Sequence=1 ttl=252 time=260 ms
    Reply from 8.8.8.8: bytes=56 Sequence=2 ttl=252 time=50 ms
    Reply from 8.8.8.8: bytes=56 Sequence=3 ttl=252 time=40 ms

[AR8]ping -a 8.8.8.8 3.3.3.3
  PING 3.3.3.3: 56  data bytes, press CTRL_C to break
    Reply from 3.3.3.3: bytes=56 Sequence=1 ttl=252 time=50 ms
    Reply from 3.3.3.3: bytes=56 Sequence=2 ttl=252 time=40 ms
    Reply from 3.3.3.3: bytes=56 Sequence=3 ttl=252 time=40 ms

AR3

[AR3]bfd
[AR3-bfd]quit
[AR3]bfd 1 bind peer-ip 8.8.8.8 source-ip 3.3.3.3
[AR3-bfd-session-1]discriminator local 3
[AR3-bfd-session-1]discriminator remote 8
[AR3-bfd-session-1]commit 

AR8

[AR8]bfd
[AR8-bfd]quit
[AR8]bfd 1 bind peer-ip 3.3.3.3 source-ip 8.8.8.8
[AR8-bfd-session-1]discriminator local 8
[AR8-bfd-session-1]discriminator remote 3
[AR8-bfd-session-1]commit 
(1)查看BFD状态

AR3

<AR3>dis bfd session all 
--------------------------------------------------------------------------------
Local Remote     PeerIpAddr      State     Type        InterfaceName            
--------------------------------------------------------------------------------

3     8          8.8.8.8         Up        S_IP_PEER         -                  
--------------------------------------------------------------------------------
     Total UP/DOWN Session Number : 1/0

AR8

<AR8>dis bfd session all 
--------------------------------------------------------------------------------
Local Remote     PeerIpAddr      State     Type        InterfaceName            
--------------------------------------------------------------------------------

8     3          3.3.3.3         Up        S_IP_PEER         -                  
--------------------------------------------------------------------------------
     Total UP/DOWN Session Number : 1/0

查看BFD详细信息

[AR3]display bfd session all verbose 

在这里插入图片描述

断开流量主用路径,观察BFD状态变化

现象:于AR4上手动关闭流量主用路径g0/0/2口之后,BFD状态无变化,BFD报文无变化。

流量及BFD报文自动切换到备份路径g0/0/1口进行转发,因为路由等价故无需重新计算路由即可快速进行切换转发。

在这里插入图片描述

(2)观察抓包信息

1、BFD多跳检测的三次握手

在这里插入图片描述

2、BFD的源目地址及端口信息

缺省情况下,BFD默认使用UDP 3784作为多跳BFD会话报文的目的端口号,而源端口随机

也可进入BFD会话中进行修改目的端口(2选1):

[AR3]bfd
[AR3-bfd]multi-hop destination-port ?
3784 The number of destination port
4784 The number of destination port

在这里插入图片描述

BFD Echo回声

实验拓扑:

在这里插入图片描述

AR5

[AR5]bfd
[AR5-bfd]quit
[AR5]bfd 1 bind peer-ip 10.1.58.8 interface g0/0/2 one-arm-echo
[AR5-bfd-session-1]discriminator local 10
[AR5-bfd-session-1]commit

疑问:诶?如果peer-ip使用default-ip组播地址的话,还能不能实现Echo回声?

不能,如果peer-ip为组播地址,那么AR5将组播包发送给AR8时,由于对端并没有加入这个组播中,故不会将该数据包重新发回给AR5。

同时也可以输入命令查看补全情况:组播作用目的并不能配置Echo回声功能

[AR5]bfd 1 bind peer-ip default-ip interface g0/0/2 ?
source-ip Set source IP address
Please press ENTER to execute command

(1)查看BFD状态

AR5

<AR5>display bfd session all 
--------------------------------------------------------------------------------
Local Remote     PeerIpAddr      State     Type        InterfaceName            
--------------------------------------------------------------------------------

10    -          10.1.58.8       Up        S_IP_IF     GigabitEthernet0/0/2     
--------------------------------------------------------------------------------
     Total UP/DOWN Session Number : 1/0

查看BFD详细信息

[AR5]display bfd session all verbose 

在这里插入图片描述

(2)查看抓包信息

由于对端设备并不具备BFD功能,同时发过去的包会返回,故能够看两次三次握手的抓包信息。

在这里插入图片描述
在这里插入图片描述

案例介绍

BFD与OSPF联动

拓扑图:在这里插入图片描述

需求:

由于AR3与AR4之间经过其它网络设备,为了保证设备间链路或设备故障后能够快速切换链路或中断邻居关系,请在AR3、AR4设备上配置BFD检测功能与OSPF联动。

操作命令

AR3

  • 配置完成常规的OSPF操作之后,再开始配置BFD命令
[AR3]bfd
[AR3-bfd]quit
[AR3]ospf 1
[AR3-ospf-1]bfd all-interfaces enable 

AR4

  • 配置完成常规的OSPF操作之后,再开始配置BFD命令
[AR4]bfd
[AR4-bfd]quit
[AR4]ospf 1
[AR4-ospf-1]bfd all-interfaces enable 

默认情况下每秒发送1次BFD报文,3次未收到则超时,也可通过以下命令缩短收发间隔:

[AR3]int g0/0/0
[AR3-GigabitEthernet0/0/0]ospf bfd ?
  block              Disable BFD on this interface
  detect-multiplier  Specify the detect multiplier
  enable             Enable BFD
  frr-binding        Configure BFD binding link status for Auto FRR
  min-rx-interval    Specify the minimum receive interval
  min-tx-interval    Specify the minimum transmit interval

ospf bfd min-tx-interval 最小发送间隔(毫秒)
ospf bfd min-rx-interval 最小接收间隔(毫秒)


实验结果

(1)LSW4》AR4方向的端口shutdown,观察AR3设备何时断开邻居关系

在这里插入图片描述

(2)当端口关闭的3秒后,AR3设备BFD会话断开,紧接着AR3与AR4设备的OSPF邻居随即断开,实现了链路故障的快速检测。

BFD与BGP联动

拓扑图:

在这里插入图片描述

需求:

AR3与AR8通过环回口建立IBGP邻居,IGP协议使用OSPF,由于中间跨越多台设备,当设备之间网络故障时可能无法及时感知,故要求AR3与AR8建立BFD会话给BGP提供保障。

操作命令

AR3

  • 继上一个OSPF网络进行扩展,AR3与AR8相互学习到对方的环回口地址。
[AR3]bfd
[AR3-bfd]quit
[AR3]bgp 100
[AR3-bgp]router-id 3.3.3.3
[AR3-bgp]peer 8.8.8.8 as-number 100 
[AR3-bgp]peer 8.8.8.8 connect-interface LoopBack0
[AR3-bgp]peer 8.8.8.8 bfd enable

AR8

[AR3]bfd
[AR3-bfd]quit
[AR3]bgp 100
[AR3-bgp]router-id 8.8.8.8
[AR3-bgp]peer 3.3.3.3 as-number 100 
[AR3-bgp]peer 3.3.3.3 connect-interface LoopBack0
[AR3-bgp]peer 3.3.3.3 bfd enable

实验结果

(1)检查BGP及BFD的状态信息

<AR3>dis bfd session all 
--------------------------------------------------------------------------------
Local Remote     PeerIpAddr      State     Type        InterfaceName            
--------------------------------------------------------------------------------

8193  8195       10.1.34.4       Up        D_IP_IF     GigabitEthernet0/0/0     
8194  8192       8.8.8.8         Up        D_IP_PEER         -                  
--------------------------------------------------------------------------------
     Total UP/DOWN Session Number : 2/0
     
<AR8>dis bfd session all 
--------------------------------------------------------------------------------
Local Remote     PeerIpAddr      State     Type        InterfaceName            
--------------------------------------------------------------------------------

8192  8194       3.3.3.3         Up        D_IP_PEER         -                  
--------------------------------------------------------------------------------
     Total UP/DOWN Session Number : 1/0

在这里插入图片描述

(2)假设网络中仅剩下一条可用链路维持着BGP邻居关系,此时再断开AR4与AR6之间链路,观察AR3的BFD变化及BGP状态变化。

在这里插入图片描述

在这里插入图片描述

(3)BGP的BFD检测采用多跳检测,故只要当网络中还存在达到对端的路径就BFD会话就不会断开。直到最后一条链路断开之后,默认3秒超时才会断开BFD会话,从而相应的BGP邻居关系断开。

文章来源:https://blog.csdn.net/qq_45443704/article/details/135216236
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。