1. 程式人生 > 其它 >BFD協議簡介

BFD協議簡介

 

 

 

1. 背景

 

雙向轉發檢測BFD(Bidirectional Forwarding Detection)是一種全網統一的檢測機制,用於快速檢測、監控網路中鏈路或者IP路由的轉發連通狀況。

 

為了保護關鍵應用,網路中會設計有一定的冗餘備份鏈路,網路發生故障時就要求網路裝置能夠快速檢測出故障並將流量切換至備份鏈路以加快網路收斂速度。


目前有些鏈路具備硬體檢測機制來快速故障檢測,但某些鏈路(如乙太網鏈路)不具備這樣的檢測功能。這種情況下就需要上層協議自身的機制來進行故障檢測。但大部分協議如OSPF,BGP等檢測鏈路故障的速度都很慢,最快也需要1s的時間,而且這些功能只針對本協議有效,無法為其他的協議或者應用提供快速檢測機制。這對於某些實時性較高的上層應用如音訊,視訊等是不能接受的。

 

BFD就是在這種背景下產生的,它提供了一個通用的標準化的介質無關和協議無關的檢測機制。

 

 

2. 工作原理

 

BFD在兩臺網路裝置上建立會話,用來檢測網路裝置間的雙向轉發路徑,為上層應用服務。會話建立後會週期性地快速傳送BFD報文,如果在檢測時間內沒有收到BFD報文則認為該雙向轉發路徑發生了故障,通知被服務的上層應用進行相應的處理。

 

BFD協議本身沒有鄰居發現機制,BFD鄰居的建立依賴於上層的應用。根據BFD會話建立過程可以將其分為動態BFD和靜態BFD。

 

  • 動態BFD:是通過上層應用(例如OSPF)的鄰居發現機制,有上層應用將鄰居資訊傳送到BFD模組,BFD則根據接收到的鄰居資訊建立會話並建立自己的鄰居。

     

  • 靜態BFD:是通過靜態配置手動新增對端的鄰居資訊來建立會話,靜態BFD配置完後,會定時傳送BFD控制報文。只有對端介面也開啟BFD的情況下並對本端的BFD報文做出正確應答後,雙方建立鄰居資訊。

 

 

3. BFD報文結構

 

3.1BFD控制報文

 

BFD控制報文包括兩部分:強制部分和可選認證部分

 

強制部分的報文格式是固定的,如下圖所示:

 

可選認證部分根據認證的型別的不同而異,如下圖所示:

 

BFD控制協議各欄位代表的意義如下:

 

 

 

 

 

3.2BFD Echo報文

 

BFD Echo報文提供了一種不依賴於BFD控制報文的故障檢測方法。本端傳送本端接收,遠端不對報文進行處理,而只是將此此報文在反向通道上返回。因此BFD協議並沒有對BFD Echo報文的格式進行定義,唯一的要求是傳送方能夠通過報文內容區分會話。

 

BFD Echo報文采用UDP封裝,目的埠號為3785,目的IP地址為傳送介面的地址,源IP地址由配置產生(配置的源IP地址要避免產生ICMP重定向)。

 

 

4. BFD會話建立過程

 

BFD共有4種類型的控制報文維持BFD狀態,分別為:

 

#define    BSM_AdminDown         0
#define    BSM_Down                 1
#define    BSM_Init                 2
#define    BSM_Up                 3

 

BFD控制報文互動及其狀態切換圖如下所示:

 

 

5. BFD系統架構

 

這個系統架構包括有四部分組成(實際使用過程中,而不是純BFD協議)。

 

 

6. 核心態kbfd資料結構

 

kbfd是開原始碼,因此核心框架部分是通用的:

 

 

 

kbfd維護兩個雜湊表的原因:

 

  • down狀態:傳送BFD報文無法知道對端鑑別值,只知道對端的IP,因此只能根據IP進行查表。

     

  • 其他狀態:已經進行了初步互動,既有對端的IP也有對端鑑別值,對端可以根據發來的鑑別值進行查表。

 

實際是同一個雜湊表,只是有兩種查詢方式。

 

 

7. 核心態kbfd處理流程

 


 

 

核心態處理使用到的知識:

1)netlink套接字通訊:用來和應用層進行通訊。

2)工作佇列和工作這執行緒:用來定時傳送報文,一個用來超時檢測。

3)狀態機:用來維護不同BFD會話的工作狀態。

4)雜湊表儲存會話資訊。

 

kbfd開源原始碼中的狀態機程式碼實現個人感覺比較經典,屬於常用的那種,我是在這裡才正式接觸到狀態機的,並更新了一篇《C語言實現狀態機》的部落格。

 

 

8.核心態kbfd狀態機流程圖

 

 

 

 

 

 

9. BFD聯動ospf動態路由

 

9.1 BFD會話建立過程

 

 

 

上圖所示是一個簡單的網路組網,兩臺裝置上同時配置了OSPF與BFD,BFD會話建立過程如下所示:

 

  • 動態配置流程:

     

    (1) OSPF通過自己的Hello機制發現鄰居並建立連線。

     

    (2) OSPF在建立了新的鄰居關係後,將鄰居資訊(包括目的地址和源地址等)通告給BFD。

     

    (3) BFD根據收到的鄰居資訊建立會話。

     

    (4) 會話建立以後,BFD開始快速傳送bfd控制報文,檢測鏈路故障,並做出快速反應。

     

  • 靜態配置流程:

     

    (1) 通過手動配置,直接將鄰居資訊(包括目的地址和源地址)通告給BFD。

     

    (2) BFD根據收到的鄰居資訊建立會話。

     

    (3) 會話建立以後,BFD開始快速傳送bfd控制報文,檢測鏈路故障,並做出快速反應。

     

    目前與HA的聯動採用的是靜態配置方式。

     

9.2 BFD故障發現過程


 

(1) 被檢測鏈路出現故障。

 

(2) BFD快速檢測到鏈路故障,BFD拆除鄰居會話,會話狀態變為Down。

 

(3) BFD通知本地OSPF程序BFD鄰居不可達。

 

(4) 本地OSPF程序中斷OSPF鄰居關係並根據需求切換到備用鏈路。

 

 

 推薦閱讀 

>>>【獨家首發】新版HCIE考試解讀直播回顧

>>> 重磅!華為HCIE認證改版升級通知!

>>>【命令解析】Linux使用者行為的常用命令

>>> 網工必備通訊基礎知識,還不知道你就out了?

>>>【必備乾貨】網工入門必會橋接教程,外網+GNS3+Vmware

>>>【技術指南】5分鐘搞清楚OSPF鏈路狀態路由協議

 

 網工界市場認可度極高的華為認證,你考了嗎?

 

拿下華為HCIE認證之後,你可以:

 

  • 跨越90%企業的招聘硬門檻

  • 增加70%就業機會

  • 拿下BAT全國TOP100大廠敲門磚

  • 體系化得到網路技術硬實力

  • 技術大佬年薪可達30w+

 

資源放送 

2022新版華為思科雙廠商認證18集小白入門到進階實戰課,掃描下方二維碼,即可觀看: