BFD簡介
定義
雙向轉發檢測BFD(Bidirectional Forwarding Detection)是一種全網統一的檢測機制,用于快速檢測、監控網絡中鏈路或者IP路由的轉發連通狀況。
目的
為了減小設備故障對業務的影響,提高網絡的可靠性,網絡設備需要能夠盡快檢測到與相鄰設備間的通信故障,以便及時采取措施,保證業務繼續進行。在現有網絡中,有些鏈路通常通過硬件檢測信號,如SDH告警,檢測鏈路故障,但并不是所有的介質都能夠提供硬件檢測。此時,應用就要依靠上層協議自身的Hello報文機制來進行故障檢測。上層協議的檢測時間都在1秒以上,這樣的故障檢測時間對某些應用來說是不能容忍的。在三層網絡中,Hello報文檢測機制無法針對所有路由來檢測故障,如:靜態路由。這對系統間互聯互通定位故障造成困難。
BFD協議就是在這種背景下產生的,BFD提供了一個通用的標準化的介質無關和協議無關的快速故障檢測機制。具有以下優點:
-
對相鄰轉發引擎之間的通道提供輕負荷、快速故障檢測。這些故障包括接口、數據鏈路,甚至有可能是轉發引擎本身。
-
用單一的機制對任何介質、任何協議層進行實時檢測。
受益
BFD可以實現快速檢測并監控網絡中鏈路或IP路由的轉發連通狀態,改善網絡性能。相鄰系統之間通過快速檢測發現通信故障,可以更快地幫助用戶建立起備份通道以便恢復通信,保證網絡可靠性。
BFD原理描述
原理簡介
BFD在兩臺網絡設備上建立會話,用來檢測網絡設備間的雙向轉發路徑,為上層應用服務。BFD本身并沒有鄰居發現機制,而是靠被服務的上層應用通知其鄰居信息以建立會話。會話建立后會周期性地快速發送BFD報文,如果在檢測時間內沒有收到BFD報文則認為該雙向轉發路徑發生了故障,通知被服務的上層應用進行相應的處理。下面以OSPF與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會話有四種狀態:Down、Init、Up和AdminDown。會話狀態變化通過BFD報文的State字段傳遞,系統根據自己本地的會話狀態和接收到的對端BFD報文驅動狀態改變。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。
拓撲圖
S1基本配置
<Huawei>system-view
[Huawei]sysname S1[S1]undo info-center enable
[S1]vlan 10
[S1-vlan10]q配置設備間的網絡互連
# 配置設備各接口的IP地址
[S1]interface GigabitEthernet 0/0/1
[S1-GigabitEthernet0/0/1]port link-type hybrid
[S1-GigabitEthernet0/0/1]port hybrid pvid vlan 10
[S1-GigabitEthernet0/0/1]port hybrid untagged vlan 10
[S1-GigabitEthernet0/0/1]q[S1]interface Vlanif 10
[S1-Vlanif10]ip address 10.1.1.1 24
[S1-Vlanif10]q配置靜態路由,使S1、S3之間有可達路由
# SwitchC的配置與SwitchA類似,具體配置過程略,詳見配置文件。
[S1]ip route-static 10.2.1.0 24 10.1.1.2配置多跳BFD檢測
# 在S1上配置與S3之間的BFD會話。
[S1] bfd
[S1-bfd] quit
[S1] bfd atoc bind peer-ip 10.2.1.2
[S1-bfd-session-atoc] discriminator local 10
[S1-bfd-session-atoc] discriminator remote 20
[S1-bfd-session-atoc] commit
[S1-bfd-session-atoc] quit
S2基本配置配置設備間的網絡互連
# 配置設備各接口的IP地址
<Huawei>system-view
[Huawei]sysname S2[S2]undo info-center enable [S2]vlan 10
[S2-vlan10]q[S2]interface GigabitEthernet 0/0/1
[S2-GigabitEthernet0/0/1]port link-type hybrid
[S2-GigabitEthernet0/0/1]port hybrid pvid vlan 10
[S2-GigabitEthernet0/0/1]port hybrid untagged vlan 10
[S2-GigabitEthernet0/0/1]q[S2]interface Vlanif 10
[S2-Vlanif10]ip address 10.1.1.2 24
[S2-Vlanif10]q[S2]interface GigabitEthernet 0/0/2
[S2-GigabitEthernet0/0/1]port link-type hybrid
[S2-GigabitEthernet0/0/1]port hybrid pvid vlan 20
[S2-GigabitEthernet0/0/1]port hybrid untagged vlan 20
[S2-GigabitEthernet0/0/1]q[S2]interface Vlanif 20
[S2-Vlanif10]ip address 10.2.1.1 24
[S2-Vlanif10]q
S3配置設備間的網絡互連
# 配置設備各接口的IP地址
<Huawei>system-view
[Huawei]sysname S3[S3]undo info-center enable [S3]vlan 20
[S3-vlan20]q[S3]interface GigabitEthernet 0/0/1
[S3-GigabitEthernet0/0/1]port link-type hybrid
[S3-GigabitEthernet0/0/1]port hybrid pvid vlan 20
[S3-GigabitEthernet0/0/1]port hybrid untagged vlan 20
[S3-GigabitEthernet0/0/1]q[S3]interface Vlanif 20
[S3-Vlanif20]ip address 10.2.1.2 24
[S3-Vlanif20]q# 在S3上配置與S1之間的BFD會話。
[S3] bfd
[S3-bfd] quit
[S3] bfd ctoa bind peer-ip 10.1.1.1
[S3-bfd-session-ctoa] discriminator local 20
[S3-bfd-session-ctoa] discriminator remote 10
[S3-bfd-session-ctoa] commit
[S3-bfd-session-ctoa] quit配置靜態路由,使S1、S3之間有可達路由
[S3]ip route-static 10.1.1.0 24 10.2.1.1
- 驗證配置結果
配置完成后,在S3和S1上執行display bfd session all verbose命令,可以看到建立了一個BFD會話,且狀態為Up