bfd

bfd

BFD是Bidirectional Forwarding Detection的縮寫,它是一個用於檢測兩個轉發點之間故障的網路協定,在RFC 5880有詳細的描述。 BFD是一種雙向轉發檢測機制,可以提供毫秒級的檢測,可以實現鏈路的快速檢測,BFD通過與上層路由協定聯動,可以實現路由的快速收斂,確保業務的永續性。 BFD Echo報文採用UDP封裝,目的連線埠號為3784,源連線埠號在49152到65535的範圍內。目的IP位址為傳送接口的地址,源IP位址由配置產生(配置的源IP位址要避免產生ICMP重定向)

簡介

現有的故障檢測方法主要包括以下幾種:

硬體檢測:例如通過SDH(Synchronous Digital Hierarchy,同步數字型系)告警檢測鏈路故障。硬體檢測的優點是可以很快發現故障,但並不是所有介質都能提供硬體檢測。

慢Hello機制:通常採用路由協定中的Hello報文機制。這種機制檢測到故障所需時間為秒級。對於高速數據傳輸,例如吉比特速率級,超過1秒的檢測時間將導致大量數據丟失;對於時延敏感的業務,例如語音業務,超過1秒的延遲也是不能接受的。並且,這種機制依賴於路由協定。

其他檢測機制:不同的協定有時會提供專用的檢測機制,但在系統間互聯互通時,這樣的專用檢測機制通常難以部署。

雙向轉發檢測(BFD)的新協定將幫助解決這個問題,提高故障檢測與恢復速度。作為一項IETF草案標準,BFD提供一種檢測鏈路或系統轉發傳輸流能力的簡單方法。

BFD是從基礎傳輸技術中經過逐步發展而來的,因此它可以檢測網路各層的故障。它可以用乙太網、多協定標記交換(MPLS)路徑、普通路由封裝以及IPSec隧道在內的多種類型的傳輸正確性。

從本質上講,BFD是一種高速的獨立HELLO協定(類似於那些在路由協定中使用的協定,如開放最短路徑優先協定(OSPF),或可以與鏈路、接口、隧道、路由或其他網路轉發部件建立聯繫的中間系統到中間系統協定)。

BFD能夠與相鄰系統建立對等關係,然後,每個系統以協商的速率監測來自其他系統的BFD速率。監測速率能夠以毫秒級增量設定。當對等系統沒有接到預先設定數量的數據包時,它推斷BFD保護的軟體或硬體基礎設施發生故障,不管基礎設施是標記交換路徑、其他類型的隧道還是交換乙太網絡。BFD部署在路由器和其他系統的控制平面上。BFD檢測到的網路故障可以由轉發平面恢復或由控制平面恢復.

BFD提供了一個標準化的與介質和上層協定無關的快速故障檢測機制,BFD具有以下優點:

l 對兩個網路節點之間的鏈路進行雙向故障檢測,鏈路可以是物理鏈路也可以是邏輯鏈路(如LSP、隧道等)

l 可以為不同的上層套用(如MPLS、OSPF、IS-IS等)提供故障檢測的服務,並提供相同的故障檢測時間。

l BFD的故障檢測時間遠小於1秒,可以更快地加速網路收斂,減少上層套用中斷的時間,提高網路的可靠性和服務質量。

BFD的主要工作過程如下:

1. BFD在兩個端點之間的一條鏈路上先建立一個BFD會話(依靠上層協定建立,例如OSPF的鄰居建立時,會將鄰居信息告知BFD,BFD根據這個信息再建立BFD鄰居),如果兩個端點之間存在多條鏈路,則可以為每條鏈路建立一個BFD會話。

2. BFD在建立會話的兩個網路節點之間進行BFD檢測。如果發現鏈路故障就拆除BFD鄰居,並立刻通知上層協定,則上層協定會立刻進行相應的切換。

在BFD會話建立時,有兩種建立模式:主動模式和被動模式。

l 主動模式:在建立BFD會話前不管是否收到對端發來的BFD控制報文,都會主動傳送BFD控制報文。

l 被動模式:在建立對話前不會主動傳送BFD控制報文,直到收到對端傳送來的BFD控制報文。

在會話初始化過程中,通信雙方至少要有一個運行在主動模式才能成功建立起會話。

BFD在會話建立後有兩種操作模式:異步模式和查詢模式。

l 異步模式:在此模式下,網路節點雙方會周期性地傳送BFD控制報文,如果在檢測時間內沒有收到對端的BFD控制報文則認為對應的鏈路出現故障。

l 查詢模式:假定每個系統都有一個獨立的方法,確認自己連線到其他系統。這樣,只要有一個BFD會話建立,系統就停止傳送BFD控制報文,除非某個系統需要顯式地驗證連線性。如果要顯式地驗證連線性,系統傳送一個短系列的BFD控制包,如果在檢測時間內沒有收到返回的報文就宣布會話為Down;如果收到對端的回應報文,協定再次保持沉默。

在BFD中還有一個回聲功能,回聲功能啟動後,會話的一端周期性地傳送BFD回聲報文,對端不對此報文進行處理,而只將此報文轉發再發回給傳送端。傳送端根據是否能收到BFD會話報文來檢測會話狀態。BFD回聲報文只用來檢測直連網段的鏈路狀態,而BFD控制報文還可以檢測非直連網段的鏈路狀態。

BFD現在越來越多地套用在重要網路、重要鏈路上,結合路由、MPLS、VPN、流量工程等技術,可以對重點服務流量提供高可靠性,從而保證服務質量。

BFD庫(Binary File Descriptor library)

BFD庫是一個GNU項目,它的目標就是希望通過一種統一的接口來處理不同的目標檔案。BFD這個項目本身是binutils項目的一個子項目。BFD把目標檔案抽象成一個統一的模型,比如在這個抽象的目標檔案模型中,最開始有一個描述整個目標檔案總體信息的"檔案頭",就跟我們實際的ELF檔案一樣,檔案頭後面是一系列的段,每個段都有名字、屬性和段的內容,同時還抽象了符號表、定位表、字元串表等類似的概念,使得BFD庫的程式只要通過這個抽象的目標檔案模型就可以實現操作所有BFD支持的目標檔案格式。

GCC(更具體地講是GNU彙編器GAS,GNU Assembler)、連線器ld、調試器GDB及binutils的其他工具都通過BFD庫來處理目標檔案,而不是直接操作目標檔案。這樣做的最大的好處是將編譯器和連線器本身同具體的目標檔案格式隔離開來,一旦我們需要支持一種新的目標檔案格式,只須要在BFD庫裡面添加一種格式就可以了,而不需要修改編譯器和連線器。到目前為止,BFD庫支持大約25種處理平台,將近50種目標檔案格式。

當我們安裝了BFD開發庫以後(在我的ubuntu下,包括BFD開發庫的軟體包的名字叫binutils-dev),我們就可以在程式中使用它。

引自:《程式設計師的自我修養---連結、裝載與庫》

使用方法

How to use BFD

在使用時,要包含bfd.h這個頭檔案

#include<stdio.h>

#include"bfd.h"

int main()

{

const char **t = bfd_target_list();

while(*t)

{

printf("%s\n",*t);

t++;

}

}

保存為target.c

在linux下編譯時:gcc -o target target.c -lbfd -liberty

相關詞條

相關搜尋

熱門詞條

聯絡我們