為提升網(wǎng)絡(luò)的可靠性,網(wǎng)絡(luò)設(shè)備需要盡可能快地檢測到與相鄰設(shè)備間的通信故障,降低設(shè)備故障對(duì)業(yè)務(wù)的影響。在當(dāng)前網(wǎng)絡(luò)中,有些鏈路通過硬件檢測信號(hào),但并不是所有的介質(zhì)都能夠提供硬件檢測,如DLDP技術(shù),它只能在以太網(wǎng)鏈路上提供探測機(jī)制。此時(shí),就可能需要依靠上層路由協(xié)議自身的Hello報(bào)文機(jī)制來進(jìn)行故障檢測,如OSPF路由協(xié)議。但路由協(xié)議的Hello包間隔檢測時(shí)間都在1秒以上,這樣的故障檢測時(shí)間對(duì)部分網(wǎng)絡(luò)環(huán)境和應(yīng)用需求來說是不能接受的,而且如果網(wǎng)絡(luò)中沒有部署路由協(xié)議,則無法使用路由協(xié)議的Hello報(bào)文機(jī)制來檢測故障。本文通過實(shí)例,介紹如何用BFD技術(shù)快速檢測網(wǎng)絡(luò)故障。
BFD(Bidirectional Forwarding Detection,雙向轉(zhuǎn)發(fā)檢測)協(xié)議是一個(gè)專門用于檢測兩個(gè)轉(zhuǎn)發(fā)設(shè)備之間故障的網(wǎng)絡(luò)協(xié)議,它是一種雙向轉(zhuǎn)發(fā)檢測機(jī)制,提供一種輕負(fù)載、快速檢測兩臺(tái)鄰接路由器之間轉(zhuǎn)發(fā)路徑連通狀態(tài)的方法,可以為網(wǎng)絡(luò)鏈路提供毫秒級(jí)的快速檢測。它類似于常見動(dòng)態(tài)路由協(xié)議中的“Hello”報(bào)文,在和鄰居間所建立的會(huì)話通道上周期性發(fā)送檢測報(bào)文,如果在定義的時(shí)間內(nèi)沒有收到對(duì)端的檢測報(bào)文,則認(rèn)為在這條雙向通道的某個(gè)部分發(fā)生了故障。因此,BFD技術(shù)通過與上層路由協(xié)議聯(lián)動(dòng),可以協(xié)商鄰居通過BFD技術(shù)快速檢測到轉(zhuǎn)發(fā)路徑的鏈路故障,以此實(shí)現(xiàn)路由的快速收斂,加快啟用備份轉(zhuǎn)發(fā)路徑,確保業(yè)務(wù)的高可靠性。
BFD報(bào)文采用UDP封裝,提供的檢測機(jī)制與所應(yīng)用的接口介質(zhì)類型、封裝格式、以及關(guān)聯(lián)的上層協(xié)議如OSPF、BGP等無關(guān)。檢測的鏈路不僅是物理鏈路,甚至還包括隧道技術(shù)等在內(nèi)的邏輯鏈路。BFD是雙向聯(lián)動(dòng)探測行為,兩端都要啟用,它應(yīng)用在三層接口上,但交換機(jī)不允許在三層聚合端口下進(jìn)行配置。
BFD技術(shù)在兩臺(tái)網(wǎng)絡(luò)設(shè)備中建立會(huì)話,用來檢測網(wǎng)絡(luò)設(shè)備間的雙向轉(zhuǎn)發(fā)路徑,為上層應(yīng)用服務(wù)。BFD技術(shù)本身沒有發(fā)現(xiàn)鄰居的能力,而是靠被服務(wù)的上層應(yīng)用通知其鄰居信息以建立會(huì)話。會(huì)話建立后會(huì)周期性地快速發(fā)送BFD報(bào)文,如果在檢測時(shí)間內(nèi)沒有收到BFD報(bào)文,則認(rèn)為該雙向轉(zhuǎn)發(fā)路徑發(fā)生了故障,通過快速發(fā)送檢測故障消息給正在運(yùn)行的上層協(xié)議,通知被服務(wù)的上層應(yīng)用進(jìn)行相應(yīng)的處理,以此來觸發(fā)路由器重新計(jì)算路由表,大大減少整個(gè)網(wǎng)絡(luò)的收斂時(shí)間。
圖1 BFD會(huì)話建立流程圖
圖2 BFD故障發(fā)現(xiàn)處理流程圖
假設(shè)上層運(yùn)行的是OSPF路由協(xié)議,兩臺(tái)三層交換機(jī)之間由一臺(tái)交換機(jī)實(shí)現(xiàn)相連,那么BFD與OSPF建立會(huì)話工作過程如圖1所示。
(1)OSPF通過自己的Hello機(jī)制發(fā)現(xiàn)鄰居并建立連接。
(2)OSPF在建立鄰居關(guān)系后,將鄰居信息通告給BFD。
(3)BFD根據(jù)收到的鄰居信息建立會(huì)話。
當(dāng)會(huì)話建立后,BFD開始進(jìn)行鏈路故障檢測,如果檢測到鏈路出現(xiàn)故障,就迅速做出反應(yīng)(如圖2)。
(1)三層交換機(jī)B和二層交換機(jī)之間鏈路出現(xiàn)故障。
(2)三層交換機(jī)A和三層交換機(jī)B之間的BFD會(huì)話快速檢測到鏈路故障,BFD會(huì)話狀態(tài)變?yōu)镈own。
(3)BFD通知本地OSPF進(jìn)程BFD鄰居不可達(dá)。
(4)本地OSPF進(jìn)程中斷OSPF鄰居關(guān)系,路由信息快速收斂,如果存在備份轉(zhuǎn)發(fā)路徑,啟用備份路徑。
在建立會(huì)話前,不管是否收到對(duì)端發(fā)來的建立BFD會(huì)話控制報(bào)文,都會(huì)主動(dòng)發(fā)送建立BFD會(huì)話控制報(bào)文。
在建立對(duì)話前,不會(huì)主動(dòng)發(fā)送建立BFD會(huì)話的控制報(bào)文,直到收到對(duì)端發(fā)送來建立BFD會(huì)話的控制報(bào)文。
網(wǎng)絡(luò)設(shè)備之間相互周期性地發(fā)送BFD控制報(bào)文,如果某個(gè)設(shè)備在規(guī)定的檢測時(shí)間內(nèi)沒有收到對(duì)端發(fā)來的BFD控制報(bào)文,就宣布會(huì)話狀態(tài)為Down。
假定每個(gè)設(shè)備都有一個(gè)獨(dú)立的方法用來確認(rèn)連接到其他系統(tǒng),這樣,一旦BFD會(huì)話建立起來,設(shè)備停止發(fā)送BFD控制報(bào)文,除非某個(gè)設(shè)備需要顯式地驗(yàn)證連接性,設(shè)備才發(fā)送一個(gè)BFD控制包。如果在檢測時(shí)間內(nèi)沒有收到返回的報(bào)文,就認(rèn)為會(huì)話Down,如果收到對(duì)端的回應(yīng)報(bào)文,表示轉(zhuǎn)發(fā)路徑正常。
建立會(huì)話的一端周期性發(fā)送BFD回聲報(bào)文,對(duì)端不對(duì)此報(bào)文進(jìn)行處理,而只將此報(bào)文轉(zhuǎn)發(fā)再發(fā)回給發(fā)送端。如果發(fā)送端在檢測周期內(nèi)連續(xù)幾個(gè)回聲報(bào)文都沒有接收到,會(huì)話就被宣布為Down。采用回聲報(bào)文的檢測功能,不需要遠(yuǎn)端設(shè)備的控制面參與,報(bào)文通過遠(yuǎn)端設(shè)備的轉(zhuǎn)發(fā)面轉(zhuǎn)回,減少了延遲,相對(duì)于發(fā)送控制報(bào)文可以更快的檢測到故障。
BFD回聲功能可以和上面兩種檢測模式一起使用。如果在異步模式下啟用回聲功能,可以大大減少控制報(bào)文的發(fā)送,因?yàn)闄z測工作由回聲功能完成。如果在查詢模式下啟用回聲功能,在會(huì)話建立后可以完全取消發(fā)送控制報(bào)文。但是必須注意BFD會(huì)話雙方同時(shí)啟用回聲功能,否則回聲功能將不生效。此外,回聲報(bào)文只能用來檢測直連網(wǎng)段的鏈路狀態(tài),而BFD控制報(bào)文還能檢測非直連網(wǎng)段的鏈路狀態(tài)。
圖3 BFD與靜態(tài)路由直連網(wǎng)段聯(lián)動(dòng)
如圖3所示,路由器RA分別連接到兩臺(tái)交換機(jī),形成兩條鏈路連接到路由器RB,通過配置靜態(tài)路由訪問RB上的網(wǎng)段。這里希望讓交換機(jī)SA作為主鏈路,當(dāng)SA不可用情況下,使用浮動(dòng)靜態(tài)路由技術(shù),切換到交換機(jī)SB備用鏈路。假設(shè)SA和RB中間鏈路通信中斷,由于本端路由器RA無法檢測到靜態(tài)路由的下一跳是否可達(dá),導(dǎo)致靜態(tài)路由無法收斂,備用鏈路無法生效,通信出現(xiàn)故障。此時(shí)需要在路由器上使用BFD協(xié)議作為鏈路探測協(xié)議,開啟靜態(tài)路由和BFD聯(lián)動(dòng)來解決該問題,它可以檢測出中間網(wǎng)絡(luò)的中斷,并及時(shí)切換到備份線路,從而保證網(wǎng)絡(luò)正常通信。
注:這里使用的設(shè)備為銳捷RSR20系列路由器,系統(tǒng)版本為10.3(5b6)p2。
路由器RA的BFD與靜態(tài)路由聯(lián)動(dòng)配置:
查看路由表,可以看到路由器RA默認(rèn)使用主鏈路轉(zhuǎn)發(fā)。
在RB上關(guān)閉fa0/0接口,模擬交換機(jī)SA到RB上的鏈路故障;然后在RA上再次查看路由表,確認(rèn)轉(zhuǎn)發(fā)路徑已經(jīng)切換到SB上。
同時(shí)RA上出現(xiàn)有BFD鄰居會(huì)話狀態(tài)關(guān)閉的提示,當(dāng)RB上fa0/0接口恢復(fù)正常后,路由器RA又會(huì)自動(dòng)選擇到主鏈路上轉(zhuǎn)發(fā)數(shù)據(jù)。
圖4 BFD與OSPF動(dòng)態(tài)路由聯(lián)動(dòng)
如圖4所示,路由器RA和RB通過二層交換機(jī)互連,通過運(yùn)行OSPF路由協(xié)議來建立路由,同時(shí)通過在雙方接口上關(guān)聯(lián)BFD應(yīng)用,在RB和二層交換機(jī)之間鏈路發(fā)生故障后,BFD能夠快速檢測并通告OSPF協(xié)議,觸發(fā)協(xié)議快速收斂。
路由器RA的BFD與OSPF動(dòng)態(tài)路由聯(lián)動(dòng)部分配置
此時(shí),在路由器RA上通過show bfd neighbers確認(rèn)BFD鄰居狀態(tài)。
在RA上可以查看OSPF動(dòng)態(tài)路由協(xié)議學(xué)習(xí)到的網(wǎng)段信息。
當(dāng)交換機(jī)和RB上的鏈路斷開后,RA上學(xué)習(xí)到的OSPF動(dòng)態(tài)路由信息會(huì)很快刪除,實(shí)現(xiàn)了網(wǎng)絡(luò)路由信息的快速收斂。而如果沒有開啟BFD功能的話,RA上通過OSPF學(xué)習(xí)到的相關(guān)網(wǎng)段信息仍然存在,直到OSPF協(xié)議規(guī)定的廣播型網(wǎng)絡(luò)中40秒dead周期到達(dá)后,路由信息才會(huì)清除。