BFD技术学习笔记

1.BFD概述

BFD(Bidirectional Forwarding Detection)即双向转发检测,是一种用于检测两个转发点之间故障的网络协议。它提供了一种轻量级的、快速检测链路或者路径故障的机制。

工作方式:BFD 在两个系统(通常是网络设备,如路由器、交换机等)之间建立会话,通过发送和接收检测报文来监控链路的状态。这两个系统会周期性地互相发送 BFD 报文,就像互相发送 "心跳信号" 一样。如果在规定的时间内没有收到对方的 BFD 报文,就会认为链路出现故障。

概述:毫秒级链路故障检查,通常结合三层协议(如静态路由、vrrp、 ospf、 BGP等)实现链路故障快速切换。

作用:

① 检测二层非直连故障

② 加快三层协议收敛

2.静态路由联动BFD

(1)R1和R2两个设备直连,当一端链路出现故障,例如断开E0/0/0接口的链路,那么数据的转发会切换到E0/0/1接口进行转发:

R1:

sys

sysname R1

undo info-center enable

interface Ethernet0/0/0

ip address 12.1.1.1 255.255.255.0

interface Ethernet0/0/1

ip address 21.1.1.1 255.255.255.0

interface LoopBack0

ip address 1.1.1.1 255.255.255.0

ip route-static 2.2.2.0 255.255.255.0 12.1.1.2 preference 50

将路由优先级改为50 设置为优选路径

ip route-static 2.2.2.0 255.255.255.0 21.1.1.2

R2:

sys

sysname R2

undo info-center enable

interface Ethernet0/0/0

ip address 12.1.1.2 255.255.255.0

interface Ethernet0/0/1

ip address 21.1.1.2 255.255.255.0

ip route-static 1.1.1.0 255.255.255.0 12.1.1.1 preference 50

ip route-static 1.1.1.0 255.255.255.0 21.1.1.1

检查1.1.1.1是否经过E0/0/0接口转发,访问2.2.2.2。

R1:tracert 2.2.2.2

接下来在R1上对2.2.2.2进行长ping模拟断开E0/0/0接口的链路,观察变化。

ping -c 1000 -a 1.1.1.1 2.2.2.2 以1.1.1.1 为源地址ping 2.2.2.2次数1000次

上图结果可以看到,在直连的情况下,互为备份的两条链路,有一条出现断开之后,另一条可以快速接管进行数据的转发。

(2)R1和R2两个设备非直连,当一端链路出现故障,例如SW与R2互连链路断开,数据的转发无法切换过来,因为R1的E0/0/0接口还是UP状态。不同于直连时的情况E0/0/0接口是Down的状态,因此会切换过去:

接下来在R1上对2.2.2.2进行长ping模拟断开SW与R2互连的链路,观察变化。

ping -c 1000 -a 1.1.1.1 2.2.2.2 以1.1.1.1 为源地址ping 2.2.2.2次数1000次

通过dis ip routing-table protocol static查看路由表协议信息,静态路由中去往2.2.2.0的下一跳还是12.1.1.2,而SW与R2互连的链路已经断开,R1无法感知到链路断开,因此始终无法进行切换备份链路。

由此引出BFD技术,运用在非直连的情况,使得链路故障快速恢复,切换到备份转发。

2.1静态路由联动静态BFD

配置静态BFD

R1:

bfd 全局使能bfd

bfd aa bind peer-ip 12.1.1.2 source-ip 12.1.1.1

discriminator local 1 本地标识 两台路由器的标识需要互为对称

discriminator remote 2 对端标识

比如说R1的本地标识设置为1了,那么在R2设置的对端标识要为1,互为对称。

在R1设置了对端标识为2,那么R2上配置时就需要设置本地标识为2。

commit 确认提交配置

ip route-static 2.2.2.0 255.255.255.0 12.1.1.2 preference 50 track bfd-session aa

在静态路由上调用跟踪名为aa的BFD会话状态

R2:

bfd

quit

bfd aa bind peer-ip 12.1.1.1 source-ip 12.1.1.2

discriminator local 2

discriminator remote 1

commit

quit

ip route-static 1.1.1.0 255.255.255.0 12.1.1.1 preference 50 track bfd-session aa

配置完成可以通过命令:display bfd session static查看静态 BFD会话信息

display bfd session static verbose查看静态 BFD会话详细信息

接下来模拟当SW与R2互连链路断开时,观察BFD与静态路由联动的效果:

ping -c 1000 -a 1.1.1.1 2.2.2.2 以1.1.1.1 为源地址ping 2.2.2.2次数1000次

由上图结果可以看到,当非直连无法感知到的链路出现断开时,R1设备通过BFD会话状态响应快速切换到备份链路,恢复数据的转发。

2.2静态路由联动动态BFD

首先把上面配置的静态BFD进行取消掉

R1:

undo bfd

y

R2:

undo bfd

y

配置动态BFD

R1:

bfd

quit

bfd bb bind peer-ip 12.1.1.2 source-ip 12.1.1.1 auto

commit

quit

ip route-static 2.2.2.0 255.255.255.0 12.1.1.2 preference 50 track bfd-session bb

R2:

bfd

quit

bfd bb bind peer-ip 12.1.1.1 source-ip 12.1.1.2 auto

commit

quit

ip route-static 1.1.1.0 255.255.255.0 12.1.1.1 preference 50 track bfd-session bb

配置完成通过命令display bfd session all verbose查看BFD会话所有的详细信息

接下来模拟当SW与R2互连链路断开时,观察BFD与静态路由联动的效果:

ping -c 1000 -a 1.1.1.1 2.2.2.2 以1.1.1.1 为源地址ping 2.2.2.2次数1000次

3.OSPF联动BFD

ospf 调用BFD 加快收敛

先把上一小节BFD和静态路由的配置命令取消

R1:

undo bfd

y

undo ip route-static 2.2.2.0 255.255.255.0 12.1.1.2 preference 50

undo ip route-static 2.2.2.0 255.255.255.0 21.1.1.2

R2:

undo bfd

y

undo ip route-static 1.1.1.0 255.255.255.0 12.1.1.1 preference 50

undo ip route-static 1.1.1.0 255.255.255.0 21.1.1.1

接着配置OSPF,并增加一台SW2

R1:

ospf 1 router-id 1.1.1.1

area 0.0.0.0

network 1.1.1.0 0.0.0.255

network 12.1.1.0 0.0.0.255

network 21.1.1.0 0.0.0.255

R2:

ospf 1 router-id 2.2.2.2

ospf 1 router-id 2.2.2.2

area 0.0.0.0

network 2.2.2.0 0.0.0.255

network 12.1.1.0 0.0.0.255

network 21.1.1.0 0.0.0.255

配置完成后,通过命令display ip routing-table查看路由表信息

接着到R1的E0/0/1接口修改OSPF的cost值,使得R1与R2直连链路作为备选链路。

interface Ethernet 0/0/1

ospf cost 3

quit

默认情况下,OSPF是10s发送一次Hello报文,当链路出现故障时,需要等待40s才知道对方链路断开进行切换。OSPF的Hello报文发送时间也是可以进行修改,最小可以达到1秒发送一次,死亡间隔4 倍,也需要4秒才进行链路状态更新操作。

在不使用BFD的情况下,模拟OSPF链路出现故障,观察其现象。

ping -c 1000 -a 1.1.1.1 2.2.2.2 以1.1.1.1 为源地址ping 2.2.2.2次数1000次

由上图现象可以看到,当OSPF链路出现故障时,默认情况下需要等待40秒才进行链路状态更新,切换到备份链路上。

而使用BFD能够加快OSPF的收敛,默认情况下,BFD为1000毫秒发送一次"心跳信号",死亡间隔时间3倍,3000毫秒完成切换。其最小可以设置100ms,那么300ms就可以完成感知切换。

配置BFD

R1:

bfd

quit

ospf 1

bfd all-interfaces enable 所有位于ospf 的接口全部启用

quit

R2:

bfd

quit

ospf 1

bfd all-interfaces enable

quit

配置完成,通过命令display bfd session dynamic查看动态的BFD会话信息

通过命令display bfd session dynamic verbose查看动态的BFD会话详细信息

通过命令display bfd session all查看BFD所有的会话

在使用BFD后,再模拟OSPF链路出现故障,观察其现象。

ping -c 1000 -a 1.1.1.1 2.2.2.2 以1.1.1.1 为源地址ping 2.2.2.2次数1000次

由上图可以看到,联动BFD后,OSPF的链路状态的收敛加快。要修改BFD的Hello报文时间,最小可以修改到100ms。

4.BFD单臂回声

BFD 单臂回声(BFD Echo)是 BFD(Bidirectional Forwarding Detection)协议中的一种故障检测机制。在单臂回声模式下,一个网络设备(通常是路由器)通过自己发送的 BFD Echo 报文来检测链路的连通性,而不是依赖对端设备发送的 BFD 报文进行检测。

工作原理:启用 BFD 单臂回声的设备会将 BFD Echo 报文发送到链路的对端。这些报文会沿着数据链路传输到对端设备,然后对端设备将收到的 BFD Echo 报文再环回(Loopback)给发送端。发送端根据收到的自己发送的 Echo 报文来判断链路是否正常。如果在规定的时间内没有收到自己发送的 Echo 报文的回环,就认为链路出现故障。

配置BFD单臂回声

(1)取消掉第3小节配置的ospf和接口开销

R1:

interface Ethernet0/0/1

undo ospf cost

undo ospf 1

y

R2:

undo ospf 1

y

(2)配置静态路由

R1:

ip route-static 2.2.2.0 255.255.255.0 12.1.1.2 preference 50

ip route-static 2.2.2.0 255.255.255.0 21.1.1.2

R2:

ip route-static 1.1.1.0 255.255.255.0 12.1.1.1 preference 50

ip route-static 1.1.1.0 255.255.255.0 21.1.1.1

(3)配置BFD

bfd

quit

bfd aa bind peer-ip 12.1.1.2 interface Ethernet0/0/0 source-ip 21.1.1.1 one-arm-echo

discriminator local 100

commit

注意:

source-ip 21.1.1.1是BFD报文的源地址

interface e0/0/0 BFD单臂回声报文的目的地址即12.1.1.1(如下图抓包)通常为出接 口。

peer-ip 12.1.1.2 对端地址 BFD需要依靠该地址探测对方的mac地址 同时作为建立bfd 会话使用见下图(并不用作bfd报文目标地址)

ip route-static 2.2.2.0 255.255.255.0 12.1.1.2 preference 50 track bfd-session aa

通过断开SW1与R2互连链路,观察其现象。

ping -c 1000 -a 1.1.1.1 2.2.2.2 以1.1.1.1 为源地址ping 2.2.2.2次数1000次

由上图结果可以看到,当链路出现故障后,单臂回声检测不到,立马切换到备选链路。

相关推荐
半夜偷删你代码4 分钟前
鸿蒙中调整应用内文字大小
华为·harmonyos
欧老八30 分钟前
工作中Excel技巧整理
笔记
hgdlip1 小时前
手机的ip地址是根据电话卡归属地定吗
网络·网络协议·tcp/ip·手机
Spcarrydoinb1 小时前
python学习笔记—17—数据容器之字符串
笔记·python·学习
夜半被帅醒1 小时前
【JAVA】Java开发小游戏 - 简单的2D平台跳跃游戏 基本的2D平台跳跃游戏框架,适合初学者学习和理解Java游戏开发的基础概念
java·学习·游戏
杂货铺的小掌柜2 小时前
spring mvc源码学习笔记之八
学习·spring·mvc
前端熊猫3 小时前
学习HTTP Range
学习
DanceDonkey3 小时前
基于Socket实现Http类SSE效果
网络·网络协议·http
!!!5253 小时前
HTTP-响应协议
网络·网络协议·http
勿忘初心913 小时前
Android车机DIY开发之学习篇(二)编译Kernel以正点原子为例
android·arm开发·单片机·嵌入式硬件·学习·eclipse