BFD技術背景
什么是BFD?它的主要作用是做什么的,這是我們學習BFD需要搞清楚的地方;
BFD是Bidirectional Forwarding Detection的縮寫,翻譯成中文就是雙向轉發檢測;該技術主要用于通信鏈路故障檢測;我們知道傳統的鏈鋸故障檢測機制有硬體檢測,比如通過SDH(Synchronous Digital Hierarchy,同步數字體系)告警檢測鏈路故障,這種方式的優點就是很快發現故障,但不是所有介質都能提供硬體檢測;其次就是我們比較熟悉的慢HELLO機制;所謂慢hello機制就是通過采用路由協議中的hello報文機制;這種檢測機制檢測到故障都需要一定的時間,且一般都是秒級;這樣一來對于高速資料傳輸的核心鏈路,如果故障在超過1秒才檢測出來,這會導致大量的資料丟失;對于延遲敏感的業務,例如語音業務,這肯定是不能接受的,并且這種慢hello機制是嚴重依賴路由協議;除此之外不同協議有時會提供專用的檢測機制,但在系統間互聯互通時,這種專用的檢測機制通常難以部署;為了減小設別故障對業務的影響,提高網路的可用性,設備需要能夠盡快檢測到與相鄰設備間的通信故障,以便能夠及時采取措施,從而保證業務繼續進行;BFD主要解決了上述檢測機制的不足,它是更通用,標準化,與介質無關,協議無關,為上層協議服務;使用BFD以后,全網統一的檢測機制,用于快速、監控網路中鏈路或路由的轉發連通狀況,保證鄰居之間能夠快速檢測到通信故障,從而快速建立起備用通道恢復通信;簡單講BFD就是用于快速檢測出通信雙方通信鏈路故障的檢測機制,它的特點就是無關介質和協議,更通用和標準,為上層協議服務;
BFD作業機制
BFD本身沒有發現機制,它主要靠上層協議通知來建立BFD會話,周期性發送BFD控制報文進行檢測,檢測到故障后,再通知上層協議;這里需要解釋下,雖然BFD也是通過周期性發送控制報文來進行檢測,它和慢hello的路由協議檢測機制不同的是,BFD發送控制報文的速度要比慢hello路由協議要快很多,當然BFD發送報文的速度是通過雙方BFD配置協商而來,而慢hello路由協議一般都是固定不變的;BFD的控制報文可以控制在微秒級;
BFD會話建立程序

提示:上圖是以ospf為例,BFD會話建立流程;首先上層ospf協議通過自己的hello機制發現鄰居并建立連接;在ospf建立了新鄰居關系時,將鄰居的引數及檢測引數都會通告給BFD(包括目標地址和源地址等);然后BFD根據收到的引數進行計算并建立起會話;
BFD故障處理程序

提示:以ospf為例,當網路出現故障時,首先由BFD檢測到網路發生故障,然后BFD的會話會被拆除;BFD拆除會話以后會通知本地三層協議行程BFD鄰居不可達;此時本地上層協議收到BFD的通知以后會終止上層協議的鄰居關系;這樣一來就實作了本地上層協議快速發現故障(這比通過上層協議本身的hello包檢測機制要快很多);如果網路中存在備用路徑;路由器將會選擇備用路徑;
BFD狀態機制

提示:BFD狀態機的建立和拆除都采用三次握手,以確保兩端系統都能知道狀態的變化,最終目的就是可靠,類似TCP的三次握手,都是確保可靠性;

提示:BFD狀態首先由down狀態開始,即會話沒有建立起;在收到對方發送到狀態為down的BFD控制報文以后,本端BFD的狀態會從原有的down進入到init初始化的狀態;然后本端會發送狀態為init的BFD控制報文給對端,此時對端收到本端發送到狀態為init的控制報文后,會從原有的down狀態轉變為init狀態;然后對端發送狀態為init的控制報文,本端收到以后,會從原來的init狀態轉變為up狀態,然后本端發送狀態為up的控制報文,對端收到以后會從init狀態轉變為up狀態;只有兩端的狀態都為up時,此時BFD會話才算建立;
狀態遷移規則:對端狀態變化,檢測定時器超時;比如在對端發送狀態為init的控制報文時,由于各種原因本端沒有收到,此時如果對端等待一定時間還是沒有收到本端發送的init狀態控制報文,對端會從原有的init狀態遷移為down狀態;對于up狀態也是一樣,如果在一定時間類沒有收到本端的up狀態的報文,對端會從up狀態遷移至down狀態;所謂對端狀態變化是指本端收到對端發送到狀態報文后,會觸發本端的狀態變化,比如對端發送down狀態時,如果本端收到,本端狀態會從down狀態轉變為init狀態;對端發送init狀態,如果本端收到會觸發本端從init狀態轉變為up狀態;
BFD會話作業方式
BFD會話作業方式主要分兩種,一種是控制報文方式,所謂控制報文方式是指鏈路兩端會話通過控制報文狡猾檢測鏈路的狀態;另外一種就是echo報文方式,這種方式主要用于某一端不支持BFD的場景;鏈路某一端通過發送echo報文由另一端轉發回來,實作鏈路雙向監測;
BFD報文格式

提示:BFD使用組播地址為224.0.0.184作為目標地址進行作業;其中控制報文的方式有兩個udp埠,分別是3784和4784;3784主要用于單跳檢測;4784主要用于多跳檢測;如果是echo報文方式,對應udp埠為3785;BFD報文除了常規欄位如版本(vers),狀態(sta),長度(length)等,重要的有delect mult 檢測倍數,my discriminator(本端的標識),your discriminator(對端的標識),desired min tx interval 期望的最小發送間隔,required min rx interval 要求的最小接收間隔,required min echo RX interval要求echo的最小接收間隔(echo方式);下面的auth type auth len,以及authentication data 這些都是用于認證相關欄位;
BFD運行模式
會話前模式
會話建立前的模式主要分主動模式和被動模式,所謂主動模式是指主動發送BFD控制報文,不管是否收到對端發來的BFD控制報文,都會發送BFD報文;被動模式是指不會主動發送BFD控制報文,直到收到對端發送到BFD控制報文;簡單講就是主動模式會主動發送BFD控制報文,它不管是否收到對端的控制報文,它都會發;而被動模式只有收到對端的控制報文后才開始發送本端的控制報文;這也就意味著要想建立起BFD會話,我們至少有一端需要運行為主動模式,會話才能正常建立,如果兩端都是被動模式,BFD會話是建立不起來的;默認運行在主動模式;
會話建立后模式
會話建立后的模主要有異步模式和查詢模式,所謂異步模式是指周期性地發送BFD控制報文,如果在檢測時間內沒有收到BFD控制報文則將會話down掉;查詢模式是指一旦BFD會話建立,不再周期性發送BFD控制報文,而是通過其他機制檢測連通性,減少大量BFD會話報文所帶來的開銷;
BFD應用場景
1、檢測IP鏈路:在ip鏈路上建立BFD會話,利用BFD檢測機制快速檢測故障;BFD檢測ip鏈路支持單跳檢測和多跳檢測;
單跳檢測

提示:所謂單跳檢測就是指檢測直連系統的ip連通性;單挑就是指ip的下一跳就只有一跳;通常單挑檢測就是直接系結出介面即可;
多跳檢測

提示:所謂多跳檢測就是指檢測兩個系統間的任意路徑,可以跨越很多跳,也可能發生重疊;通常多跳檢測是直接系結ip地址而不是介面;即便是直連鏈路,如果我們系結ip地址也是屬于多跳檢測;
2、單臂回聲功能

提示:單臂回聲是指對于只有一端支持BFD的環境,通過BFD報文的換回操作檢測轉發鏈路的連通性;這里需要注意一點單臂回聲功能只能用于單跳BFD會話中;
3、BFD與介面狀態聯動

提示:與介面狀態聯動主要用于減少非直連鏈路故障說導致的問題;如上交換機A和B運行vrrp,如果中間兩個交換機之間的鏈路down掉以后,不管誰是master,backup端只能等到超時以后才會變為master;此時由于中間鏈路斷掉,對應master會收不到其他設備發送到vrrp報文,當然它就會認為它是獨立的,從而導致兩個設備都有可能成為master;如果我們配置了介面關聯,當鏈路發生故障對應介面會被標記為down,此時不管是master端還是backup端感知到對應介面為down以后,對應狀態都會轉變為init狀態;從而避免出現兩個master的情況;簡單講與介面狀態聯動就是提高介面感應鏈路故障的靈敏度;從而更早的發現故障;
4、BFD與靜態路由聯動
與動態路由協議不同,靜態路由本身沒有檢測機制,所以當網路發生故障的時候,需要管理員介入;BFD為靜態路由系結會話,檢測鏈路故障(由up轉為down)后,BFD會將故障上報路由管理系統,有路由管理模塊將這條路由設定為“非激活”狀態(此條路由不可用,從ip路由表中洗掉);
5、BFD與OSPF聯動

提示:將BFD和OSPF關聯起來,通過BFD對鏈路故障的快速感應進而通知ospf協議,從而加快ospf協議對網路拓撲變化的回應;
ospf系結BFD和未系結BFD會話的區別

6、BFD與BGP聯動

BGP協議通過周期性的向對等體發送keepalived報文實作鄰居檢測機制,但這種機制檢測到故障所需時間比較長,超過1分鐘;當資料達到吉位元速率級別時,將會導致大量的資料丟失;利用BFD的快速檢測機制,迅速發現BGP鄰居間鏈路故障,并報告給BGP協議,從而實作BGP路由的快速收斂;

7、BFD與VRRP聯動

提示:將BFD應用于backup對master的檢測,VRRP通過監視BFD會話狀態實作主備快速切換,切換時間控制在50毫秒以內;VRRP通過監視BFD的會話狀態,如果有故障產生,BFD會通知VRRP,vrrp收到bfd的通知以后,會自動將backup的優先級增加或者將master的優先級降低從而來實作快速切換;一般建議將backup的優先級增大,同時master端關聯介面狀態,從而避免出現兩個master的情況;
BFD配置

如上拓撲配置sw1到sw4二層埠檢測,當sw2和sw3之間鏈路斷開,關聯sw1的g0/0/1口軟down,sw4的g0/0/1口軟down
為了使實驗很方便的看到效果,建議把4個交換機的stp直接關掉,屏蔽stp對bfd的影響;
在sw1開啟bfd,并系結g0/0/1口的埠檢測

提示:第一條命令是全域開啟bfd檢測;第二條命令是創建g0/0/1口二層鏈路的檢測;如果創建的是三層介面檢測后面peer-ip 就直接跟對應ip地址即可;
配置本地識別符號和遠程識別符號

提示:本地識別符號在對端配置就是遠程識別符號,遠程識別符號在對端就是本地識別符號;本地識別符號和遠程識別符號不能配置成一樣;但是遠程識別符號可以配置成一樣;
提交配置

提示:bfd配置只有提交以后才會生效;
抓包查看bfd控制報文

提示:可以看到我們能夠正常抓到sw1發送的BFD控制報文;其中本地識別符號是我們設定的11(16進制就是0b),遠程識別符號22(16進制就是16);會話狀態是down;目標地址是224.0.0.184,埠為3784,這意味著我們配置的是單跳檢測;
配置sw4的bfd

驗證bfd會話

提示:可以看到現在sw1和sw4配置的bfd會話已經正常建立;
現在抓包查看控制報文資訊

提示:現在抓包除了我們配置的標識以外,現在的會話狀態是up狀態,對應最小發送間隔和最小接受間隔都從原來的一個亂數字固定了下來;這是因為一開始會話沒有建立,兩者不能正常協商出一個發送間隔和接受間隔,所以就以一個隨機的時間來;
配置sw1和sw4與介面狀態關聯


查看BFD會話詳細資訊

提示:可以看到對應BFD已經關聯了介面狀態;
驗證:埠sw2和sw3之間的鏈路,看看對應sw1和sw4對應g0/0/1的介面是否會down呢?

提示:可以看到我們把sw2的g0/0/2口down掉以后,對應bfd會觸發sw1和sw4的g0/0/1口down;這是因為BFD會話down掉以后,觸發對應介面狀態也跟著down掉;
配置最小發送時間和最小接收時間以及本地檢測倍數

提示:以上配置表示sw1最小發送間隔為100毫米發送一次,即1秒發送10次;默認情況下最小發送間隔為1秒,最小接收間隔也為1秒;
現在抓包看看對應sw1是否是1秒發送10個包呢?

提示:可以看到sw1并不是1秒發送10個包;其實原因很簡單,就是因為sw4最小接收間隔為1秒,它接受沒有那么快,所以導致sw1發送也不會那么快;
配置sw4最小發送間隔為200毫秒,接收間隔為100毫秒,看看對應發包速率是怎樣的呢?

抓包查看發包速率

提示:可以看到在sw4上修改了最小發送間隔和最小接收間隔以后,對應發包的速度明顯快了很多;這意味著本端發包速度和對端接收間隔有關系;同理對端發包的速度和本端的接收間隔有關系;
本地檢測倍數和最小發送間隔、最小接收間隔之間的關系
本端檢測時間間隔=對端檢測倍數×max(對端發送間隔,本端接收間隔)
配置BFD與vrrp聯動
洗掉原有的介面關聯


在sw1上新建三層介面,并創建虛擬vip為254

在sw4上新建三層介面,并創建虛擬vip為254

驗證vrrp


提示:可以看到sw1是backup,sw4是master;
在sw1上vrrp關聯bfd并設定發生故障對應優先級增加80

提示:這里的配置BFD的session id要看本地識別符號;
驗證:把sw2的g0/0/2down掉,看看對應vrrp的backup是否會升級為master?

提示:可以看到當我們把sw2的g0/0/2口down掉以后,對應sw1從原來的backup變為了master;
查看sw1的vrrp優先級是否發生了變化?

提示:可以看到我們之前配置的優先級為150,現在運行優先級為230;這是因為bfd檢測到鏈路斷掉以后,對應觸發了vrrp增加80優先級;
查看sw4的角色是否有變化呢?

提示:可以看到sw4的角色還是master,并沒有發生變化;這是因為sw2和sw3之間的鏈路斷開以后,sw4并沒有收到比它更高優先級的vrrp訊息,所以它認為它就是master;
配置sw4關聯介面狀態

恢復鏈路然后再斷開,看看對應sw4的角色是否會發生變化呢?

提示:可以看到配置了介面關聯以后,對應sw4的角色不再是master;
配置BFD與ospf聯動
sw1和sw4的ospf配置


在沒有關聯bfd時,當鏈路down掉以后,看看對應ospf的鄰居是否down掉?

提示:可以看到沒有關聯bfd會話時,對應鏈路down掉以后,ospf鄰居并不會馬上斷掉,需要等待很長時間才能斷掉(40秒);
opsf關聯bfd會話


驗證bfd session

提示:可以看到bfd會話多了一個;這里說明一下bfd和ospf關聯,bfd會話會動態生成一個;
查看bfd會話詳情

驗證:現在斷開鏈路,看看ospf鄰居是否立即斷開呢?

提示:可以看到現在我們斷開鏈路,對應ospf鄰居也隨之被斷開;這是因為bfd檢測到鏈路故障,通知了ospf;當然我們也可以在bfd里系結介面狀態;
配置BFD與靜態路由聯動
在sw1上配置兩條靜態路由,并設定不同優先級

配置靜態路由關聯BFD會話

斷開鏈路前驗證路由表

斷開鏈路,然后再次驗證路由表看看有什么變化?

提示:可以看到現在鏈路斷開以后,對應路由表里的路由也隨之發生了變化;原來的默認路由現在變成了非活動的路由,說明bfd檢測到對應鏈路故障;
作者:Linux-1874 出處:https://www.cnblogs.com/qiuhom-1874/ 本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利.轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/499533.html
標籤:其他
上一篇:初等數論
下一篇:Postman Mock快速入門
