一、概述
M-BFD是在最新的RFC8562(Bidirectional Forwarding Detection (BFD) for Multipoint Networks,2019年4月Release)中定義,針對(duì)多點(diǎn)或組播網(wǎng)絡(luò)中的一種特殊應(yīng)用,它和傳統(tǒng)BFD的雙向檢測(cè)是有“沖突”的,因?yàn)槎帱c(diǎn)傳輸本質(zhì)上是單向的,僅僅是為了驗(yàn)證單向連接的連通性,在RFC8562中定義了兩種角色:Head和Tail,對(duì)于BFD報(bào)文,Head端上的MEP只發(fā)不收,而Tail端的MEP只收不發(fā),協(xié)議的本質(zhì)是只為了檢測(cè)Head–>Tail的單向的連通性,如下圖所示,BFD的報(bào)文只會(huì)從Head發(fā)向Tail,只在Tail檢測(cè)Head到Tail的連通性,Head不需要知道Tail是否丟失。

Head端MEP不運(yùn)行狀態(tài)機(jī),它的狀態(tài)依靠管理員配置維護(hù),只有Up一種狀態(tài),用戶可通過(guò)BFD報(bào)文通告遠(yuǎn)端Tail本地狀Up,Down,AdminDown;而Tail狀態(tài)機(jī)相對(duì)RFC5880也較為簡(jiǎn)單,沒(méi)有INIT狀態(tài),只有Down、UP兩種狀態(tài),其狀態(tài)機(jī)如下:

在時(shí)間協(xié)商方面,其原理和RFC5880定義的基本是一樣的,在Head端由于只發(fā)不收故本地RequiredMinRxInterval = 0,DesiredMinTxInterval !=0為期望發(fā)送報(bào)文間隔,而Tail只收不發(fā)故本RequiredMinRxInterval != 0為期望接收間隔,DesiredMinTxInterval ==0;當(dāng)Head期望發(fā)送的時(shí)間間隔發(fā)生變化,也會(huì)發(fā)P請(qǐng)求修改,Tail端不需要回F,直接修改ActualRxInterval= DesiredMinTxInterval
(報(bào)文),而在故障檢測(cè)方面,Tail端的故障檢測(cè)時(shí)間DetecTime = ActualRxInterval * DetectMult(報(bào)文),每當(dāng)收到BFD控制報(bào)文時(shí),就會(huì)重置檢測(cè)時(shí)間DetecTime ,并保持會(huì)話UP狀態(tài)。如果在檢測(cè)時(shí)間內(nèi)沒(méi)有收到BFD控制報(bào)文,即DetecTime減為0時(shí),BFD會(huì)話會(huì)遷移到DOWN狀態(tài),并產(chǎn)生dLoc,通知該會(huì)話所服務(wù)的上層應(yīng)用發(fā)生故障,由上層應(yīng)用采取相應(yīng)的保護(hù)措施。
二、RFC8563
RFC8563(Bidirectional Forwarding Detection (BFD) Multipoint Active Tails,2019年4月Release)是對(duì)RFC8562的一個(gè)補(bǔ)充,在某些特定的應(yīng)用中,Head可能需要獲取各個(gè)Tail的連接情況而引入的標(biāo)準(zhǔn),總共有三種方法:
Tail當(dāng)檢測(cè)到fail時(shí),主動(dòng)發(fā)送單播BFD給Client告知;
Head 偶爾發(fā)送Poll(仍為組播)查詢所有Tail,Tail回復(fù)單播Final告知;
Client主動(dòng)發(fā)送Poll到Tail(單播)查詢指定Tail狀態(tài),Tail回復(fù)單播Final告知。
在RFC8563中對(duì)Head定義了兩個(gè)角色MultipointClient和MultipointHead,MultipointHead承擔(dān)head公共的一個(gè)角色,它承擔(dān)向Tail發(fā)送定時(shí)發(fā)送BFD Hello報(bào)文,同時(shí)也可以按需發(fā)送Multipoint Poll sequence的報(bào)文,對(duì)接收到的BFD根據(jù)YourDisc查到得到LMEP,其LMEP配置的角色是MultipointHead,然后根據(jù)BFD中攜帶的MYDisc查找得到RMEP,其RMEP配置的角色為MultipointClient。為了查詢遠(yuǎn)端Tail的狀態(tài),在RFC8563中可通過(guò)MultipointHead發(fā)送P輪詢(組播)遠(yuǎn)端Tail的狀態(tài),遠(yuǎn)端Tail收到P之后會(huì)將P清為0 ,F(xiàn)置為1,并通過(guò)反向路徑進(jìn)行回復(fù);如果Client需要單獨(dú)查詢遠(yuǎn)端某個(gè)Tail信息時(shí),可發(fā)送單播BFD 置P為1查詢對(duì)應(yīng)的遠(yuǎn)端Tail,遠(yuǎn)端Tail收到P之后會(huì)將P清為0 ,F(xiàn)置為1,并通過(guò)反向路徑進(jìn)行回復(fù)。

1.狀態(tài)機(jī)
Head或Client同樣沒(méi)有狀態(tài)機(jī)的概念,Tail的狀態(tài)機(jī)同RFC8562。
2. 時(shí)間協(xié)商
Tail端的故障檢測(cè)和RFC5862是一樣的;而Head或Client端只是為了查詢狀態(tài),也不需要時(shí)間協(xié)
商。
3. 故障檢測(cè)
a.Tail故障檢測(cè)
Tail端的故障檢測(cè)和RFC8562是一樣的。
b.Client故障檢測(cè)
當(dāng)Client發(fā)送P包是目的是對(duì)某個(gè)Tail查詢狀態(tài),其DetectTime = bfd.detectMult * actualTxInterval;而當(dāng)Head統(tǒng)一向所有Tail發(fā)送P時(shí),Client上DetectTime 大于或等bfd.RequiredMinRxInteral時(shí)間,或者遠(yuǎn)大于這個(gè)時(shí)間,以保證報(bào)文能走一圈的時(shí)間;但是如果detecTime超時(shí)后沒(méi)有收到回復(fù),只表示本次查詢失敗,不代表Tail沒(méi)有收到Head的報(bào)文。所以對(duì)于Client端MEP而言,不存在故障檢測(cè)一說(shuō),它只是作為Client會(huì)記錄或查詢遠(yuǎn)端Tail的狀態(tài)信息。
三、應(yīng)用
如下是華為NE40交換機(jī)中部署B(yǎng)FD for組播VPLS可以對(duì)組播VPLS鏈路進(jìn)行檢測(cè)的一種典型應(yīng)用,當(dāng)鏈路或中間節(jié)點(diǎn)故障時(shí),葉子節(jié)點(diǎn)上BFD能夠快速感知,并觸發(fā)保護(hù)組切換到備份組播隧道上接收流量,從而滿足用戶對(duì)于組播業(yè)務(wù)的可靠性需求。

如上圖所示,當(dāng)鏈路1(AC鏈路)發(fā)生故障時(shí),根節(jié)點(diǎn)上BFD感知到接口Down,立即停止發(fā)送BFD報(bào)文,所有葉子節(jié)點(diǎn)收不到BFD報(bào)文上報(bào)Down,觸發(fā)保護(hù)組切換到備份組播隧道上接收流量;當(dāng)節(jié)點(diǎn)2、鏈路3、節(jié)點(diǎn)4、鏈路5故障時(shí),葉子節(jié)點(diǎn)收不到BFD報(bào)文上報(bào)Down,觸發(fā)保護(hù)組切換到備份組播隧道上接收流量。故障恢復(fù)后,BFD重新建立,葉子節(jié)點(diǎn)感知故障恢復(fù)后,回切到主路徑接收組播數(shù)據(jù)。