周三友,李吉良,周玉娟
(中國(guó)電子科技集團(tuán)公司第五十四研究所,河北 石家莊 050081)
為了減小設(shè)備故障對(duì)業(yè)務(wù)的影響,提高網(wǎng)絡(luò)的可用性,需要對(duì)設(shè)備之間通信的連通性進(jìn)行檢測(cè),以便能夠及時(shí)采取措施,持續(xù)向用戶(hù)提供服務(wù)。
傳統(tǒng)的連通性檢測(cè)方法主要有2種:① 硬件信號(hào)檢測(cè)方式通過(guò)檢測(cè)線(xiàn)路中的信號(hào)狀態(tài)進(jìn)行連通性檢測(cè),例如SDH網(wǎng)絡(luò)中的信號(hào)丟失、幀失步等。這種方式的響應(yīng)速度很快,但僅有一部分物理鏈路具有這一功能,并且只能檢測(cè)底層故障,鏈路層以上的故障無(wú)法檢測(cè)。② 軟件握手檢測(cè)方式通過(guò)定時(shí)交互握手消息來(lái)檢測(cè)連通性,例如路由協(xié)議中的Hello報(bào)文機(jī)制。這種方式能夠檢測(cè)到網(wǎng)絡(luò)層的故障,但響應(yīng)時(shí)間較慢,通常在秒級(jí)以上。
為了解決傳統(tǒng)連通性檢測(cè)方式存在的問(wèn)題,IETF提出了BFD,希望通過(guò)一種統(tǒng)一的機(jī)制提供快速連通性檢測(cè)。
IETF在2010年6月正式發(fā)布了RFC5880[1],詳細(xì)描述了BFD的基本原理以及BFD協(xié)議的使用場(chǎng)景。隨后,又發(fā)布了一系列補(bǔ)充協(xié)議文檔,包括RFC5881[2],RFC5882[3],RFC5883[4],RFC5884[5],RFC5885[6]等,擴(kuò)展了BFD的應(yīng)用范圍。BFD是一種通用、介質(zhì)無(wú)關(guān)、協(xié)議無(wú)關(guān)的快速連通性檢測(cè)機(jī)制,可以應(yīng)用到多種不同的場(chǎng)景中[7-10],實(shí)現(xiàn)毫秒級(jí)的故障檢測(cè),因此很快被各大通信設(shè)備廠(chǎng)商采納,成為通信設(shè)備的一項(xiàng)重要功能。文獻(xiàn)表明BFD已經(jīng)在多種網(wǎng)絡(luò)中得到了應(yīng)用,取得了良好的效果。
BFD通過(guò)快速、周期性地發(fā)送BFD包來(lái)進(jìn)行連通性檢測(cè),包括2種工作模式:
① 異步模式:系統(tǒng)周期性地向?qū)Χ税l(fā)送BFD控制報(bào)文,如果對(duì)端沒(méi)有收到一定數(shù)量的報(bào)文則會(huì)話(huà)狀態(tài)為DOWN。
② 按需模式:一旦BFD會(huì)話(huà)建立后,系統(tǒng)可以要求遠(yuǎn)端停止發(fā)送BFD控制報(bào)文,只有當(dāng)系統(tǒng)需要驗(yàn)證連通性時(shí)才與遠(yuǎn)端系統(tǒng)短暫地交互一系列BFD控制報(bào)文,然后遠(yuǎn)端系統(tǒng)重新處于靜默。
還有一種和上述工作模式結(jié)合使用的功能——回聲功能。當(dāng)使用回聲功能時(shí),系統(tǒng)發(fā)送BFD回聲報(bào)文到遠(yuǎn)端系統(tǒng),然后由遠(yuǎn)端將報(bào)文環(huán)回。如果系統(tǒng)沒(méi)有收到一定數(shù)量環(huán)回的回聲報(bào)文,就認(rèn)為會(huì)話(huà)結(jié)束(DOWN)。
BFD報(bào)文必須封裝在目的端口為3 784的UDP報(bào)文中,源端口必須在49 152~65 535之間。
BFD報(bào)文格式如圖1所示。
圖1 BFD報(bào)文格式
各字段含義如下:
Vers:版本,目前為1。
Diag:診斷碼,指示本地系統(tǒng)最近的會(huì)話(huà)狀態(tài)變化的原因。
Sta:發(fā)送系統(tǒng)記錄的當(dāng)前BFD會(huì)話(huà)狀態(tài)。
Flag:包括P(Poll),F(xiàn)(Final),C,A,D,M等控制位,實(shí)現(xiàn)報(bào)文交互過(guò)程的控制功能。
DetectMult:檢測(cè)時(shí)間倍數(shù)。在異步模式中,協(xié)商的發(fā)送間隔乘以此倍數(shù),即接收系統(tǒng)的檢測(cè)時(shí)間。
Length:BFD控制報(bào)文長(zhǎng)度(Byte)。
My Discriminator:發(fā)送端BFD會(huì)話(huà)標(biāo)識(shí)。
Your Discriminator:接收端BFD會(huì)話(huà)標(biāo)識(shí)。
Desired Min TX Interval:本地系統(tǒng)發(fā)送BFD控制報(bào)文的最小時(shí)間間隔(ms)。
Required Min RX Interval:系統(tǒng)接收BFD控制報(bào)文的最小時(shí)間間隔(ms)。
Required Min Echo RX Interval:系統(tǒng)接收回聲報(bào)文的最小時(shí)間間隔(ms)。
此外,根據(jù)需要還可以對(duì)BFD包增加認(rèn)證字段。
常見(jiàn)的路由交換設(shè)備一般包括控制交換板和線(xiàn)路接口板2種板卡。根據(jù)BFD功能分布位置不同可以將BFD的設(shè)計(jì)實(shí)現(xiàn)分為2種:集中式BFD和分布式BFD[11]。
集中式BFD將BFD會(huì)話(huà)的維護(hù)管理、BFD包的收發(fā)等所有工作全部放在控制交換板上進(jìn)行。這種方法的優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,缺點(diǎn)是BFD會(huì)話(huà)較多時(shí)可能造成控制交換板CPU過(guò)載。分布式BFD將BFD的功能分解到不同的板卡上進(jìn)行,控制交換板負(fù)責(zé)BFD會(huì)話(huà)的創(chuàng)建、維護(hù)和管理,線(xiàn)路接口卡負(fù)責(zé)BFD包的發(fā)送、接收和檢測(cè)。分布式BFD的優(yōu)點(diǎn)是降低了控制交換板的開(kāi)銷(xiāo),缺點(diǎn)是實(shí)現(xiàn)相對(duì)復(fù)雜。
為了避免大量BFD包對(duì)控制交換板CPU的沖擊,提高設(shè)備的穩(wěn)定性,本項(xiàng)目選擇分布式BFD方式。其中,BFD會(huì)話(huà)管理在控制交換板的CPU上實(shí)現(xiàn)。BFD會(huì)話(huà)創(chuàng)建完畢進(jìn)入“UP”狀態(tài)后,BFD包的發(fā)送、接收和監(jiān)控在線(xiàn)路接口板上實(shí)現(xiàn)。在具體的實(shí)現(xiàn)上,可以采用通用CPU實(shí)現(xiàn)[12],也可以采用多核處理器[13]或ASIC實(shí)現(xiàn)[14],但總體來(lái)看基于CPU的軟件實(shí)現(xiàn)會(huì)占用較多的CPU資源,ASIC實(shí)現(xiàn)的靈活性比較差。
與CPU,ASIC相比,網(wǎng)絡(luò)處理器既能進(jìn)行靈活的編程,也具有較高的處理性能,因此在網(wǎng)絡(luò)設(shè)備中得到了大量的應(yīng)用[15-17]。本文采用網(wǎng)絡(luò)處理器NPX進(jìn)行BFD處理,它具有以下特點(diǎn):雙向20 G包處理能力;集成流量管理模塊,支持QoS;編程方式簡(jiǎn)單。
按照包的處理順序劃分,NPX主要由解碼、查找I、分析、查找II、修改五個(gè)模塊組成[17],如圖2所示。
圖2 NPX的模塊組成
每個(gè)模塊都有多個(gè)獨(dú)立的微引擎,執(zhí)行特定的微碼程序。一般來(lái)說(shuō),解碼模塊主要根據(jù)接收數(shù)據(jù)包的特征字段進(jìn)行分類(lèi),提取包中特定的信息組成查找鍵和消息發(fā)送給查找I模塊。查找I/II兩個(gè)模塊可以進(jìn)行線(xiàn)性表、Hash表、二叉樹(shù)和最長(zhǎng)匹配等不同形式的查表。分析模塊分析查找I模塊的查表結(jié)果,必要時(shí)可要求查找II模塊可以進(jìn)行二次查表。修改模塊根據(jù)包中攜帶的信息及查表結(jié)果修改包中的內(nèi)容,并發(fā)送到指定的端口。
為了實(shí)現(xiàn)BFD等OAM功能,NPX內(nèi)部集成了一個(gè)OAM模塊,可以實(shí)現(xiàn)大量BFD會(huì)話(huà)的數(shù)據(jù)包產(chǎn)生和監(jiān)測(cè)功能[18]。
由于網(wǎng)絡(luò)處理器具有實(shí)現(xiàn)靈活、性能高的特點(diǎn),因此本項(xiàng)目使用網(wǎng)絡(luò)處理器進(jìn)行BFD設(shè)計(jì)。
每個(gè)BFD會(huì)話(huà)可能處于3個(gè)狀態(tài):DOWN,INIT,UP。BFD會(huì)話(huà)的當(dāng)前狀態(tài)和接收BFD包中的Sta字段決定了BFD會(huì)話(huà)的下一狀態(tài)。
當(dāng)BFD會(huì)話(huà)剛被創(chuàng)建時(shí),處于DOWN狀態(tài),此時(shí)開(kāi)始周期性地發(fā)送BFD包,并監(jiān)測(cè)對(duì)方發(fā)送的BFD包。如果接收BFD包表示對(duì)端處于DOWN狀態(tài),則本端遷移到INIT態(tài)。如果接收BFD包表示對(duì)端處于INIT狀態(tài),則本端直接遷移到UP態(tài)。
當(dāng)BFD會(huì)話(huà)處于INIT狀態(tài)時(shí),如果規(guī)定時(shí)間內(nèi)未收到對(duì)端BFD包,則轉(zhuǎn)入DOWN狀態(tài)。如果接收BFD包表示對(duì)端處于INIT或者UP狀態(tài),則本端遷移到UP態(tài)。
當(dāng)BFD會(huì)話(huà)處于UP狀態(tài)時(shí),如果規(guī)定時(shí)間內(nèi)未收到對(duì)端BFD包,或者接收BFD包表示對(duì)端處于DOWN狀態(tài),則本端遷移到DOWN態(tài)。
BFD會(huì)話(huà)的狀態(tài)轉(zhuǎn)移過(guò)程如圖3所示。
圖3 BFD會(huì)話(huà)狀態(tài)轉(zhuǎn)移圖
NPX通過(guò)OAM模塊的專(zhuān)用定時(shí)器(RTC)定時(shí)產(chǎn)生BFD包,發(fā)送過(guò)程如圖4所示。產(chǎn)生的BFD包攜帶著定時(shí)器ID發(fā)送到解碼模塊。
圖4 BFD包的產(chǎn)生
解碼模塊首先對(duì)包進(jìn)行預(yù)處理,通過(guò)硬件解碼器進(jìn)行數(shù)據(jù)包分類(lèi),并將分類(lèi)結(jié)果存儲(chǔ)在在特定的硬件寄存器中。解碼模塊的微碼程序提取隨BFD包一起收到的定時(shí)器ID,形成查找Key,發(fā)送到查找模塊I。
查找模塊I根據(jù)定時(shí)器ID查找發(fā)送BFD會(huì)話(huà)表,查找結(jié)果中包含My Discriminator,Your Discriminator等信息,這些信息被發(fā)送給分析模塊。
分析模塊基本不做處理,直接通過(guò)查找II模塊將查表結(jié)果傳遞給修改模塊。修改模塊將查表結(jié)果中的信息填寫(xiě)到BFD包的對(duì)應(yīng)字段中,發(fā)送到指定的輸出端口。
接收BFD包的處理如圖5所示。
解碼模塊首先根據(jù)目的IP、目的端口等信息識(shí)別到接收包為BFD包,然后提取包中的My Discriminator,Your Discriminator作為查找鍵傳遞給查找模塊I。
查找模塊I查找接收BFD會(huì)話(huà)表,得到對(duì)應(yīng)的看門(mén)狗定時(shí)器ID,發(fā)送到分析模塊。分析模塊將該定時(shí)器清零,然后丟棄該BFD包。如果查找失敗,該BFD包將會(huì)被轉(zhuǎn)發(fā)到控制交換板進(jìn)行處理。
NPX為每一個(gè)BFD會(huì)話(huà)分配一個(gè)專(zhuān)用的看門(mén)狗定時(shí)器。如果在規(guī)定的檢測(cè)周期內(nèi)從接收端口收到了本會(huì)話(huà)的BFD包,微碼程序?qū)?fù)位該定時(shí)器。
如果在規(guī)定的檢測(cè)周內(nèi)沒(méi)有收到BFD包,則會(huì)產(chǎn)生定時(shí)器溢出事件發(fā)送給解碼模塊。解碼模塊收到該事件后,通過(guò)消息的方式通知到控制交換板,由控制交換板進(jìn)行進(jìn)一步的處理。
BFD是一種簡(jiǎn)單、快速、通用的連通性檢測(cè)方法。本文采用一種分布式處理的方式設(shè)計(jì)實(shí)現(xiàn)了BFD,通過(guò)控制交換板的CPU進(jìn)行BFD會(huì)話(huà)管理,利用線(xiàn)路接口板的網(wǎng)絡(luò)處理器進(jìn)行BFD包的快速發(fā)送、接收和故障檢測(cè),避免了大量BFD包對(duì)控制交換板CPU的沖擊,提高設(shè)備的穩(wěn)定性。