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