BFD简介
定义
双向转发检测BFD(Bidirectional Forwarding Detection)是一种全网统一的检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状况。
目的
为了减小设备故障对业务的影响,提高网络的可靠性,网络设备需要能够尽快检测到与相邻设备间的通信故障,以便及时采取措施,保证业务继续进行。在现有网络中,有些链路通常通过硬件检测信号,如SDH告警,检测链路故障,但并不是所有的介质都能够提供硬件检测。此时,应用就要依靠上层协议自身的Hello报文机制来进行故障检测。上层协议的检测时间都在1秒以上,这样的故障检测时间对某些应用来说是不能容忍的。在三层网络中,Hello报文检测机制无法针对所有路由来检测故障,如:静态路由。这对系统间互联互通定位故障造成困难。
BFD协议就是在这种背景下产生的,BFD提供了一个通用的标准化的介质无关和协议无关的快速故障检测机制。具有以下优点:
-
对相邻转发引擎之间的通道提供轻负荷、快速故障检测。这些故障包括接口、数据链路,甚至有可能是转发引擎本身。
-
用单一的机制对任何介质、任何协议层进行实时检测。
受益
BFD可以实现快速检测并监控网络中链路或IP路由的转发连通状态,改善网络性能。相邻系统之间通过快速检测发现通信故障,可以更快地帮助用户建立起备份通道以便恢复通信,保证网络可靠性。
BFD原理描述
原理简介
BFD在两台网络设备上建立会话,用来检测网络设备间的双向转发路径,为上层应用服务。BFD本身并没有邻居发现机制,而是靠被服务的上层应用通知其邻居信息以建立会话。会话建立后会周期性地快速发送BFD报文,如果在检测时间内没有收到BFD报文则认为该双向转发路径发生了故障,通知被服务的上层应用进行相应的处理。下面以OSPF与BFD联动为例,简单介绍会话工作流程。
如上图所示:
-
被检测链路出现故障。
-
BFD快速检测到链路故障,BFD会话状态变为Down。
-
BFD通知本地OSPF进程BFD邻居不可达。
-
本地OSPF进程中断OSPF邻居关系。
BFD会话建立方式
BFD会话的建立有两种方式,即静态建立BFD会话和动态建立BFD会话。静态和动态创建BFD会话的主要区别在于本地标识符(Local Discriminator)和远端标识符(Remote Discriminator)的配置方式不同。BFD通过控制报文中的Local Discriminator和Remote Discriminator区分不同的会话。
-
静态建立BFD会话
静态建立BFD会话是指通过命令行手工配置BFD会话参数,包括配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。
-
动态建立BFD会话
动态建立BFD会话时,系统对本地标识符和远端标识符的处理方式如下:
-
动态分配本地标识符
当应用程序触发动态创建BFD会话时,系统分配属于动态会话标识符区域的值作为BFD会话的本地标识符。然后向对端发送Remote Discriminator的值为0的BFD控制报文,进行会话协商。
-
自学习远端标识符
当BFD会话的一端收到Remote Discriminator的值为0的BFD控制报文时,判断该报文是否与本地BFD会话匹配,如果匹配,则学习接收到的BFD报文中Local Discriminator的值,获取远端标识符。
-
BFD会话管理
BFD会话有四种状态:Down、Init、Up和AdminDown。会话状态变化通过BFD报文的State字段传递,系统根据自己本地的会话状态和接收到的对端BFD报文驱动状态改变。BFD状态机的建立和拆除都采用三次握手机制,以确保两端系统都能知道状态的变化。以BFD会话建立为例,简单介绍状态机的迁移过程。
-
SwitchA和SwitchB各自启动BFD状态机,初始状态为Down,发送状态为Down的BFD报文。对于静态配置BFD会话,报文中的Remote Discriminator的值是用户指定的;对于动态创建BFD会话,Remote Discriminator的值是0。
-
SwitchB收到状态为Down的BFD报文后,状态切换至Init,并发送状态为Init的BFD报文。
-
SwitchB本地BFD状态为Init后,不再处理接收到的状态为Down的报文。
-
SwitchA的BFD状态变化同SwitchB。
-
SwitchB收到状态为Init的BFD报文后,本地状态切换至Up。
-
SwitchA的BFD状态变化同SwitchB。
拓扑图
S1基本配置
<Huawei>system-view
[Huawei]sysname S1[S1]undo info-center enable
[S1]vlan 10
[S1-vlan10]q配置设备间的网络互连
# 配置设备各接口的IP地址
[S1]interface GigabitEthernet 0/0/1
[S1-GigabitEthernet0/0/1]port link-type hybrid
[S1-GigabitEthernet0/0/1]port hybrid pvid vlan 10
[S1-GigabitEthernet0/0/1]port hybrid untagged vlan 10
[S1-GigabitEthernet0/0/1]q[S1]interface Vlanif 10
[S1-Vlanif10]ip address 10.1.1.1 24
[S1-Vlanif10]q配置静态路由,使S1、S3之间有可达路由
# SwitchC的配置与SwitchA类似,具体配置过程略,详见配置文件。
[S1]ip route-static 10.2.1.0 24 10.1.1.2配置多跳BFD检测
# 在S1上配置与S3之间的BFD会话。
[S1] bfd
[S1-bfd] quit
[S1] bfd atoc bind peer-ip 10.2.1.2
[S1-bfd-session-atoc] discriminator local 10
[S1-bfd-session-atoc] discriminator remote 20
[S1-bfd-session-atoc] commit
[S1-bfd-session-atoc] quit
S2基本配置配置设备间的网络互连
# 配置设备各接口的IP地址
<Huawei>system-view
[Huawei]sysname S2[S2]undo info-center enable [S2]vlan 10
[S2-vlan10]q[S2]interface GigabitEthernet 0/0/1
[S2-GigabitEthernet0/0/1]port link-type hybrid
[S2-GigabitEthernet0/0/1]port hybrid pvid vlan 10
[S2-GigabitEthernet0/0/1]port hybrid untagged vlan 10
[S2-GigabitEthernet0/0/1]q[S2]interface Vlanif 10
[S2-Vlanif10]ip address 10.1.1.2 24
[S2-Vlanif10]q[S2]interface GigabitEthernet 0/0/2
[S2-GigabitEthernet0/0/1]port link-type hybrid
[S2-GigabitEthernet0/0/1]port hybrid pvid vlan 20
[S2-GigabitEthernet0/0/1]port hybrid untagged vlan 20
[S2-GigabitEthernet0/0/1]q[S2]interface Vlanif 20
[S2-Vlanif10]ip address 10.2.1.1 24
[S2-Vlanif10]q
S3配置设备间的网络互连
# 配置设备各接口的IP地址
<Huawei>system-view
[Huawei]sysname S3[S3]undo info-center enable [S3]vlan 20
[S3-vlan20]q[S3]interface GigabitEthernet 0/0/1
[S3-GigabitEthernet0/0/1]port link-type hybrid
[S3-GigabitEthernet0/0/1]port hybrid pvid vlan 20
[S3-GigabitEthernet0/0/1]port hybrid untagged vlan 20
[S3-GigabitEthernet0/0/1]q[S3]interface Vlanif 20
[S3-Vlanif20]ip address 10.2.1.2 24
[S3-Vlanif20]q# 在S3上配置与S1之间的BFD会话。
[S3] bfd
[S3-bfd] quit
[S3] bfd ctoa bind peer-ip 10.1.1.1
[S3-bfd-session-ctoa] discriminator local 20
[S3-bfd-session-ctoa] discriminator remote 10
[S3-bfd-session-ctoa] commit
[S3-bfd-session-ctoa] quit配置静态路由,使S1、S3之间有可达路由
[S3]ip route-static 10.1.1.0 24 10.2.1.1
- 验证配置结果
配置完成后,在S3和S1上执行display bfd session all verbose命令,可以看到建立了一个BFD会话,且状态为Up