网络脉搏的实时监测者:BFD 与 NQA 的协同运维之道

发布于:2025-05-25 ⋅ 阅读:(26) ⋅ 点赞:(0)

文章目录


前言

        在数字化时代,网络稳定性至关重要,哪怕微小故障也可能造成重大损失。双向转发检测(BFD)与网络质量分析(NQA)作为网络运维的核心技术,一个能快速感知链路异常,一个可深入分析网络质量。它们如何协同保障网络稳定?一起探寻答案。​


一.BFD简介

        BFD(Bidirectional Forwarding Detection)是一种轻量级、高速率的链路故障检测机制,旨在快速发现两台网络设备之间的通信故障(如链路中断、接口故障、设备宕机等),并为上层协议(如 OSPF、BGP、VRRP 等)提供故障通知,从而触发快速切换或路由收敛。

产生背景

        为保障网络可靠性,需快速检测相邻设备通信故障。现有网络中,部分链路依赖硬件检测信号( SDH 告警),但并非所有介质都具备此条件,只能依靠上层协议 Hello 报文机制。然而,其检测时间超 1 秒,无法满足低时延应用需求,且在三层网络中,对静态路由等故障检测存在盲区,给故障定位带来困难。

二.BFD原理描述

BFD 原理概述

    BFD用于检测网络设备间双向转发路径,服务于上层应用。它依赖上层应用告知邻居信息来建立会话,建立后以周期性快速发送BFD报文进行检测。若在规定时间内未收到报文,便判定路径故障,并通知上层应用处理。以OSPF与BFD联动为例,可进一步了解其会话工作流程。

如上图所示:

  • 被检测链路出现故障。
  • BFD快速检测到链路故障,BFD会话状态变为Down。
  • BFD通知本地OSPF进程BFD邻居不可达。
  • 本地OSPF进程中断OSPF邻居关系。

BFD会话建立

  • 本地标识符 / 远端标识符

           (本地 / 远端) 标识符用于在一台设备上区分与不同邻居的 BFD 会话;静态会话需要手动配置,而动态会话会自动创建(华为设备默认从 1024 开始递增创建)。

  • 静态配置方式

           该方式适用于手动指定对端地址,无需上层协议(OSPF/BGP等)参与,适用于静态路由,PPP/HDLC等无动态邻居发现机制的场景。

管理员操作:
1. 配置本地标识符(如 `bfd local-discriminator 100`)。
2. 配置远端标识符(如 `bfd remote-discriminator 200`)。
3. 配置其他参数(如检测间隔、多跳等)。
4. 手工下发命令建立会话(如 `bfd session up`)。

会话建立逻辑:
- 两端使用手工配置的标识符直接协商,无需额外交互。
- 若两端标识符、参数不一致,会话无法建立。
  • 动态协商方式

           该方式依赖上层协议(如 OSPF、BGP、IS-IS)自动触发会话建立,无需手动配置对端地址。当上层协议(如 OSPF)通过 Hello 报文发现邻居后,将对端 IP 地址通知给 BFD。两端通过 BFD 控制报文协商检测参数(该参数由上层协议指定默认值:如 OSPF 默认启用毫秒级检测)。

系统自动操作:
1. 上层应用(如OSPF)触发创建BFD会话。
2. 系统动态分配本地标识符(如属于动态区域的数值3001)。
3. 向对端发送BFD控制报文,报文中 `Remote Discriminator=0`(表示请求协商远端标识符)。

对端处理逻辑:
- 收到 `Remote Discriminator=0` 的报文后,检查本地是否存在远端标识符为 3001 的 BFD 会话。
- 若不存在,在回复报文中携带本地动态分配的标识符(如3002)。
- 本端接收后,自学习该值作为远端标识符,完成会话建立。

BFD 检测机制

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

BFD 应用场景

BFD 与静态路由联动

        静态路由缺乏自检测机制,网络故障时依赖管理员处理。BFD与静态路由联动,能为每条静态路由绑定BFD会话来监测链路状态。当BFD会话检测到链路故障(状态由Up转Down),会上报路由管理系统,将对应路由设为“非激活”并从IP路由表删除;若BFD会话恢复(状态由Down转Up) ,则重新激活路由并添加回IP路由表。

 BFD 与 OSPF 联动

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

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

BFD 多跳检测(联动静态路由)

实验要求

        当去往 3.3.3.0 网段的链路发生故障(此处使用关闭 AR2 路由器G0/0/1接口模拟),BFD能够检测到故障,并删除 AR1 设备上的静态路由。

基础环境

        整个网络拓扑基于静态路由使得 AR1 能够 ping 通 3.3.3.3,网段/IP信息如上。

BFD 配置】 

        BFD 多跳检测在发送 BFD 报文前,会向直连链路对端设备请求 peer-ip 的下一跳 mac地址,从而实现跨三层设备转发。

单挑检测需要在 peer-ip 后添加 interface 关键字,其余配置相同(参考后文动态 BFD)

  • 配置命令解析
[AR1]BFD AR3 bind ?
  ldp-lsp     将 BFD 与通过 标签分发协议(LDP) 建立的标签交换路径(LSP)绑定
  mpls-te     将 BFD 与 多协议标签交换流量工程(MPLS TE) 隧道绑定
  peer-ip     指定 BFD 检测的 对端设备 IP 地址,建立单跳或多跳的 BFD 会话
  static-lsp  将 BFD 与手动配置的 静态 LSP 绑定

[AR1]BFD AR3 bind peer-ip 3.3.3.3 ?
  interface     指定 BFD 会话的 出接口,用于单跳直连场景(如直接相连的链路)
  source-ip     手动指定 BFD 会话的 本端源 IP 地址
  vpn-instance  将 BFD 会话与 VPN 实例(虚拟专用网络) 关联
  <cr>          直接按回车键执行命令,使用默认参数建立 BFD 会话
  • 配置案例
#开启BFD功能
[AR1]bfd 

#建立一条以 3.3.3.3 为对端 IP 的 BFD 会话,用于检测(AR1)与(AR3)之间的连通性。
[AR1]BFD AR3 bind peer-ip 3.3.3.3

#配置本地标识符
[AR1-bfd-session-ar3]discriminator local 1
#配置远端标识符
[AR1-bfd-session-ar3]discriminator remote 2

#配置最小接收时间(默认1000ms即1s)
[AR1-bfd-session-ar3]min-rx-interval 2000
#配置最小发送时间(默认1000ms即1s)
[AR1-bfd-session-ar3]min-tx-interval 1500
#配置会话检测倍数(默认为3)
[AR1-bfd-session-ar3]detect-multiplier 5

#提交当前 BFD 会话的配置并激活会话
[AR1-bfd-session-ar3]commit 

#将静态路由与 BFD 会话关联
[AR1][AR1]ip route-static 2.2.2.2 32 10.0.12.2 track bfd-session ar3

#查看 BFD 会话建立情况
[AR1]dis bfd session all 
--------------------------------------------------------------------------------
Local Remote     PeerIpAddr      State     Type        InterfaceName            
--------------------------------------------------------------------------------

1     2          3.3.3.3         Up        S_IP_PEER         -                  
--------------------------------------------------------------------------------
     Total UP/DOWN Session Number : 1/0
[AR3]bfd 
#AR1 指定BFD对端设备的地址为3.3.3.3,若不使用source-ip指定ip,默认使用出接口ip,导致建邻失败
[AR3]bfd AR1 bind peer-ip 10.0.12.1 source-ip 3.3.3.3
[AR3-bfd-session-ar1]discriminator local 2
[AR3-bfd-session-ar1]discriminator remote 1
[AR3-bfd-session-ar1]commit 
参数名称 英文名称 含义 配置命令(华为)
本地发送间隔时间 Min TX Interval (TxInterval) BFD 会话本地发送 BFD 控制报文的最小时间间隔(毫秒) min-tx-interval <毫秒>
本地接收间隔时间 Min RX Interval (RxInterval) BFD 会话本地期望接收对端 BFD 报文的最小时间间隔(毫秒) min-rx-interval <毫秒>
本地检测间隔时间 Detection Time 判定链路故障的超时时间,由接收间隔 × 检测倍数计算得出 detect-multiplier <倍数>

BFD 会话各种时间含义分析:

  • 本地 BFD 报文实际 发送 间隔 = MAX(本地配置的发送间隔,对端配置的接收间隔)
  • 本地 BFD 报文实际 接收 间隔 = MAX(对端配置的发送间隔,本地配置的接收间隔)
  • 本地 BFD 报文实际检测时间 = 本地实际接收间隔  × 对端配置的 BFD 检测倍数

例如:

  • 本地配置的发送间隔 = 200ms,本地配置的接收间隔= 300ms,本地检测倍数 = 4
  • 对端配置的发送间隔 = 100ms,对端配置的接收间隔= 600ms,对端检测倍数 = 5

则:

  • 本地实际发送间隔 = MAX(200ms,600ms)= 600ms;本地时间接收间隔 = MAX(100ms,300ms)= 300 ms,本地实际检测间隔 = 300ms × 5 = 1500ms

BFD 控制报文解析

        当 AR1 完成提交激活当前配置的 BFD 会话,AR1 就会向 AR3 方向发送 BFD 控制报文

BFD 控制报文展示

结果验证

交换机G0/0/2接口未故障前,通信正常
链路发生故障,删除 BFD会话绑定的静态路由
链路状态恢复,静态路由恢复
 BFD 单臂回声

应用场景:

        当企业网络与运营商网络、或不同厂商设备(如华为与 Cisco 设备)互联时,对端设备可能不支持 BFD 协议。 

原理: 

        单臂回声功能指通过 BFD 报文环回检测转发链路连通性。当两台直连设备中仅一台支持 BFD 时,可在支持设备上创建单臂回声 BFD 会话:该设备主动发起回声请求报文,不支持设备接收到后直接环回,以此实现链路连通性的快速检测。

        设备发送 BFD 报文时,会请求peer-ip的 mac 地址进行发送,因此 BFD 单臂检测无法跨越三层设备转发。

BFD 配置

#在 AR1 指定接口G0/0/0上开启单臂回声;one-arm-echo 代表单臂回声
[AR1]bfd ar2 bind peer-ip 10.0.12.2 interface GigabitEthernet 0/0/0 one-arm-echo
#配置本地标识符
[AR1-bfd-session-ar2]discriminator local 6
#配置最小回声接收间隔 2秒
[AR1-bfd-session-ar2]min-echo-rx-interval 2000
#配置会话检测倍数
[AR1-bfd-session-ar2]detect-multiplier 4

注:BFD 会话超时时间 = 最小回声接收间隔× 会话检测倍数 = 2 秒 × 4 = 8 秒。

BFD 动态检测(联动 OSPF)
实验拓扑

基础环境 】 

        路由器 AR2 与 AR3 之间建立 OSPF 邻居,网段信息及IP信息如上图所示

BFD 配置

#直连建立 BFD 会话采用单跳检测,需添加 interface 关键字;auto 代表动态建立
[AR2]bfd ar3 bind peer-ip 10.0.23.3 interface GigabitEthernet 0/0/1 source-ip 10
.0.23.2 auto
[AR3]bfd ar2 bind peer-ip 10.0.23.2 interface GigabitEthernet 0/0/0 source-ip 10
.0.23.3 auto 

协商过程报文分析

AR2 发送 BFD报文展示
AR3 回复 AR2 的 BFD控制报文展示

 BFD 动态检测联动 OSPF 

实验拓扑

实验要求 】 

        AR4 与 AR5 建立 OSPF 邻居且开启 BFD 动态会话,当交换机 G0/0/2接口故障,AR4 删除OSPF 邻居表中的邻居 AR5 同时删除 OSPF 路由。

BFD 配置 】 

# AR4 所有建立邻居的接口开启 BFD 动态会话
[AR4-ospf-1]bfd all-interfaces enable 

#单独关闭接口下的 BFD 动态会话建立
[AR4-GigabitEthernet0/0/1]ospf bfd block 

[AR5-ospf-1]bfd all-interfaces enable 

实验结果验证 】 

三.NQA 原理描述

        NQA(Network Quality Analysis),即网络质量分析,是用于帮助用户度量网络性能和检测网络故障的工具。NQA通过从一个网络端点向另一个网络端点发送报文,检测网络可达性,并统计两端之间网络的时延、丢包率、抖动等性能数据,从而帮助用户监视网络质量及检测网络故障。

ICMP 联动 NQA 测试

NQA的ICMP(Internet Control Message Protocol)测试用于检测NQA源端到目的端是否路由可达。ICMP测试提供类似于普通命令行下的ping命令功能,但输出信息更为丰富,包括:

  • 默认情况下能够保存最近5次的测试结果。

  • 结果中能够显示平均时延、丢报率、最后一个响应报文正确接收的时间等信息。

如图所示,ICMP测试的过程如下:

  1. DeviceA(源端)向DeviceB(目的端)发送构造的ICMP Echo Request报文,DeviceA记录时间戳 T1。

  2. DeviceB收到ICMP Echo Request报文后,直接向DeviceA回复ICMP Echo Reply报文。

  3. DeviceA在等待时间内收到DeviceB回复的ICMP Echo Reply报文,记录该报文的接收时间戳T2,并通过(t2-t1),计算出源端到目的端的通信时间,即时延,从而清晰反映出网络畅通情况。若DeviceA在等待时间内未收到DeviceB回复的报文,则将发出的报文统计为丢包,并计算丢包率(丢包率=丢包个数/发送的探测报文个数)。

NQA 实验

#创建一个名为icmp、归属于admin的 NQA 测试实例
[AR4]nqa test-instance admin icmp                        
[AR4-nqa-admin-icmp]test-type icmp                       #探测类型:ICMP 
[AR4-nqa-admin-icmp]destination-address ipv4 10.0.45.5   #探测报文的目的 IP
[AR4-nqa-admin-icmp]frequency 60                         # 每60秒执行一轮测试
[AR4-nqa-admin-icmp]interval seconds 2                   # 每次探测间隔2秒
[AR4-nqa-admin-icmp]timeout 1                            # 超时时间1秒
[AR4-nqa-admin-icmp]probe-count 10                       # 每轮发送10个ICMP包
[AR4-nqa-admin-icmp]start now                            # 立即开始探测

#查看探测结果
[AR4]dis nqa results test-instance admin icmp
#与静态路由关联
[AR4]ip route-static 0.0.0.0 0 10.0.45.5 track nqa admin icmp