為了減小設備故障對業務的影響、提高網絡的可用性,設備需要能夠盡快檢測到與相鄰設備間的通信故障,以便能夠及時采取措施,從而保證業務繼續進行。
現有的故障檢測方法主要包括以下幾種:
l 硬件檢測:例如通過SDH(Synchronous Digital Hierarchy,同步數字體係)告警檢測鏈路故障。硬件檢測的優點是可以很快發現故障,但並不是所有介質都能提供硬件檢測。
l 慢Hello機製:通常采用路由協議中的Hello報文機製。這種機製檢測到故障所需時間為秒級。對於高速數據傳輸,例如吉比特速率級,超過1秒的檢測時間將導致大量數據丟失;對於時延敏感的業務,例如語音業務,超過1秒的延遲也是不能接受的。並且,這種機製依賴於路由協議。
l 其他檢測機製:不同的協議有時會提供專用的檢測機製,但在係統間互聯互通時,這樣的專用檢測機製通常難以部署。
BFD(Bidirectional Forwarding Detection,雙向轉發檢測)就是為了解決上述檢測機製的不足而產生的,它是一套全網統一的檢測機製,用於快速檢測、監控網絡中鏈路或者IP路由的轉發連通狀況,保證鄰居之間能夠快速檢測到通信故障,從而快速建立起備用通道恢複通信。
BFD提供了一個通用的、標準化的、介質無關、協議無關的快速故障檢測機製,可以為各上層協議如路由協議、MPLS等統一地快速檢測兩台路由器間雙向轉發路徑的故障。
BFD在兩台路由器或路由交換機上建立會話,用來監測兩台路由器間的雙向轉發路徑,為上層協議服務。BFD本身並沒有發現機製,而是靠被服務的上層協議通知其該與誰建立會話,會話建立後如果在檢測時間內沒有收到對端的BFD控製報文則認為發生故障,通知被服務的上層協議,上層協議進行相應的處理。
圖1 BFD會話建立流程圖(以OSPF為例)
BFD會話建立過程:
(1) 上層協議通過自己的Hello機製發現鄰居並建立連接;
(2) 上層協議在建立了新的鄰居關係時,將鄰居的參數及檢測參數都(包括目的地址和源地址等)通告給BFD;
(3) BFD根據收到的參數進行計算並建立鄰居。
圖2 BFD處理網絡故障流程圖(以OSPF為例)
當網絡出現故障時:
(1) BFD檢測到鏈路/網絡故障;
(2) 拆除BFD鄰居會話;
(3) BFD通知本地上層協議進程BFD鄰居不可達;
(4) 本地上層協議中止上層協議鄰居關係;
(5) 如果網絡中存在備用路徑,路由器將選擇備用路徑。
l 單跳檢測:BFD單跳檢測是指對兩個直連係統進行IP連通性檢測,這裏所說的“單跳”是IP的一跳。
l 多跳檢測:BFD可以檢測兩個係統間的任意路徑,這些路徑可能跨越很多跳,也可能在某些部分發生重疊。
l 雙向檢測:BFD通過在雙向鏈路兩端同時發送檢測報文,檢測兩個方向上的鏈路狀態,實現毫秒級的鏈路故障檢測。(BFD檢測LSP是一種特殊情況,隻需在一個方向發送BFD控製報文,對端通過其他路徑報告鏈路狀況。)
BFD會話工作方式:
l 控製報文方式:鏈路兩端會話通過控製報文交互監測鏈路狀態。
l Echo報文方式:鏈路某一端通過發送Echo報文由另一端轉發回來,實現對鏈路的雙向監測。
BFD會話建立前模式:主動模式和被動模式。
l 主動模式:在建立對話前不管是否收到對端發來的BFD控製報文,都會主動發送BFD控製報文;
l 被動模式:在建立對話前不會主動發送BFD控製報文,直到收到對端發送來的控製報文;
在會話初始化過程中,通信雙方至少要有一個運行在主動模式才能成功建立起會話。
BFD會話建立後模式:異步模式和查詢模式。
l 異步模式:以異步模式運行的路由器周期性地發送BFD控製報文,如果在檢測時間內沒有收到BFD控製報文則將會話down。
l 查詢模式:假定每個係統都有一個獨立的方法,確認自己連接到其他係統。這樣,隻要有一個BFD會話建立,係統停止發送BFD控製報文,除非某個係統需要顯式地驗證連接性。
BFD控製報文封裝在UDP報文中傳送,對於單跳檢測其UDP目的端口號為3784,對於多跳檢測其UDP目的端口號為4784(也可配置為3784,具體參見配置任務)。BFD echo報文與BFD控製報文格式類似(區別在於字段Desired Min TX Interval和Required Min RX Interval為空),其UDP目的端口號為3785。報文格式如圖3所示。
圖3 BFD報文格式圖
l Vers:協議的版本號,協議版本為1。
l Diag:本地會話最後一次從up狀態轉換到其他狀態的原因。
l State(Sta):BFD會話當前狀態,取值為:0代表AdminDown,1代表Down,2代表Init,3代表Up。
l Poll(P):設置為1,表示發送方請求進行連接確認,或者發送請求參數改變的確認;設置為0,表示發送方不請求確認。
l Final(F):設置為1,表示發送方響應一個接收到P比特為1的BFD控製報文;設置為0,表示發送方不響應一個接收到P比特為1的BFD控製報文。
l Control Plane Independent(C):設置為1,表示發送方的BFD實現不依賴於它的控製平麵(即,BFD報文在轉發平麵傳輸,即使控製平麵失效,BFD仍然能夠起作用);設置為0,表示BFD報文在控製平麵傳輸。
l Authentication Present(A):如果設置為1,則表示控製報文包含認證字段,並且會話是被認證的。
l Demand(D):設置為1,表示發送方希望操作在查詢模式;設置為0,表示發送方不區分是否操作在查詢模式,或者表示發送方不能操作在查詢模式。
l Reserved(R):在發送時設置為0,在接收時忽略。
l Detect Mult:檢測時間倍數。即接收方允許發送方發送報文的最大連續丟包數,用來檢測鏈路是否正常。
l Length:BFD控製報文的長度,單位字節。
l My Discriminator:發送方產生的一個唯一的、非0鑒別值,用來區分兩個協議之間的多個BFD會話。
l Your Discriminator:接收方收到的鑒別值“My Discriminator”,如果沒有收到這個值就返回0。
l Desired Min Tx Interval:發送方發送BFD控製報文時想要采用的最小間隔,單位毫秒。
l Required Min Rx Interval:發送方能夠支持的接收兩個BFD控製報文之間的間隔,單位毫秒。
l Required Min Echo Rx Interval:發送方能夠支持的接收兩個BFD回聲報文之間的間隔,單位毫秒。如果這個值設置為0,則發送不支持接收BFD回聲報文。
l Auth Type:BFD控製報文使用的認證類型。
l Auth Len:認證字段的長度,包括認證類型與認證長度字段。
l OSPF與BFD聯動
l OSPFv3與BFD聯動
l IS-IS與BFD聯動
l IPv6 IS-IS與BFD聯動
l RIP與BFD聯動
l 靜態路由與BFD聯動
l BGP與BFD聯動
l IPv6 BGP與BFD聯動
l MPLS與BFD聯動
l Track與BFD聯動
l IP快速重路由