網絡體檢技術大揭秘(中篇)
我們接著《網絡體檢技術大揭秘》的上篇聊。在上篇中我們介紹了網絡體檢的必要性,并提前和大家劇透了下我們將從OSI七層網絡模型或TCP/IP模型的二三層分別和大家一起認識一些標準的、主流的網絡體檢手段,接著給大家展示了一種名曰EFM的二層體檢手段。
記憶力好的同學應該能猜到我們今天要講點啥,因為我們在上篇中用一個表格給大家展示了兩種二層體檢手段的異同。沒錯,上篇的EFM應用范圍屬于鏈路級,所以也比較簡單。
今天打算和大家一起認識的這位大兄弟能耐比EFM高,它的應用范圍屬于網絡級的,也就是所整個二層網絡(不管有多大,只要是二層的就行)它都能搞定。NB的人物必須配備NB的接待規格,NB的技術我們就單設個中篇來描述,也算是一種對NB技術的致敬吧~
2. CFD技術
(1) 概念介紹
· MD
MD(Maintenance Domain,維護域)是指連通錯誤檢測所覆蓋的一個網絡或網絡的一部分,它以"MD名稱"來標識。
為了準確定位故障點,在MD中引入了級別(層次)的概念。MD共分為八級,用整數0~7來表示,數字越大級別越高,MD的范圍也就越大。不同MD之間可以相鄰或嵌套,但不能交叉,且嵌套時只能由高級別MD向低級別MD嵌套,即低級別MD必須包含在高級別MD內部。低級別MD的CFD PDU進入高級別MD后會被丟棄;高級別MD的CFD PDU則可以穿越低級別MD;相同級別的MD的CFD PDU不可以互相穿越。
圖4 MD嵌套示意圖
在實際應用中,要對MD進行合理規劃:如圖4所示,有MD_A和MD_B兩個MD,MD_B嵌套在MD_A中,要在MD_A中進行連通性檢測,就要求MD_A的CFD PDU能夠穿越MD_B,因此需要將MD_A的級別配置得比MD_B高。這樣,MD_A的CFD PDU就可以穿越MD_B,從而實現了整個MD_A的連通性故障管理,而MD_B的CFD PDU則不會擴散到MD_A中。
· MA
MA(Maintenance Association,維護集)是MD的一部分,一個MD可劃分為一個或多個MA。MA以"MD名稱+MA名稱"來標識。
一個MA服務于一個VLAN,MA中的MP所發送的報文都帶有該VLAN的標簽,同時MA中的MP可以接收由本MA中其它MP發來的報文。
· MP
MP(Maintenance Point,維護點)配置在接口上,屬于某個MA,可分為MEP(Maintenance association End Point,維護端點)和MIP(Maintenance association Intermediate Point,維護中間點)兩種。
· MEP
MEP確定了MA的邊界,它以"MEP ID"來標識。
MEP所屬的MA確定了該MEP發出的報文所屬的VLAN;MEP的級別等于其所屬MD的級別,MEP發出的報文的級別等于該MEP的級別。MEP的級別決定了其所能處理的報文的級別:當MEP收到高于自己級別的報文時不會進行處理,而是將其按原有路徑轉發;而當MEP收到小于等于自己級別的報文時才會進行處理。需要注意的是,本段是針對同一VLAN內的報文處理方式進行描述,不同VLAN內的報文之間是相互隔離的,不會相互影響。
MEP具有方向性,分為內向MEP和外向MEP兩種:
- 內向MEP通過除其所在的接口以外的所有接口向外發送CFD PDU,即在其所屬MA所服務的VLAN中進行廣播。
- 外向MEP則直接通過其所在的接口向外發送CFD PDU。
· MIP
MIP位于MA的內部,不能主動發出CFD PDU,但可以處理和響應CFD PDU。MIP可以配合MEP完成類似于ping和tracert的功能。當MIP收到不等于自己級別的報文時不會進行處理,而是將其按原有路徑轉發;只有當MIP收到等于自己級別的報文時才會進行處理。
圖5 CFD的分級配置
圖5所示為CFD的一種分級配置方式,圖中共有0、2、3、5四個級別的MD,標識號較大的MD的級別高、控制范圍廣;標識號較小的MD的級別低、控制范圍小。在Device A~Device F的各接口上配置了MP,譬如Device B的接口Ethernet1/1上配置有:級別為5的MIP、級別為3的內向MEP、級別為2的內向MEP和級別為0的外向MEP。
(2) 協議報文
CFD的協議報文被稱為CFD PDU。不同的CFD PDU具有相同的報文頭,通過頭部的類型字段來區分報文類型。
圖6 CFD PDU報文格式示意圖
圖6所示為CFD PDU的報文格式和常見的CFD PDU,CFD PDU中重要字段的含義如表4所示。
表4 CFD PDU重要字段含義
表5和表6對常見CFD PDU的類型、目標MAC地址、用途等給大家做了個直觀的展示。
表5 常見的CFD PDU表6 組播地址中x和y的取值
表6 組播地址中x和y的取值
(3) 連續性檢測功能
MEP之間的連通失敗可能由設備故障或配置錯誤造成,連續性檢測(Continuity Check,CC)功能就是用來檢測MEP之間的連通狀態。該功能的實現方式是:由MEP周期性地發送CCM PDU,相同MA的其它MEP接收該報文,并由此獲知遠端狀態。若MEP在3.5個CCM PDU發送周期內未收到遠端MEP發來的CCM PDU,則認為鏈路有問題,會輸出日志報告。當MD中的多個MEP在發送CCM PDU時,就實現了多點到多點之間的鏈路檢測。
CCM PDU中時間間隔域(Interval域)的值、CCM PDU的發送間隔和遠端MEP的超時時間這三者之間的關系如表7所示。

(4) 環回測試功能
環回測試(Loopback,LB)功能類似于IP層的ping功能,用于驗證源MEP與目標MP之間的連接狀態。該功能的實現方式是:由源MEP發送LBM PDU給目標MP,并根據能否收到對端反饋的LBR PDU來檢驗鏈路狀態。
圖7 環回測試示意圖
如圖7所示,在Device A與Device C之間進行環回測試的過程如下:
- Device A向Device C發送LBM PDU,其中攜帶有該報文的發送時間;
- Device C收到該報文后,回復LBR PDU給Device A,其中攜帶有LBM PDU的發送和接收時間,以及LBR PDU的發送時間。
在超時時間內,如果Device A收到了Device C回應的LBR PDU,則可以根據其中攜帶的時間信息算出Device A到Device C的網絡時延;否則,便認為Device A到Device C不可達。此外,通過連續發送多個LBM PDU并觀察LBR PDU的返回情況,還可以了解網絡的丟包情況。
(5) 鏈路跟蹤功能
鏈路跟蹤(Linktrace,LT)功能類似于IP層的tracert功能,用于確定源MEP到目標MEP的路徑,其實現方式是:由源MEP發送LTM PDU給目標MEP,目標MEP及LTM PDU所經過的MIP收到該報文后,會發送LTR PDU給源MEP,源MEP則根據收到的LTR PDU來確定到目標MEP的路徑。
圖8 鏈路跟蹤示意圖
如圖8所示,在Device A與Device C之間進行鏈路跟蹤的過程如下:
- Device A向Device C發送LTM PDU,其中攜帶有TTL值和目標MEP的MAC地址;
- Device B收到該報文后,先將其TTL值減1,再繼續轉發給Device C,并回復LTR PDU給Device A,其中也攜帶有TTL值(等于Device A發送來的LTM PDU中的TTL值減1);
- Device C收到該報文后,回復LTR PDU給Device A,其中也攜帶有TTL值(等于Device B轉發來的LTM PDU中的TTL值再減1)。由于根據LTM PDU中攜帶的目標MEP的MAC地址,Device C可以判斷出自己就是目標MEP,因此不會再轉發該報文。
如果Device A到Device C之間的路徑有故障,則故障點下游的設備將無法收到LTM PDU,也不會回復LTR PDU,據此可判定故障點的位置。例如,若Device A能收到Device B回復的LTR PDU,但收不到Device C回復的LTR PDU,就可以判定Device B和Device C之間的路徑有故障。
(6) 告警抑制功能
告警抑制功能是ITU-T Y.1731基于CFD定義的擴展功能,用來減少MEP故障告警的數量。如果MEP在3.5個CCM PDU發送周期內未收到遠端MEP發來的CCM PDU,便立刻開始周期性地發送AIS(Alarm Indication Signal,告警指示信號) PDU,該報文的發送方向與CCM PDU相反。其它MEP在收到AIS PDU后,會抑制本端的故障告警,并繼續發送AIS PDU。此后,如果MEP收到了CCM PDU,便停止發送AIS PDU并恢復故障告警。
圖9 告警抑制示意圖
如圖9所示,告警抑制的觸發過程如下:
- 當Device B和Device C之間的鏈路出現故障,Device B和Device C之間的連續性檢測失敗,向用戶發出故障告警信息;
- 檢測到故障后,Device B向Device A發送AIS PDU,而Device C則向Device D發送AIS PDU;
- Device A和Device D收到AIS PDU后,都進入告警抑制狀態。此后,如果Device A和Device D之間的連續性檢測失敗,將不再向用戶發出故障告警信息。
AIS PDU的缺省發送周期為1秒,由于告警抑制功能可以配置很多發送VLAN,而報文發送數量過多將對設備CPU造成負擔,因此在這種情況下可將AIS PDU的發送周期調整為1分鐘,從而減少報文發送數量。
(7) 單向丟包測試功能
單向丟包測試(Loss Measurement,LM)功能用來檢測MEP之間的單向丟包情況,其實現方式是:由源MEP發送LMM(Loss Measurement Message,丟包測試報文) PDU給目標MEP,目標MEP收到該報文后,會發送LMR(Loss Measurement Reply,丟包測試應答) PDU給源MEP,源MEP則根據兩個連續的LMR PDU來計算源MEP和目標MEP間的丟包數,即源MEP從收到第二個LMR PDU開始,根據本LMR PDU和前一個LMR PDU的統計計數來計算源MEP和目標MEP間的丟包數。
源MEP發送LMM PDU時會填充當前接口的發包統計計數TxFCf,目標MEP收到該報文后,會獲取當前接口的收發包統計計數,并向源MEP回應。LMR PDU中攜帶以下統計值:
- TxFCf:從收到的最后一個LMM PDU中的TxFCf字段復制而來。
- RxFCf:收到最后一個LMM PDU時,當前接口的收包統計計數。
- TxFCb:發送LMR PDU時,當前接口的發包統計計數。
源MEP收到LMR PDU后(至少需要兩次報文交互過程),進行丟包統計的計算公式如下:
- 遠端丟包數=|TxFCb[tc] – TxFCb[tp]| – |RxFCb[tc] – RxFCb[tp]|
- 本端丟包數=|TxFCf[tc] – TxFCf[tp]| – |RxFCl[tc] – RxFCl[tp]|
其中,tc表示前一次收發的測試報文,tp表示當前一次收發的報文。
圖10 單向丟包測試示意圖
如圖10所示,Device A與Device B之間的單向丟包測試過程如下:
- Device A以100毫秒為間隔向Device B發送指定數量(缺省為5個)的LMM PDU,報文中填充有發送接口的發包統計計數TxFCf。
- Device B收到LMM PDU時,先獲取當前接口的收包統計計數RxFCf,并在向Device A回應LMR PDU時獲取當前接口的發包統計計數TxFCb。LMR PDU中會同時填充有TxFCf、RxFCf和TxFCb。后向Device A回應DMR PDU,其中填充有TxTimef、RxTimef和TxTimeb
- Device A收到LMR PDU時,先獲取當前接口的收包統計計數RxFCl。從收到第二個LMR PDU開始,Device A就按前面的公式分別計算遠端和本端的丟包數,并記錄本次交互的計算結果。在本次測試完成后再進行平均的測試統計結果。
單向丟包測試結果的準確度依賴于發送LMM PDU和LMR PDU,以及接收LMM PDU時,獲取硬件統計計數的及時性和和準確性。一般需要硬件支持直接向報文中填充報文的收發統計計數。
(8) 幀時延測試功能
幀時延測試(Delay Measurement,DM)功能用來檢測MEP之間報文傳輸的時延情況,分為單向時延測試和雙向時延測試兩種:
a. 單向時延測試
單向時延測試功能的實現方式是:源MEP發送1DM(One-way Delay Measurement,單向時延測試) PDU給目標MEP,該報文中攜帶有其發送時間。目標MEP收到該報文后記錄其接收時間,并結合其發送時間來計算并記錄鏈路傳輸的時延和抖動(即時延變化值)。
1DM PDU中的TxTimeStampf字段填充源MEP的發送時間TxTimef,RxTimeStampf字段填充目標MEP的接收時間RxTimef。源MEP會以100毫秒為間隔發送指定數量(缺省為5個)的1DM PDU。目標MEP收到該報文后,計算RxTimef與TxTimef的差值即為此次測試的時延。時延抖動則是本次測出的時延與已測出的最小時延的差值。單向時延測試要求測試設備之間已完成時鐘同步,否則測試出的時延有較大誤差,而只能進行時延抖動測試。
b. 雙向時延測試
雙向時延是用于測量報文從本端發送到接收的一次往返過程中,報文在鏈路上的消耗時間。測試是從源MEP向目的MEP發送測試請求報文,然后在接收到目的MEP的應答報文后,根據應答報文的接收時間和測試請求的發送時間的差值計算雙向報文時延。
DMM PDU中的TxTimeStampf字段填充源MEP的發送時間TxTimef,目標MEP收到此報文后直接將其中的TxTimef填充到DMR PDU中,并在DMR PDU中填充上DMM PDU的接收時間RxTimef和DMR PDU的發送時間TxTimeb。
源MEP在收到DMR PDU后,需要獲取到DMR PDU的接收時間RxTimeb。如果報文中填充了DMM PDU的接收時間和DMR PDU的發送時間,則可根據以下公式計算出報文往返消耗在鏈路上的雙向時延:雙向鏈路時延= (RxTimeb – TxTimef) – (TxTimeb – RxTimef);否則,只能計算出雙向報文時延= RxTimeb – TxTimef。
如圖11所示,Device A與Device B之間的雙向時延測試過程如下:
- Device A以100毫秒為間隔向Device B發送指定數量(缺省為5個)的DMM PDU,報文中填充有發送時間TxTimef。
- Device B收到DMM PDU后向Device A回應DMR PDU,其中填充有TxTimef、RxTimef和TxTimeb。
- Device A收到DMR PDU后,計算出本此交互的雙向鏈路時延。從收到第二個DMR PDU開始,還要計算出雙向時延抖動和平均雙向時延。
(9) 比特錯誤測試功能
比特錯誤測試功能用來測試MEP之間的報文比特錯誤。由源MEP發送指定數量的TST(Test,比特錯誤測試) PDU給目標MEP(每個TST PDU都攜帶不同的遞增序號),該報文中攜帶有偽隨機序列或全0值。目標MEP收到該報文后,根據其中指定的測試模式和測試比特內容進行計算和比較,從而確定報文是否有比特錯誤。測試的比特長度為32位,有以下幾種測試模式:
- 全0比特不帶校驗和
- 全0比特帶校驗和
- 偽隨機比特帶校驗和
- 偽隨機比特不帶校驗和