?

基于多核處理器BFD協議的設計與實現

2016-10-14 06:44鄧嘉吉萌雷升平
電子設計工程 2016年12期
關鍵詞:表項會話哈希

鄧嘉,吉萌,雷升平

(1.武漢郵電科學研究院湖北武漢430074;2.武漢烽火網絡有限責任公司湖北武漢430074)

基于多核處理器BFD協議的設計與實現

鄧嘉1,2,吉萌2,雷升平2

(1.武漢郵電科學研究院湖北武漢430074;2.武漢烽火網絡有限責任公司湖北武漢430074)

BFD是一種雙向轉發快速檢測機制,為解決協議軟件BFD在鏈路檢測中響應慢的問題,本文提出并實現了一種在多核處理器平臺下基于底層驅動實現的BFD機制。該機制下所有的收發包處理都由底層驅動實現,上層只負責向底層下發配置命令和接受底層的通告信息;會話表中通過哈希算法查找相應的會話并對相關字段進行匹配。實驗證明,該機制的鏈路檢測響應時間可達20毫秒左右,滿足高性能網絡設備可靠性的要求。

BFD;多核處理器;鏈路狀態;哈希表

隨著IP數據業務的發展,網絡鏈路的可靠性越來越受到人們的重視,其中設備之間的鏈路狀態檢測成為了關注的焦點。相鄰系統之間通信故障快速檢測功能最早應用于傳輸網的SDH(Synchronous Digital Hierarchy,同步數字體系)設備中,而作為聯通網的路由器、交換機設備并沒有類似的檢測機制。BFD[1](Bidirectional Forwarding Detection,雙向轉發檢測)協議的出現,填補了網絡設備之間故障檢測協議的空白,各大設備廠商也紛紛致力于BFD的研究和實現?;谲浖拥腂FD,當對端發來BFD報文后,由底層送到軟件層,然后進協議棧解析和匹配,一旦檢測到鏈路故障,需要通告底層切換備用路由,整個過程反應比較遲鈍,無法滿足高端路由器鏈路快速倒換的要求。因此,實現一種能夠對鏈路故障快速檢測并響應的BFD機制顯得尤為重要。本文提出的基于驅動實現的BFD,能夠在30毫秒內檢測出鏈路故障并做出響應,為快速路由倒換并恢復鏈路爭取了時間,提升了整個網絡鏈路的可靠性。

1 BFD表項設計

BFD的表項設計是通過哈希表來實現的,將源IP和目的IP作為參數輸入SDK中所提供的一個函數,生成一個數字X,因為本哈希表的大小為1K,所以哈希值的大小必須在0到1023之間,所以再將X除以1024取余,得出一個大小在0到1023之間的哈希值。如果兩對不同的源目的IP但是算出來的哈希值相同的話則會產生哈希沖突,解決哈希沖突這一問題,在這里采用鏈地址的方式,就是通過next指針將沖突的表項鏈接在已存在表項的后面,從BFD的列表[2]中抽象出3個部分:標志位部分(flag),條件匹配部分(match),協商部分(consult)

Flag={flag1,flag2,..,flagn},flagn屬于集合Flag,flagn則是表項中第n個標志位;Match={match1,match2,...,matchn},matchn屬于集合Match,matchn則是表項中第n個匹配字段位;Consult={consult1,consult2,..,consultn}consultn屬于集合Consult,consultn則是第n個協商字段。如圖1所示。

2 BFD發包模塊設計

圖2是整個發包模塊的流程圖,發包模塊的定時器是采用輪訓的方式,core8每隔10 ms,掃描整張hash表,也就是說掃描的范圍是從0一直到1023,在表項中有一項為sessionid,如果session-id的值為0則表示該表項沒有會話,則跳過,如果不為空,首先查看是否存在沖突域,如果存在的話,說明在一個hash表項中存在多個會話session[3-4],需要對其遍歷,并對沖突域中的每一個會話都要對其進行處理,對每一個會話的操作與表項不存在沖突域是對會話的操作相同。當對某一個會話進行處理時,首先要判斷其會話模式是主動模式,被動模式,或者是回聲模式。主動模式和被動模式的主要區別是當會話狀態是down的時候,主動模式會不斷的送down包,而被動模式則什么也不做。當會話處于init和up狀態的時候,主動模式和被動模式的實現過程相同。Core8每掃一次hash表的時候,時間計數器的數值會被累加。所以當時間計數器的值余1 000 ms為0的時候,如果會話的狀態為down或者init時,則發送相應狀態的數據包出去。同當會話狀態為init時,除了發送init出去以外,還會依據flag位和detect_multi來判定是否超時。如果超時則將當前會話設置為down,同時上報主控。

如果會話的狀態是為up的話,發送up包并將flag位加1的條件是時間計數器的值余協商發包間隔為0的時候,當時間計數器的值余協商收包間隔為0的時候,則判斷flag的值是否大于預先設定的detect_multi[5-6]發包重復次數。依據flag位和detect_multi來判定是否超時。如果超時則將當前會話設置為down,同時上報主控

由于是在多核下實現發包,考慮到線程安全問題,當進入發包模塊的時候,會給相應表項資源上鎖。從而避免對同一表項,在發送數據包的同時修改數據包。

圖1 BFD表項結構圖

圖2 發包模塊設計流程圖

圖3 收包模塊設計流程圖

3 BFD收包模塊設計

收包是非常關鍵的一部分,系統流程如圖3所示,首先,當接受了一個數據包過來,要收包模塊要從主干道將它提取出來,這個數據包要符合兩個條件,第一個是其協議號要是17,說明采用udp,第二個是其端口號為3704。提取出數據包以后,首先要判斷這個數據包是不是合法的,有兩個條件:第一是將數據包的源IP和目的IP提取出來,通過多核處理器上的SDK依據源目的IP算出hash值,到hash表中去查找對應的session,如果查找到對應的表項為空時,則表明這個數據包不是合法的,則丟棄。第二,如果找到了對應的表項,則再去比對其中的字段,首先看有沒有認證,如果有則進行認證。否則查看表項里面唯一的標識符,如果標識符不完全,則將會話雙發的標識符補全,如果會話雙方的標識符齊全,則判斷數據包和表項對應的標示符是否一致。如果不一致則說明數據包是不合法的,可能是別人偽造的或者被改過了的,則丟掉。當所有這些條件判斷過后,證明這個數據包已經合法之后,再依據數據包中的狀態來修改表項中會話的狀態,如果數據包的狀態為UP,還需要進一步判斷是否需要重新協商發包間隔和收包間隔。

收包的話就可以用core1到core7都可以,收發包是并行工作的,當收包后,數據包在修改表項數據的時候該表項則會上鎖,這時如果發包的核在這是后來讀取的話,則會等待,等鎖釋放以后再讀取表項,將包發出去,所以一定要設一個LOCK,不然一個再改一個在發,則會出現錯誤,因為修改表項相對于掃描表項的時間是非常短的,所以當遇到鎖的時候核core8等待。

4 實驗與結果分析

本實驗是在高端路由器上進行,實驗儀表為Spirent FestCenter,用儀表模擬一臺路由器設備,建立BFD會話。高端路由器中的核卡則采用多核處理器,單核主頻為1.2 GHz。

圖4 實驗拓撲圖

按圖4連接設備,配置IP地址并保證設備之間能ping通,路由器設備的ip配置為5.5.5.1/24,儀表的IP設置為5.5.5.5/24.在設備上開啟BFD功能。在連接鏈路接口上使能BFD,設置為主動模式,且兩端都為主動方。BFD的主要操作模式稱為主動模式(異步模式)。在這種模式下,系統之間相互周期性地發送BFD控制報文,如果某個系統連續幾個報文都沒有接收到,就認為此BFD會話的狀態是Down。當兩端都為主動角色時,兩端的系統都要向對端發送Your Discriminator為0的BFD控制報文,直到兩端學到對端的Discriminator,然后開始建立會話查看BFD會話。通過主控將其配置到將最小發送間隔和接受間隔都設置為最小的10 ms,檢測次數設為2次,因為發送數據包的core8的循環間隔為10 ms,因此該值為發包的極限值。

5 主控配置建立會話

當bfd配置好之后,通過儀表連接設備,建立會話session如圖5所示,會話的狀態有down轉變為up狀態,說明會話建立成功。

圖5 會話狀態圖

6 最后結果分析

通過對途中數據的分析得出10組以5.5.5.1位源IP的數據的發送時間進行了統計。依據圖6統計結果所得數據(數據已秒為單位),分析得出單次發包所用平均時間10.485 845 ms。發包間隔大于10 ms的部分是多核在構造數據包上所用時間。由于檢測次數至少為兩次,所以該機制的鏈路檢測響應時間可達30 ms以內,滿足高端路由器可靠性的要求。

圖6 BFD響應時間測試結果

7 結束語

基于驅動層的BFD,對整個BFD報文的收發處理都在線卡上完成,當會話狀態發生改變時,只需要向主控通告相應的會話狀態信息。這種方式的BFD對鏈路狀態的感知比較快,當檢測到鏈路故障后,可以在第一時間通告切換備用路由。這種機制避免了鏈路出現故障時主控與線卡之間多次通告的耗時過程,為快速路由倒換節約了時間。運用這種BFD機制與FRR聯動,鏈路故障恢復時間可實現50 ms以內,滿足骨干網中高端路由器可靠性的要求。但是,隨著各種數據業務的發展,整個網絡的組網結構也愈發復雜,人們對鏈路的檢測的要求已不僅僅滿足于能夠發現故障并快速恢復鏈路,而且還要求能夠檢測具體哪條鏈路出現故障,造成故障的原因是什么。因此,如何利用現有的BFD協議精確檢測鏈路狀態,是今后需要進一步研究的方向之一。

[1]王晨.BFD技術在H-VPLS網絡上的實現[D].南京大學,2012.

[2]蔡素梅,劉蓮花,陳強.BFD的研究及在3G網絡中的應用設計[J].廣東通信技術,2011(3):25-29.

[3]韓韜略.分布式BFD系統中驅動模塊的設計與實現[D].南京大學,2013.

[4]陳瑞森.基于BFD的IP快速重路由的研究與實現[D].杭州電子科技大學,2012.

[5]何燕.基于BFD的MPLS隧道故障檢測及恢復技術的研究與實現[D].杭州電子科技大學,2010.

[6]陶潤澤.基于BFD協議的40G的以太網鏈路檢測模塊的設計與實現[D].華中科技大學,2013.

Design and implementation of BFD protocol based on multi-core processor

DENG Jia1,2,JI Meng2,LEI Sheng-ping2
(1.Wuhan Research Institue of Posts and Telecommunications,Wuhan 430074,China;2.Wuhan FiberHome Networks,Wuhan 430074,China)

BFD is a bidrectional forwarding fast detection.To solve the problem of slow-forward detection,this paper presents and implements BFD protocol on a multi-core processor platform.sending and processing packets in this mechanism are implements by bottom-driver.bottom-driver receive and send commands through notification to up level.A session is find and matched by hash value.The experiment prove that the time of fast-forward detection is about 20 ms,and it can satisfy the request of rooter.

BFD;multi-core processor;state of link;hash table

TN 915

A

1674-6236(2016)12-0090-03

2015-06-04稿件編號:201506055

鄧嘉(1989—),男,湖南長沙人,碩士研究生。研究方向:通信技術。

猜你喜歡
表項會話哈希
一種改進的TCAM路由表項管理算法及實現
哈希值處理 功能全面更易用
QQ和微信會話話輪及話輪轉換特點淺析
文件哈希值處理一條龍
基于ARMA模型預測的交換機流表更新算法
SDN數據中心網絡基于流表項轉換的流表調度優化
基于集群節點間即時拷貝的會話同步技術研究①
基于OpenCV與均值哈希算法的人臉相似識別系統
巧用哈希數值傳遞文件
交換機的FDB地址
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合