BFD原理与配置
BFD技術原理及其配置
BFD(Bidirectional Forwarding Detection,雙向轉發檢測):全網統一的檢測機制,用于快速檢測、監控網絡中鏈路或IP路由的轉發連通情況。
BFD提供了一個通用的標準化的介質無關和協議無關的快速故障檢測機制。具有以下優點:
- 對相鄰轉發引擎之間的通道提供輕負荷、快速故障檢測。這些故障包括接口、數據鏈路,甚至有可能是轉發引擎本身。
- 用單一的機制對任何介質、任何協議層進行實時檢測。
BFD背景
BFD原理
BFD在兩臺網絡設備上建立會話,用來檢測網絡設備間的雙向轉發路徑,為上層應用服務。BFD本身并沒有鄰居發現機制,而是靠被服務的上層應用通知其鄰居信息以建立會話。會話建立后會周期性地快速發送BFD報文,如果在檢測時間內沒有收到BFD報文則認為該雙向轉發路徑發生了故障,通知被服務的上層應用進行相應的處理。
會話建立
- OSPF通過自己的Hello機制發現鄰居并建立連接。
- OSPF在建立了新的鄰居關系后,將鄰居信息(包括目的地址和源地址等)通告給BFD。
- BFD根據收到的鄰居信息建立會話。
- 會話建立以后,BFD開始檢測鏈路故障,并做出快速反應。
BFD故障發生處理流程圖
- 被檢測鏈路出現故障。
- BFD快速檢測到鏈路故障,BFD會話狀態變為Down。
- BFD通知本地OSPF進程BFD鄰居不可達。
- 本地OSPF進程中斷OSPF鄰居關系。
BFD會話建立方式
BFD會話的建立有兩種方式,即靜態建立BFD會話和動態建立BFD會話。
靜態和動態創建BFD會話的主要區別在于本地標識符(Local Discriminator)和遠端標識符(Remote Discriminator)的配置方式不同。BFD通過控制報文中的Local Discriminator和Remote Discriminator區分不同的會話。
-
靜態建立BFD會話
靜態建立BFD會話是指通過命令行手工配置BFD會話參數,包括配置本地標識符和遠端標識符等,然后手工下發BFD會話建立請求。
-
動態建立BFD會話
動態建立BFD會話時,系統對本地標識符和遠端標識符的處理方式如下:
-
動態分配本地標識符
當應用程序觸發動態創建BFD會話時,系統分配屬于動態會話標識符區域的值作為BFD會話的本地標識符。然后向對端發送Remote Discriminator的值為0的BFD控制報文,進行會話協商。
-
自學習遠端標識符
當BFD會話的一端收到Remote Discriminator的值為0的BFD控制報文時,判斷該報文是否與本地BFD會話匹配,如果匹配,則學習接收到的BFD報文中Local Discriminator的值,獲取遠端標識符。
-
BFD監測機制
- BFD的檢測機制是兩個系統建立BFD會話,并沿它們之間的路徑周期性發送BFD控制報文,如果一方在既定的時間內沒有收到BFD控制報文,則認為路徑上發生了故障。
- BFD提供異步檢測模式。在這種模式下,系統之間相互周期性地發送BFD控制報文,如果某個系統連續幾個報文都沒有接收到,就認為此BFD會話的狀態是Down。
BFD會話管理
BFD會話有四種狀態:
- Down
- Init
- Up
- AdminDown
會話狀態變化通過BFD報文的State字段傳遞,系統根據自己本地的會話狀態和接收到的對端BFD報文驅動狀態改變。BFD狀態機的建立和拆除都采用三次握手機制,以確保兩端系統都能知道狀態的變化。
會話建立
- SwitchA和SwitchB各自啟動BFD狀態機,初始狀態為Down,發送狀態為Down的BFD報文。對于靜態配置BFD會話,報文中的Remote Discriminator的值是用戶指定的;對于動態創建BFD會話,Remote Discriminator的值是0。
- SwitchB收到狀態為Down的BFD報文后,狀態切換至Init,并發送狀態為Init的BFD報文。
- SwitchB本地BFD狀態為Init后,不再處理接收到的狀態為Down的報文。
- SwitchA的BFD狀態變化同SwitchB。
- SwitchB收到狀態為Init的BFD報文后,本地狀態切換至Up。
- SwitchA的BFD狀態變化同SwitchB。
BFD抓包
Down狀態
Init狀態
Up狀態
BFD應用場景
BFD檢測IP鏈路
BFD檢測IP鏈路支持單跳檢測和多跳檢測:
- BFD單跳檢測是指對兩個直連系統進行IP連通性檢測,“單跳”是IP鏈路的一跳。
- BFD多跳檢測是指BFD可以檢測兩個系統間的任意路徑,這些路徑可能跨越很多跳,也可能在某些部分發生重疊。
BFD單壁回聲功能
通過BFD報文的環回操作檢測轉發鏈路的連通性。
在兩臺直接相連的設備中,其中一臺設備支持BFD功能,另一臺設備不支持BFD功能,只支持基本的網絡層轉發。為了能夠快速的檢測這兩臺設備之間的故障,可以在支持BFD功能的設備上創建單臂回聲功能的BFD會話。支持BFD功能的設備主動發起回聲請求功能,不支持BFD功能的設備接收到該報文后直接將其環回,從而實現轉發鏈路的連通性檢測功能。
BFD與接口狀態聯動
BFD與接口狀態聯動:使得BFD檢測行為可以關聯接口狀態,提高了接口感應鏈路故障的靈敏度,減少了非直連鏈路故障導致的問題。
BFD檢測到鏈路故障會立即上報Down消息到相應接口,使得接口進入一種特殊的Down狀態:BFD Down狀態。該狀態等效于鏈路協議Down狀態,在該狀態下只有BFD的報文可以正常處理,從而使接口也可以快速感知鏈路故障。
BFD與靜態路由聯動
BFD for靜態路由可為每條靜態路由綁定一個BFD會話,在自身滿足參與選路條件的前提下,靜態路由最終是否能參與選路還受BFD會話檢測狀態影響。
- 當某條靜態路由上的BFD會話檢測到鏈路故障(BFD會話檢測狀態為Down)時,BFD會將故障上報系統,系統將這條路由從IP路由表中刪除。
- 當某條靜態路由上的BFD會話檢測到故障的鏈路重新建立成功(BFD會話檢測狀態為Up)時,BFD會上報系統,系統將這條路由加入IP路由表。
- 缺省情況下,當BFD會話狀態處于Admin down(shutdown命令觸發)或鄰居Admin down時,與該BFD會話綁定的靜態路由可以參與選路。但是在系統整機重啟場景下,BFD會話需要重新協商,靜態路由是否能參與選路以BFD重新協商狀態為準。
BFD for靜態路由有單跳檢側和多跳檢測兩種方式。
-
單跳檢測
對于非迭代的靜態路由,所配置的出接口和下一跳就是直連下一跳信息。這樣,BFD會話的出接口即靜態路由的出接口,對端地址即路由的下一跳。
-
多跳檢測
對于迭代的靜態路由,僅配置了下一跳,需要迭代出直連下一跳和出接口。這樣,BFD會話的對端地址為路由的原始下一跳,出接口則不限。一般情況下,迭代的原始下一跳是多跳的,非直接可達,故支持迭代的靜態路由進行多跳檢測。
BFD與OSPF聯動
BFD與OSPF聯動就是將BFD和OSPF協議關聯起來,通過BFD對鏈路故障的快速感應進而通知OSPF協議,從而加快OSPF協議對于網絡拓撲變化的響應
| 是否綁定BFD | 鏈路故障檢測機制 | 收斂速度 |
|---|---|---|
| 未綁定BFD | OSPF HELLO keepalive定時器超時 | 秒級 |
| 綁定BFD | BFD會話Down | 毫秒級 |
BFD與BGP聯動
BGP協議通過周期性的向對等體發送Keepalive報文來實現鄰居檢測機制,但這種機制檢測到故障所需時間比較長,超過1秒鐘。當數據達到吉比特速率級別時,將會導致大量的數據丟失。
| 是否綁定BFD | 鏈路故障檢測機制 | 收斂速度 |
|---|---|---|
| 未綁定BFD | keepalive報文機制 | 秒級 |
| 綁定BFD | BFD會話Down | 毫秒級 |
BFD與MPLS LSP聯動
BFD會話協商有靜態配置BFD和動態創建BFD兩種方式,其中,動態創建BFD方式只支持動態LSP,靜態配置BFD方式則支持靜態和動態LSP。
BFD檢測LSP的連通性,即Ingress和Egress之間相互周期性地發送BFD報文。如果任何一端在檢測時間內沒有收到對端發來的BFD報文,就認為LSP狀態為Down,并向LSPM上報LSP Down消息。
BFD與MPLS TE聯動
BFD支持的MPLS TE類型有:
-
靜態BFD與TE CR-LSP聯動
靜態BFD與TE CR-LSP聯動使用BFD檢測CR-LSP,做到快速發現LSP故障。BFD會話需要手動配置。
-
靜態BFD與TE Tunnel聯動
靜態BFD與TE Tunnel聯動使用BFD檢測整條TE隧道,觸發VPN FRR等應用進行流量切換。
-
動態BFD與TE CR-LSP聯動
動態BFD與TE CR-LSP聯動的作用和靜態BFD與TE CR-LSP聯動相同。所不同的是建立BFD會話的方式,動態BFD與TE CR-LSP聯動的BFD會話動態觸發。
其中,BFD與TE Tunnel聯動與BFD與CR-LSP聯動的區別是故障通告的對象不同。BFD與TE Tunnel聯動是向VPN等應用通告故障,觸發業務流在不同隧道接口上的切換;BFD與CR-LSP聯動是向TE隧道通告故障,觸發業務流在同一TE隧道內的不同CR-LSP上的切換。
通過和LSP綁定,在Ingress和Egress之間建立BFD會話。BFD報文從源端開始經過LSP到達宿端,宿端再對該BFD報文進行回應,通過此方式在源端可以快速檢測出LSP所經過鏈路的故障狀態。當檢測出鏈路故障以后,BFD將此信息上報給承載在該LSP上面的應用模塊,應用再將流量切換到備份路徑上。
-
BFD與TE CR-LSP聯動
如圖1所示,在設備S1和設備S2之間建立一條主Tunnel,同時配置熱備份LSP。在設備S1上建立一個到設備S2的BFD會話,用于檢測該Tunnel中的主LSP。當主LSP鏈路出現故障時,BFD會快速通知設備S1。收到故障信息以后,設備S1會立即將流量切換到熱備份LSP上,從而保證流量的不中斷性。
-
BFD與TE Tunnel聯動
如圖1所示,在設備S1到P2、P2到設備S2之間建立一條主Tunnel,同時在設備S1到P3、P3到設備S2之間建立一條備份Tunnel。在路徑設備S1到P2、P2到設備S2上建立一個BFD會話,用于檢測主Tunnel的路徑。當主鏈路出現故障時,BFD會快速通知設備S1。收到故障信息以后,S1會立即將流量切換到備份Tunnel上,從而保證了流量的不中斷。
BFD與VRRP聯動
當Master出現故障時,VRRP依靠Backup設置的超時時間來判斷是否應該搶占,切換速度在1秒以上。將BFD應用于Backup對Master的檢測,可以實現對Master故障的快速檢測,縮短用戶流量中斷時間。BFD對Backup和Master之間的實際地址通信情況進行檢測,如果通信不正常,Backup就認為Master已經不可用,升級成Master。VRRP通過監視BFD會話狀態實現主備快速切換,切換時間控制在50毫秒以內。
BFD配置
配置BFD單跳檢測二層鏈路示例
AR1配置
#
sysname R1
#
bfd
#
interface GigabitEthernet0/0/0
ip address 10.1.1.1 255.255.255.0
#
bfd r1 bind peer-ip default-ip interface GigabitEthernet0/0/0
discriminator local 1
discriminator remote 2
commit
#
SW1配置
#
sysname SW1
#
vlan batch 10
#
bfd
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk pvid vlan 10
port trunk allow-pass vlan 10
#
bfd sw1 bind peer-ip default-ip interface GigabitEthernet0/0/1
discriminator local 1
discriminator remote 2
commit
#
查看BFD會話
配置VLANIF接口BFD單跳檢測示例
配置BFD多跳檢測示例
配置BFD檢測VLAN下Eth-Trunk成員鏈路示例
配置BFD與接口狀態聯動示例
配置單臂回聲功能示例
配置詳見 BFD各種配置
總結
- 上一篇: 常用日期时间控件_vue时间控件
- 下一篇: 如何以 mock server 的方式本