一、簡介
為了減小設備故障對業務的影響、提高網絡的可用性,設備需要能夠盡快檢測到與相鄰設備間的通信故障,以便能夠及時采取措施,從而保證業務繼續進行。
現有的故障檢測方法主要包括以下幾種:
硬件檢測:例如通過SDH(Synchronous Digital Hierarchy,同步數字體系)告警檢測鏈路故障。硬件檢測的優點是可以很快發現故障,但並不是所有介質都能提供硬件檢測。
慢Hello機制:通常采用路由協議中的Hello報文機制。這種機制檢測到故障所需時間為秒級。對於高速數據傳輸,例如吉比特速率級,超過1秒的檢測時間將導致大量數據丟失;對於時延敏感的業務,例如語音業務,超過1秒的延遲也是不能接受的。並且,這種機制依賴於路由協議。
其他檢測機制:不同的協議有時會提供專用的檢測機制,但在系統間互聯互通時,這樣的專用檢測機制通常難以部署。
BFD(Bidirectional Forwarding Detection,雙向轉發檢測)就是為了解決上述檢測機制的不足而產生的,它是一套全網統一的檢測機制,用於快速檢測、監控網絡中鏈路或者IP路由的轉發連通狀況,保證鄰居之間能夠快速檢測到通信故障,從而快速建立起備用通道恢復通信。
二、工作機制
BFD提供了一個通用的、標准化的、介質無關、協議無關的快速故障檢測機制,可以為各上層協議如路由協議、MPLS等統一地快速檢測兩台路由器間雙向轉發路徑的故障。
BFD在兩台路由器或路由交換機上建立會話,用來監測兩台路由器間的雙向轉發路徑,為上層協議服務。BFD本身並沒有發現機制,而是靠被服務的上層協議通知其該與誰建立會話,會話建立后如果在檢測時間內沒有收到對端的BFD控制報文則認為發生故障,通知被服務的上層協議,上層協議進行相應的處理。
1、工作流程
圖1 BFD會話建立流程圖(以OSPF為例)
BFD會話建立過程:
(1) 上層協議通過自己的Hello機制發現鄰居並建立連接;
(2) 上層協議在建立了新的鄰居關系時,將鄰居的參數及檢測參數都(包括目的地址和源地址等)通告給BFD;
(3) BFD根據收到的參數進行計算並建立鄰居。
當網絡出現故障時:
(1) BFD檢測到鏈路/網絡故障;
(2) 拆除BFD鄰居會話;
(3) BFD通知本地上層協議進程BFD鄰居不可達;
(4) 本地上層協議中止上層協議鄰居關系;
(5) 如果網絡中存在備用路徑,路由器將選擇備用路徑。
三、檢測方式
單跳檢測:BFD單跳檢測是指對兩個直連系統進行IP連通性檢測,這里所說的“單跳”是IP的一跳。
多跳檢測:BFD可以檢測兩個系統間的任意路徑,這些路徑可能跨越很多跳,也可能在某些部分發生重疊。
雙向檢測:BFD通過在雙向鏈路兩端同時發送檢測報文,檢測兩個方向上的鏈路狀態,實現毫秒級的鏈路故障檢測。(BFD檢測LSP是一種特殊情況,只需在一個方向發送BFD控制報文,對端通過其他路徑報告鏈路狀況。)
四、BFD會話工作方式
控制報文方式:鏈路兩端會話通過控制報文交互監測鏈路狀態。
Echo報文方式:鏈路某一端通過發送Echo報文由另一端轉發回來,實現對鏈路的雙向監測。
五、運行模式
BFD會話建立前模式:主動模式和被動模式。
主動模式:在建立對話前不管是否收到對端發來的BFD控制報文,都會主動發送BFD控制報文;
被動模式:在建立對話前不會主動發送BFD控制報文,直到收到對端發送來的控制報文;
在會話初始化過程中,通信雙方至少要有一個運行在主動模式才能成功建立起會話。
BFD會話建立后模式:異步模式和查詢模式。
異步模式:以異步模式運行的路由器周期性地發送BFD控制報文,如果在檢測時間內沒有收到BFD控制報文則將會話down。
查詢模式:假定每個系統都有一個獨立的方法,確認自己連接到其他系統。這樣,只要有一個BFD會話建立,系統停止發送BFD控制報文,除非某個系統需要顯式地驗證連接性。
六、BFD支持的應用
OSPF與BFD聯動
OSPFv3與BFD聯動
IS-IS與BFD聯動
IPv6 IS-IS與BFD聯動
RIP與BFD聯動
靜態路由與BFD聯動
BGP與BFD聯動
IPv6 BGP與BFD聯動
MPLS與BFD聯動
Track與BFD聯動
IP快速重路由
七、OSPF與BFD聯動配置舉例
某公司通過一台二層交換機作為中繼將兩個相距較遠的部門連接。Device A、Device B、Device C上運行OSPF,建立OSPF鄰居關系,保證網絡層相互可達。
已知Device A和Device C都支持BFD功能,要求使用OSPF與BFD聯動技術,采用BFD控制報文方式實現當Device A或Device C與二層交換機之間的鏈路出現故障(如鏈路down)時,BFD能夠快速感知並通告OSPF協議。
現要求通過在Device A和Device C上配置OSPF與BFD聯動功能,實現:
監測通過L2 Switch通信的鏈路;
當鏈路出現故障時設備能夠快速感知並通告OSPF協議,快速切換到Device B鏈路進行通信。
設備 | 接口 | IP地址 | 設備 | 接口 | IP地址 |
Device A | Vlan-int10 | 10.1.0.101/24 | Device B | Vlan-int20 | 192.168.0.102/24 |
Vlan-int20 | 192.168.0.101/24 | Vlan-int30 | 13.1.1.101/24 | ||
Vlan-int100 | 120.1.1.1/24 | ||||
Device C | Vlan-int10 | 10.1.0.102/24 | |||
Vlan-int30 | 13.1.1.102/24 | ||||
Vlan-int100 | 121.1.1.1/24 |
Device A和Device C都支持BFD,可以使用BFD控制報文方式,通信雙方至少要有一方運行在主動模式才能成功建立起BFD會話。
1、配置各接口的IP地址
配置Device A各接口的IP地址:
<DeviceA> system-view [DeviceA] vlan 10 [DeviceA-vlan10] port ten-gigabitethernet 3/0/1 [DeviceA-vlan10] quit [DeviceA] interface vlan-interface10 [DeviceA-Vlan-interface10] ip address 10.1.0.101 24 [DeviceA-Vlan-interface10] quit
請參考以上方法配置中其它接口的IP地址,配置步驟這里省略
2、配置OSPF基本功能
配置Device A的OSPF基本功能,並使能OSPF的BFD功能:
[DeviceA] ospf [DeviceA-ospf-1] area 0 [DeviceA-ospf-1-area-0.0.0.0] network 10.1.0.0 0.0.0.255 [DeviceA-ospf-1-area-0.0.0.0] network 192.168.0.0 0.0.0.255 [DeviceA-ospf-1-area-0.0.0.0] network 120.1.1.0 0.0.0.255 [DeviceA-ospf-1-area-0.0.0.0] quit [DeviceA-ospf-1] quit [DeviceA] interface vlan-interface 10 [DeviceA-Vlan-interface10] ospf bfd enable [DeviceA-Vlan-interface10] quit
配置Device B的OSPF基本功能:
[DeviceB] ospf [DeviceB-ospf-1] area 0 [DeviceB-ospf-1-area-0.0.0.0] network 192.168.0.0 0.0.0.255 [DeviceB-ospf-1-area-0.0.0.0] network 13.1.1.0 0.0.0.255 [DeviceB-ospf-1-area-0.0.0.0] quit [DeviceB-ospf-1] quit
配置Device C的OSPF基本功能,並使能OSPF的BFD功能:
[DeviceC] ospf [DeviceC-ospf-1] area 0 [DeviceC-ospf-1-area-0.0.0.0] network 10.1.0.0 0.0.0.255 [DeviceC-ospf-1-area-0.0.0.0] network 13.1.1.0 0.0.0.255 [DeviceC-ospf-1-area-0.0.0.0] network 121.1.1.0 0.0.0.255 [DeviceC-ospf-1-area-0.0.0.0] quit [DeviceC-ospf-1] quit [DeviceC] interface vlan-interface 10 [DeviceC-Vlan-interface10] ospf bfd enable [DeviceC-Vlan-interface10] quit
3、配置BFD功能
配置BFD會話建立前的運行模式為主動模式(缺省為主動模式)
[DeviceA] bfd session init-mode active
配置發送和接收單跳BFD控制報文的最小時間間隔都為100ms,單跳BFD檢測時間倍數為3。
[DeviceA] interface vlan-interface 10 [DeviceA-Vlan-interface10] bfd min-transmit-interval 100 [DeviceA-Vlan-interface10] bfd min-receive-interval 100 [DeviceA-Vlan-interface10] bfd detect-multiplier 3 [DeviceA-Vlan-interface10] quit
配置BFD會話建立前的運行模式為主動模式(缺省為主動模式)。
[DeviceC] bfd session init-mode active
配置發送和接收單跳BFD控制報文的最小時間間隔都為100ms,單跳BFD檢測時間倍數為3。
[DeviceC] interface vlan-interface 10 [DeviceC-Vlan-interface10] bfd min-transmit-interval 100 [DeviceC-Vlan-interface10] bfd min-receive-interval 100 [DeviceC-Vlan-interface10] bfd detect-multiplier 3 [DeviceC-Vlan-interface10] quit
4、驗證配置
檢查Device A連接的主機host A(120.1.1.2)到Device C連接的主機host C(121.1.1.2)是否可達。
<host A> ping 121.1.1.2 PING 121.1.1.2 (121.1.1.2): 56 data bytes 56 bytes from 121.1.1.2: seq=0 ttl=128 time=22.43 ms 56 bytes from 121.1.1.2: seq=1 ttl=128 time=7.17 ms 56 bytes from 121.1.1.2: seq=2 ttl=128 time=8.91 ms 56 bytes from 121.1.1.2: seq=3 ttl=128 time=7.45 ms 56 bytes from 121.1.1.2: seq=4 ttl=128 time=9.11 ms --- 121.1.1.2 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 7.17/11.01/22.43 ms
查看Device A 上OSPF鄰居信息,顯示Device A和Device C已建立OSPF鄰居關系。
[DeviceA] display ospf peer verbose OSPF Process 1 with Router ID 2.2.2.2 Neighbors Area 0.0.0.0 interface 10.1.0.101(Vlan-interface10)'s neighbors Router ID: 1.1.1.1 Address: 10.1.0.102 GR State: Normal State: Full Mode: Nbr is Slave Priority: 1 DR: 10.1.0.101 BDR: 10.1.0.102 MTU: 0 Options is 0x42 (-|O|-|-|-|-|E|-) Dead timer due in 39 sec Neighbor is up for 00:09:01 Authentication Sequence: [ 0 ] Neighbor state change count: 5 BFD status: Enabled(Control mode)
查看 Device A和Device C上BFD會話信息,顯示BFD會話已被創建,且狀態為Up。
[DeviceA] display bfd session verbose Total Session Num: 1 Up Session Num: 1 Init Mode: Active IPv4 Session Working Under Ctrl Mode: Local Discr: 2049 Remote Discr: 2049 Source IP: 10.1.0.101 Destination IP: 10.1.0.102 Session State: Up Interface: Vlan-interface10 Min Tx Inter: 100ms Act Tx Inter: 100ms Min Rx Inter: 100ms Detect Inter: 300ms Rx Count: 536 Tx Count: 536 Connect Type: Direct Running Up for: 00:04:48 Hold Time: 300ms Auth mode: None Detect Mode: Async Slot: 0 Protocol: OSPF Diag Info: No Diagnostic [DeviceC] display bfd session verbose Total Session Num: 1 Up Session Num: 1 Init Mode: Active IPv4 Session Working Under Ctrl Mode: Local Discr: 2049 Remote Discr: 2049 Source IP: 10.1.0.102 Destination IP: 10.1.0.101 Session State: Up Interface: Vlan-interface10 Min Tx Inter: 100ms Act Tx Inter: 100ms Min Rx Inter: 100ms Detect Inter: 300ms Rx Count: 3971 Tx Count: 3776 Connect Type: Direct Running Up for: 00:06:52 Hold Time: 300ms Auth mode: None Detect Mode: Async Slot: 0 Protocol: OSPF Diag Info: No Diagnostic
在Device A上查看121.1.1.0/24的路由信息,可以看出Device A和Device C是通過L2 Switch進行通信的。
<DeviceA> display ip routing-table 121.1.1.0 verbose Summary Count : 1 Destination: 121.1.1.0/24 Protocol: OSPF Process ID: 1 SubProtID: 0x1 Age: 04h20m37s Cost: 1 Preference: 10 Tag: 0 State: Active Adv OrigTblID: 0x0 OrigVrf: default-vrf TableID: 0x2 OrigAs: 0 NBRID: 0x26000002 LastAs: 0 AttrID: 0xffffffff Neighbor: 0.0.0.0 Flags: 0x1008c OrigNextHop: 10.1.0.102 Label: NULL RealNextHop: 10.1.0.102 BkLabel: NULL BkNextHop: N/A Tunnel ID: Invalid Interface: Vlan-interface10 BkTunnel ID: Invalid BkInterface: N/A
當Device C和二層交換機之間的鏈路狀態變為Down,BFD快速檢測到鏈路發生變化並立刻通告OSPF。
%Oct 9 15:22:23:154 2013 DeviceC BFD/5/BFD_CHANGE_FSM: -MDC=1; Sess[10.1.0.1 02/10.1.0.101, LD/RD:2049/2049, Interface:Vlan10, SessType:Ctrl, LinkType:INET] , Sta: UP-> DOWN, Diag: 1 %Oct 9 15:22:23:155 2013 DeviceC OSPF/5/OSPF_NBR_CHG: -MDC=1; OSPF 1 Neighbor 10.1 .0.101(Vlan-interface10) from FULL to DOWN.
在Device A上查看121.1.1.0/24的路由信息,可以看出Device A和Device C已經切換到Device B進行通信。
<DeviceA> display ip routing-table 121.1.1.0 verbose Summary Count : 1 Destination: 121.1.1.0/24 Protocol: OSPF Process ID: 1 SubProtID: 0x1 Age: 04h20m37s Cost: 2 Preference: 10 Tag: 0 State: Active Adv OrigTblID: 0x0 OrigVrf: default-vrf TableID: 0x2 OrigAs: 0 NBRID: 0x26000002 LastAs: 0 AttrID: 0xffffffff Neighbor: 0.0.0.0 Flags: 0x1008c OrigNextHop: 192.168.0.102 Label: NULL RealNextHop: 192.168.0.102 BkLabel: NULL BkNextHop: N/A Tunnel ID: Invalid Interface: Vlan-interface20 BkTunnel ID: Invalid BkInterface: N/A