BFD简介:
BFD(Bidirectional Forwarding Detection,双向转发检测)是一个通用的、标准化的、介质无关和协议无关的快速故障检测机制,用于检测IP网络中链路的连通状况,保证设备之间能够快速检测到通信故障,以便能够及时采取措施,保证业务持续运行。
BFD可以为各种上层协议(如路由协议、MPLS等)快速检测两台设备间双向转发路径的故障。上层协议通常采用Hello报文机制检测故障,所需时间为秒级,而BFD可以提供毫秒级检测。
实际应用中,BFD可以用来进行单跳和多跳检测:
· 单跳检测:是指对两个直连设备进行IP连通性检测,这里所说的“单跳”是IP的一跳。
· 多跳检测:BFD可以检测两个设备间任意路径的链路情况,这些路径可能跨越很多跳。
BFD本身并没有发现机制,而是靠被服务的上层协议通知来建立会话,具体过程如下:
(1) 上层协议通过自己的Hello机制发现邻居并建立连接;
(2) 上层协议在建立新的邻居关系后,将邻居的参数及检测参数(包括目的地址和源地址等)通告给BFD;
(3) BFD根据收到的参数建立BFD会话。
当网络出现故障时:
(1) BFD检测到链路故障后,拆除BFD会话,通知上层协议邻居不可达;
(2) 上层协议中止邻居关系;
(3) 如果网络中存在备用路径,设备将选择备用路径进行通信。
BFD会话通过下面两种报文来实现:
· echo报文:封装在UDP报文中传送,其UDP目的端口号为3785。
· 控制报文:封装在UDP报文中传送,对于单跳检测其UDP目的端口号为3784,对于多跳检测其UDP目的端口号为4784。
1. echo报文方式
本端发送echo报文建立BFD会话,对链路进行检测。对端不建立BFD会话,只需把收到的echo报文转发回本端。
当BFD会话工作于echo报文方式时,仅支持单跳检测,并且不受检测模式的控制。
2. 控制报文方式
链路两端通过周期性发送控制报文建立BFD会话,对链路进行检测。
BFD会话建立前有两种模式:主动模式和被动模式。
· 主动模式:在建立会话前不管是否收到对端发来的BFD控制报文,都会主动发送BFD控制报文;
· 被动模式:在建立会话前不会主动发送BFD控制报文,直到收到对端发送来的控制报文。
通信双方至少要有一方运行在主动模式才能成功建立起BFD会话。
BFD会话建立后有两种模式:异步模式和查询模式。
· 异步模式:设备周期性发送BFD控制报文,如果在检测时间内没有收到对端发送的BFD控制报文,则认为会话down。
· 查询模式:设备周期性发送BFD控制报文,但是对端(缺省为异步模式)会停止周期性发送BFD控制报文。如果通信双方都是查询模式,则双方都停止周期性发送BFD控制报文。当需要验证连接性的时候,设备会以协商的周期连续发送几个P比特位置1的BFD控制报文。如果在检测时间内没有收到返回的报文,就认为会话down;如果收到对方回应的F比特位置1的报文,就认为连通,停止发送报文,等待下一次触发查询。
另外,也可以链路两端通过发送控制报文建立和保持BFD会话,任意一端通过发送echo报文检测链路状态。
1. 功能需求
Router A、Router B和Router C连接了20.1.1.0/24和30.1.1.0/24两个网段,在路由器上配置静态路由以实现两个网段的互通,并配置路由备份以提高网络的可靠性。
Router A作为20.1.1.0/24网段内主机的缺省网关,在Route A上存在两条到达30.1.1.0/24网段的静态路由,下一跳分别为Router B和Router C。这两条静态路由形成备份,其中:
· 下一跳为Router B的静态路由优先级高,作为主路由。该路由可达时,Router A通过Router B将报文转发到30.1.1.0/24网段。
· 下一跳为Router C的静态路作为备份路由。
· 在Router A上通过静态路由、Track与BFD联动,实时判断主路由是否可达。当主路由不可达时,BFD能够快速地检测到路由故障,使得备份路由生效,Router A通过Router C和Router B将报文转发到30.1.1.0/24网段。
同样地,Router B作为30.1.1.0/24网段内主机的缺省网关,在Route B上存在两条到达20.1.1.0/24网段的静态路由,下一跳分别为Router A和Router C。这两条静态路由形成备份,其中:
· 下一跳为Router A的静态路由优先级高,作为主路由。该路由可达时,Router B通过Router A将报文转发到20.1.1.0/24网段。
· 下一跳为Router C的静态路作为备份路由。
· 在Router B上通过静态路由、Track与BFD联动,实时判断主路由是否可达。当主路由不可达时,BFD能够快速地检测到路由故障,使得备份路由生效,Router B通过Router C和Router A将报文转发到20.1.1.0/24网段。
2. 拓扑图
静态路由、Track与BFD联动配置组网图
3. 配置步骤
(1) 按照拓扑图配置各接口的IP地址,具体配置过程略。
(2) 配置Router A
# 配置到达30.1.1.0/24网段的静态路由:下一跳地址为10.2.1.2,优先级为缺省值60,该路由与Track项1关联。
[RouterA] ip route-static 30.1.1.0 24 10.2.1.2 track 1
# 配置到达30.1.1.0/24网段的静态路由:下一跳地址为10.3.1.3,优先级为80。
[RouterA] ip route-static 30.1.1.0 24 10.3.1.3 preference 80
# 配置BFD echo报文的源地址为10.10.10.10。
[RouterA] bfd echo-source-ip 10.10.10.10
# 创建和BFD会话关联的Track项1,检测Router A是否可以与静态路由的下一跳Router B互通。
[RouterA] track 1 bfd echo interface gigabitethernet 2/0/1 remote ip 10.2.1.2 local ip 10.2.1.1
(3) 配置Router B
# 配置到达20.1.1.0/24网段的静态路由:下一跳地址为10.2.1.1,优先级为缺省值60,该路由与Track项1关联。
[RouterB] ip route-static 20.1.1.0 24 10.2.1.1 track 1
# 配置到达20.1.1.0/24网段的静态路由:下一跳地址为10.4.1.3,优先级为80。
[RouterB] ip route-static 20.1.1.0 24 10.4.1.3 preference 80
# 配置BFD echo报文的源地址为1.1.1.1。
[RouterB] bfd echo-source-ip 1.1.1.1
# 创建和BFD会话关联的Track项1,检测Router B是否可以与静态路由的下一跳Router A互通。
[RouterB] track 1 bfd echo interface gigabitethernet 2/0/1 remote ip 10.2.1.1 local ip 10.2.1.2
(4) 配置Router C
# 配置到达30.1.1.0/24网段的静态路由:下一跳地址为10.4.1.2。
[RouterC] ip route-static 30.1.1.0 24 10.4.1.2
# 配置到达20.1.1.0/24网段的静态路由:下一跳地址为10.3.1.1。
[RouterB] ip route-static 20.1.1.0 24 10.3.1.1