2022-08-24 网工进阶(二十八) BFD-概述、报文结构、会话建立、会话状态、检测时间、检测模式、Echo功能、应用场景举例(单跳检测、多跳检测、与VRRP联动、与OSPF联动)、其他常见配置

BFD概述

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

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

由于同一个数据路径上只建立一个BFD会话,如果不同的应用使用的BFD参数不一致,则应该配置一个能满足所有应用要求的BFD参数。 

BFD报文结构

BFD控制报文根据场景不同封装不同,报文结构由强制部分和可选的认证字段组成。

Ver:BFD协议版本号,目前为1。

Diag:诊断字,标明本地BFD系统最近一次会话状态发生变化的原因。

Sta:BFD本地状态。

P:参数发生改变时,发送方在BFD报文中置该标志,接收方必须立即响应该报文。

F:响应P标志置位的回应报文中必须将F标志置位。

C:转发/控制分离标志,一旦置位,控制平面的变化不影响BFD检测。

A:认证标识,置1代表会话需要进行验证。

D:查询请求,置位代表发送方期望采用查询模式对链路进行监测。

M:为BFD将来支持点对多点扩展而设的预留位。

Detect Mult:检测超时倍数,用于检测方计算检测超时时间。

Length:报文长度,单位为字节。

My Discriminator:BFD会话连接本地标识符(Local Discriminator) 。发送系统产生的一个唯一的、非0鉴别值,用来区分一个系统的多个BFD会话。 

Your Discriminator:BFD会话连接远端标识符(Remote Discriminator) 。从远端系统接收到的鉴别值,这个域直接返回接收到的“My Discriminator”,如果不知道这个值就返回0。 

Desired Min TX Interval:本地支持的最小BFD报文发送间隔。 

Required Min RX Interval:本地支持的最小BFD报文接收间隔。

Required Min Echo RX Interval:本地支持的最小Echo报文接收间隔,单位为微秒(如果本地不支持Echo功能,则设置0)。
 

抓包观察

1 协议版本:1

2 诊断字:无

3 当前状态:UP

4 标志位:未配置

5 检测倍率:3(失效时间300毫秒)

6 报文长度:24字节

7 本地标识符:2

8 远端标识符:1

9 发送间隔:100毫秒

10 接收间隔:100毫秒

11 回声功能间隔:0

BFD会话建立

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

静态建立BFD会话

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

动态建立BFD会话

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

当应用程序触发动态创建BFD会话时,系统分配属于动态会话标识符区域的值作为BFD会话的本地标识符。然后向对端发送Remote Discriminator的值为0的BFD控制报文,进行会话协商。

当BFD会话的一端收到Remote Discriminator的值为0的BFD控制报文时,判断该报文是否与本地BFD会话匹配,如果匹配,则学习接收到的BFD报文中Local Discriminator的值,获取远端标识符。

BFD会话状态

BFD会话有四种状态:DownInitUpAdminDown。会话状态变化通过BFD报文的State字段传递,系统根据自己本地的会话状态和接收到的对端BFD报文驱动状态改变,BFD状态机的建立和拆除都采用三次握手机制,以确保两端系统都能知道状态的变化。

BFD会话过程中包含有三个状态:init和up两个用来建立会话,down用来断开会话。建立和断开会话都需要三次握手确保两端系统都感知到。另外还有一个特殊状态:管理down,使会话可以通过管理手段down,在状态机中管理down也是down状态。每个系统通过报文中的sta域发送本端状态,接收报文中的sta域了解对端状态,综合起来决定状态机的跳转。

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状态

管理down意味着会话是被管理操作down的,这会导致远端系统会话进入down状态,并且一直保持down状态直到本端退出管理down。管理down并不意味着转发路径的连通性问题。

BFD检测模式

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

异步模式

系统之间相互周期性地发送BFD控制包,如果某个系统在检测时间内没有收到对端发来的BFD控制报文,就宣布会话为Down。

查询模式

在需要验证连接性的情况下,系统连续发送多个BFD控制包,如果在检测时间内没有收到返回的报文就宣布会话为Down。

 异步模式和查询模式的本质区别:异步模式下相互监测,查询模式下本端单方面监测远端。

BFD检测时间

BFD会话检测时长由TX发送时间间隔(Desired Min TX Interval),RX接收时间间隔(Required Min RX Interval),DM监测倍数(Detect Multi、用于检测方计算检测超时时间)三个参数决定。BFD报文的实际发送时间间隔,实际接受时间间隔由BFD会话协商决定

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

PS:MAX函数指选取范围中的最大值。

本地BFD报文实际检测时间:

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

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

如图:

BFD缺省时间参数

BFD报文发送间隔默认1000毫秒,接受间隔默认1000毫秒,本地检测倍数3次。

BFD会话等待恢复时间0秒,会话延迟Up时间0秒。

BFD Echo功能

BFD Echo功能也称为BFD回声功能,是由本地发送BFD Echo报文,远端系统将报文环回的一种检测机制。

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

BFD应用场景举例

单跳检测二层链路

单跳指只有1跳的链路

 交换机1配置

//开启BFD
[SW1]bfd

[SW1-bfd]q

//创建BFD会话10,绑定组播地址与出接口1(当用于二层监测时用default ip组播进行绑定)
[SW1]bfd 10 bind peer-ip default-ip interface GigabitEthernet 0/0/1


//配置本地标识符为1
[SW1-bfd-session-10]discriminator local 1

//配置远端标识符为2
[SW1-bfd-session-10]discriminator remote 2

//配置BFD状态于接口联动(用于default ip)
[SW1-bfd-session-10]process-interface-status

//提交配置
[SW1-bfd-session-10]commit 

交换机2配置(本地标识符和远端标识与交换机1相反)

[SW2]bfd
[SW2-bfd]q
[SW2]bfd 10 bind peer-ip default-ip interface GigabitEthernet 0/0/1
[SW2-bfd-session-10]discriminator local 2
[SW2-bfd-session-10]discriminator remote 1
[SW2-bfd-session-10]process-interface-status
[SW2-bfd-session-10]commit

查看BFD详细状态

<SW1>display bfd session all verbose
--------------------------------------------------------------------------------
Session MIndex : 256       (One Hop) State : Up        Name : 10             
--------------------------------------------------------------------------------
  Local Discriminator    : 1                Remote Discriminator   : 2         
  Session Detect Mode    : Asynchronous Mode Without Echo Function             
  BFD Bind Type          : Interface(GigabitEthernet0/0/1)                     
  Bind Session Type      : Static                                              
  Bind Peer IP Address   : 224.0.0.184                                         
  NextHop Ip Address     : 224.0.0.184                                         
  Bind Interface         : GigabitEthernet0/0/1                                
  FSM Board Id           : 0                TOS-EXP                : 7         
  Min Tx Interval (ms)   : 1000             Min Rx Interval (ms)   : 1000      
  Actual Tx Interval (ms): 1000             Actual Rx Interval (ms): 1000      
  Local Detect Multi     : 3                Detect Interval (ms)   : 3000      
  Echo Passive           : Disable          Acl Number             : -         
  Destination Port       : 3784             TTL                    : 255       
  Proc Interface Status  : Enable                                            
  WTR Interval (ms)      : -                                                   
  Active Multi           : 3                                                   
  Last Local Diagnostic  : No Diagnostic                                       
  Bind Application       : No Application Bind
  Session TX TmrID       : 1035             Session Detect TmrID   : 1036      
  Session Init TmrID     : -                Session WTR TmrID      : -         
  Session Echo Tx TmrID  : -                                                   
  ---- More ----

单跳检测VLANIF接口

交换机1配置

[SW1]bfd
[SW1-bfd]q

//指定SW1的IP地址和本地的vlanid接口
[SW1]bfd 10 bind peer-ip 10.1.0.2 interface Vlanif 10

[SW1-bfd-session-10]discriminator local 1
[SW1-bfd-session-10]discriminator remote 2
[SW1-bfd-session-10]commit 

//物理接口配置
#
interface GigabitEthernet0/0/1
 port link-type trunk
 port trunk allow-pass vlan 2 to 4094
#

交换机2配置

[SW2]bfd 
[SW2-bfd]q
[SW2]bfd 10 bind peer-ip 10.1.0.1 interface Vlanif 10
[SW2-bfd-session-10]discriminator local 2
[SW2-bfd-session-10]discriminator remote 1
[SW2-bfd-session-10]commit 

//物理接口配置
#
interface GigabitEthernet0/0/1
 port link-type trunk
 port trunk allow-pass vlan 2 to 4094
#

多跳检测

多跳检测必须指定IP地址,因此必须应用在三层链路上。

需求:R1和R3为非直连设备,通过配置静态路由互通。用户希望可以实现对设备间链路故障的快速检测。

路由器1配置

[R1]bfd 
[R1-bfd]q
[R1]bfd 10 bind peer-ip 10.1.1.3
[R1-bfd-session-10]discriminator local 1
[R1-bfd-session-10]discriminator remote 2
[R1-bfd-session-10]commit 

路由器3配置

[R3]bfd
[R3-bfd]q
[R3]bfd 10 bind peer-ip 10.1.0.1
[R3-bfd-session-10]discriminator local 2
[R3-bfd-session-10]discriminator remote 1
[R3-bfd-session-10]commit 

VRRP监视BFD会话

路由器1配置

[R1]bfd
[R1-bfd]q
[R1]bfd 10 bind peer-ip 10.1.0.2 interface GigabitEthernet 0/0/1
[R1-bfd-session-10]discriminator local 1
[R1-bfd-session-10]discriminator remote 2
[R1-bfd-session-10]commit

[R1-GigabitEthernet0/0/1]vrrp vrid 10 virtual-ip 10.1.0.100
[R1-GigabitEthernet0/0/1]vrrp vrid 10 priority 150

//VRRP监视BFD会话1
[R1-GigabitEthernet0/0/1]vrrp vrid 10 track bfd-session 1

路由器2配置

[R2]bfd
[R2-bfd]q
[R2]bfd 10 bind peer-ip 10.1.0.1 interface GigabitEthernet 0/0/1
[R2-bfd-session-10]discriminator local 2
[R2-bfd-session-10]discriminator remote 1
[R2-bfd-session-10]commit 

[R2-GigabitEthernet0/0/1]vrrp vrid 10 virtual-ip 10.1.0.100

//VRRP监视BFD会话2
[R2-GigabitEthernet0/0/1]vrrp vrid 10 track bfd-session 2

检测OSPF链路

相关命令

//在OSPF中开启bfd监测功能
[R1-ospf-1]bfd all-interfaces enable

//在接口下开启bfd监测
[R1-GigabitEthernet0/0/0]ospf bfd enable

//在接口下关闭bfd监测功能
[R1-GigabitEthernet0/0/0]ospf bfd block

其他常见配置命令

//配置动态BFD
bfd 10 bind peer-ip 10.1.0.1 source-ip 10.1.0.2 auto 

//配置期望发送时间间隔(实际间隔需要协商)
[R2-bfd-session-10]min-tx-interval ?
  INTEGER<10-2000>  Minimum transmit interval in milliseconds, default is 1000ms

//配置期望接收时间间隔(实际间隔需要协商)
[R2-bfd-session-10]min-rx-interval ?
  INTEGER<10-2000>  Minimum receive interval in milliseconds, default is 1000ms

//配置监测倍速
[R2-bfd-session-10]detect-multiplier ?
  INTEGER<3-50>  Detect multiplier, default is 3

//配置管理down
[R2-bfd-session-10]shutdown

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鹅一只

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

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

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

打赏作者

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

抵扣说明:

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

余额充值