為提升網絡的可靠性,網絡設備需要盡可能快地檢測到與相鄰設備間的通信故障,降低設備故障對業務的影響。在當前網絡中,有些鏈路通過硬件檢測信號,但并不是所有的介質都能夠提供硬件檢測,如DLDP技術,它只能在以太網鏈路上提供探測機制。此時,就可能需要依靠上層路由協議自身的Hello報文機制來進行故障檢測,如OSPF路由協議。但路由協議的Hello包間隔檢測時間都在1秒以上,這樣的故障檢測時間對部分網絡環境和應用需求來說是不能接受的,而且如果網絡中沒有部署路由協議,則無法使用路由協議的Hello報文機制來檢測故障。本文通過實例,介紹如何用BFD技術快速檢測網絡故障。
BFD(Bidirectional Forwarding Detection,雙向轉發檢測)協議是一個專門用于檢測兩個轉發設備之間故障的網絡協議,它是一種雙向轉發檢測機制,提供一種輕負載、快速檢測兩臺鄰接路由器之間轉發路徑連通狀態的方法,可以為網絡鏈路提供毫秒級的快速檢測。它類似于常見動態路由協議中的“Hello”報文,在和鄰居間所建立的會話通道上周期性發送檢測報文,如果在定義的時間內沒有收到對端的檢測報文,則認為在這條雙向通道的某個部分發生了故障。因此,BFD技術通過與上層路由協議聯動,可以協商鄰居通過BFD技術快速檢測到轉發路徑的鏈路故障,以此實現路由的快速收斂,加快啟用備份轉發路徑,確保業務的高可靠性。
BFD報文采用UDP封裝,提供的檢測機制與所應用的接口介質類型、封裝格式、以及關聯的上層協議如OSPF、BGP等無關。檢測的鏈路不僅是物理鏈路,甚至還包括隧道技術等在內的邏輯鏈路。BFD是雙向聯動探測行為,兩端都要啟用,它應用在三層接口上,但交換機不允許在三層聚合端口下進行配置。
BFD技術在兩臺網絡設備中建立會話,用來檢測網絡設備間的雙向轉發路徑,為上層應用服務。BFD技術本身沒有發現鄰居的能力,而是靠被服務的上層應用通知其鄰居信息以建立會話。會話建立后會周期性地快速發送BFD報文,如果在檢測時間內沒有收到BFD報文,則認為該雙向轉發路徑發生了故障,通過快速發送檢測故障消息給正在運行的上層協議,通知被服務的上層應用進行相應的處理,以此來觸發路由器重新計算路由表,大大減少整個網絡的收斂時間。

圖1 BFD會話建立流程圖

圖2 BFD故障發現處理流程圖
假設上層運行的是OSPF路由協議,兩臺三層交換機之間由一臺交換機實現相連,那么BFD與OSPF建立會話工作過程如圖1所示。
(1)OSPF通過自己的Hello機制發現鄰居并建立連接。
(2)OSPF在建立鄰居關系后,將鄰居信息通告給BFD。
(3)BFD根據收到的鄰居信息建立會話。
當會話建立后,BFD開始進行鏈路故障檢測,如果檢測到鏈路出現故障,就迅速做出反應(如圖2)。
(1)三層交換機B和二層交換機之間鏈路出現故障。
(2)三層交換機A和三層交換機B之間的BFD會話快速檢測到鏈路故障,BFD會話狀態變為Down。
(3)BFD通知本地OSPF進程BFD鄰居不可達。
(4)本地OSPF進程中斷OSPF鄰居關系,路由信息快速收斂,如果存在備份轉發路徑,啟用備份路徑。
在建立會話前,不管是否收到對端發來的建立BFD會話控制報文,都會主動發送建立BFD會話控制報文。
在建立對話前,不會主動發送建立BFD會話的控制報文,直到收到對端發送來建立BFD會話的控制報文。
網絡設備之間相互周期性地發送BFD控制報文,如果某個設備在規定的檢測時間內沒有收到對端發來的BFD控制報文,就宣布會話狀態為Down。
假定每個設備都有一個獨立的方法用來確認連接到其他系統,這樣,一旦BFD會話建立起來,設備停止發送BFD控制報文,除非某個設備需要顯式地驗證連接性,設備才發送一個BFD控制包。如果在檢測時間內沒有收到返回的報文,就認為會話Down,如果收到對端的回應報文,表示轉發路徑正常。
建立會話的一端周期性發送BFD回聲報文,對端不對此報文進行處理,而只將此報文轉發再發回給發送端。如果發送端在檢測周期內連續幾個回聲報文都沒有接收到,會話就被宣布為Down。采用回聲報文的檢測功能,不需要遠端設備的控制面參與,報文通過遠端設備的轉發面轉回,減少了延遲,相對于發送控制報文可以更快的檢測到故障。
BFD回聲功能可以和上面兩種檢測模式一起使用。如果在異步模式下啟用回聲功能,可以大大減少控制報文的發送,因為檢測工作由回聲功能完成。如果在查詢模式下啟用回聲功能,在會話建立后可以完全取消發送控制報文。但是必須注意BFD會話雙方同時啟用回聲功能,否則回聲功能將不生效。此外,回聲報文只能用來檢測直連網段的鏈路狀態,而BFD控制報文還能檢測非直連網段的鏈路狀態。

圖3 BFD與靜態路由直連網段聯動
如圖3所示,路由器RA分別連接到兩臺交換機,形成兩條鏈路連接到路由器RB,通過配置靜態路由訪問RB上的網段。這里希望讓交換機SA作為主鏈路,當SA不可用情況下,使用浮動靜態路由技術,切換到交換機SB備用鏈路。假設SA和RB中間鏈路通信中斷,由于本端路由器RA無法檢測到靜態路由的下一跳是否可達,導致靜態路由無法收斂,備用鏈路無法生效,通信出現故障。此時需要在路由器上使用BFD協議作為鏈路探測協議,開啟靜態路由和BFD聯動來解決該問題,它可以檢測出中間網絡的中斷,并及時切換到備份線路,從而保證網絡正常通信。
注:這里使用的設備為銳捷RSR20系列路由器,系統版本為10.3(5b6)p2。
路由器RA的BFD與靜態路由聯動配置:






查看路由表,可以看到路由器RA默認使用主鏈路轉發。

在RB上關閉fa0/0接口,模擬交換機SA到RB上的鏈路故障;然后在RA上再次查看路由表,確認轉發路徑已經切換到SB上。

同時RA上出現有BFD鄰居會話狀態關閉的提示,當RB上fa0/0接口恢復正常后,路由器RA又會自動選擇到主鏈路上轉發數據。


圖4 BFD與OSPF動態路由聯動
如圖4所示,路由器RA和RB通過二層交換機互連,通過運行OSPF路由協議來建立路由,同時通過在雙方接口上關聯BFD應用,在RB和二層交換機之間鏈路發生故障后,BFD能夠快速檢測并通告OSPF協議,觸發協議快速收斂。
路由器RA的BFD與OSPF動態路由聯動部分配置



此時,在路由器RA上通過show bfd neighbers確認BFD鄰居狀態。

在RA上可以查看OSPF動態路由協議學習到的網段信息。

當交換機和RB上的鏈路斷開后,RA上學習到的OSPF動態路由信息會很快刪除,實現了網絡路由信息的快速收斂。而如果沒有開啟BFD功能的話,RA上通過OSPF學習到的相關網段信息仍然存在,直到OSPF協議規定的廣播型網絡中40秒dead周期到達后,路由信息才會清除。