王一九
摘? 要:隨著網(wǎng)絡(luò)速度的不斷提高,對(duì)網(wǎng)絡(luò)的可靠性和健壯性的要求也越來(lái)越高。當(dāng)鏈路發(fā)生故障時(shí),希望能盡快檢測(cè)到故障并將業(yè)務(wù)快速切換到備份鏈路。文章首先闡述了BFD的應(yīng)用場(chǎng)景,存在的問題及傳統(tǒng)的BFD報(bào)文處理過(guò)程。然后,針對(duì)傳統(tǒng)BFD報(bào)文處理過(guò)程中存在的缺陷,提出一種實(shí)現(xiàn)BFD報(bào)文處理的方法。在該方法中,核心思想是對(duì)BFD報(bào)文進(jìn)行封裝預(yù)處理,并引入雙內(nèi)核協(xié)同處理。
關(guān)鍵詞:BFD;報(bào)文封裝;雙內(nèi)核
中圖分類號(hào):TP393.0? ? ? ? 文獻(xiàn)標(biāo)志碼:A? ? ? ? ?文章編號(hào):2095-2945(2019)07-0125-02
Abstract: With the continuous improvement of network speed, the requirements for the reliability and robustness of the network are getting higher and higher. When the link fails, it is hoped that the failure can be detected as soon as possible and the service can be quickly switched to the backup link. Firstly, this paper describes the application scenario of BFD, the existing problems and the traditional BFD message processing process. Then, in view of the defects existing in the traditional BFD message processing process, a method to realize BFD message processing is proposed. In this method, the core idea is to encapsulate and preprocess BFD packets and introduce dual-kernel cooperative processing.
Keywords: BFD; message encapsulation; dual kernel
1 BFD的應(yīng)用場(chǎng)景及存在的問題
1.1 BFD的應(yīng)用場(chǎng)景
在當(dāng)前網(wǎng)絡(luò)中,如果系統(tǒng)通訊過(guò)程中發(fā)生故障,需要快速的建立替代通道,并將業(yè)務(wù)倒換到其他鏈路上。有些鏈路通過(guò)硬件檢測(cè)信號(hào),但并不是所有的介質(zhì)都能夠提供硬件檢測(cè),此時(shí),就需要依靠上層路由協(xié)議自身的Hello報(bào)文機(jī)制來(lái)進(jìn)行故障檢測(cè)[1]。但是,這種檢測(cè)方式的弊端是檢測(cè)時(shí)間太差。例如OSPF需要2秒的檢測(cè)時(shí)間,ISI需要1秒的檢測(cè)時(shí)間。這對(duì)于用戶及某些應(yīng)用來(lái)說(shuō),都是無(wú)法忍受的。隨著網(wǎng)絡(luò)速度的不斷發(fā)展,線路中斷時(shí)間越長(zhǎng),意味著丟包越多,對(duì)業(yè)務(wù)的影響越大。在電信級(jí)以太網(wǎng)中,很多業(yè)務(wù)場(chǎng)景要求,故障發(fā)生時(shí)業(yè)務(wù)的切換時(shí)間在50毫秒以內(nèi)。這時(shí),必須通過(guò)BFD雙向轉(zhuǎn)發(fā)檢測(cè)技術(shù)進(jìn)行檢測(cè)。BFD是一種協(xié)議無(wú)關(guān)的IP網(wǎng)絡(luò)故障快速檢測(cè)機(jī)制,能夠提供毫秒級(jí)的故障檢測(cè)時(shí)間,加快網(wǎng)絡(luò)路由收斂速度,縮短通信中斷時(shí)間,提高IP承載網(wǎng)絡(luò)的可靠性和健壯性[2]。BFD通過(guò)建立會(huì)話的通道周期性地發(fā)送檢測(cè)報(bào)文。如果某個(gè)系統(tǒng)在一定時(shí)間內(nèi)沒有收到對(duì)端的檢測(cè)報(bào)文,那么通信鏈路可能發(fā)送故障。BFD會(huì)話的發(fā)送和接收速率可以協(xié)商。
1.2 BFD實(shí)現(xiàn)中存在的問題
在實(shí)際應(yīng)用中,由于對(duì)網(wǎng)絡(luò)快速檢測(cè)的要求越來(lái)越高,應(yīng)用場(chǎng)景也越來(lái)越多。隨著網(wǎng)絡(luò)數(shù)據(jù)量的急劇增加,需要的BFD檢測(cè)數(shù)量也隨著增加。這時(shí),由于芯片處理的能力及策略的不同,導(dǎo)致BFD的整體性能不同。當(dāng)芯片處理能力達(dá)到極限時(shí),BFD就會(huì)出現(xiàn)丟包。如果長(zhǎng)時(shí)間無(wú)法收到某一BFD報(bào)文,那么BFD就會(huì)震蕩。因此,在芯片處理能力有限的情況下,只能在處理的策略上進(jìn)行調(diào)整。
1.3 傳統(tǒng)的BFD報(bào)文處理過(guò)程
下面基于圖1,傳統(tǒng)的BFD報(bào)文處理過(guò)程解析圖示。對(duì)傳統(tǒng)的BFD報(bào)文處理過(guò)程進(jìn)行詳細(xì)說(shuō)明。
首先,對(duì)BFD報(bào)文進(jìn)行封裝處理;其次,上送CPU內(nèi)核處理,將BFD報(bào)文不加區(qū)分的上送一個(gè)隊(duì)列進(jìn)行處理;BFD模塊整合MUX下發(fā)的參數(shù)并調(diào)用驅(qū)動(dòng)寫芯片;最后,完成BFD報(bào)文的快速發(fā)送和接收檢測(cè)、報(bào)文或告警上送CPU。該過(guò)程中,雖然將BFD報(bào)文都上送一個(gè)較高優(yōu)先級(jí)的隊(duì)列,看似對(duì)報(bào)文進(jìn)行了優(yōu)先處理。但是,隨著BFD的session數(shù)量增加時(shí),同時(shí)在一個(gè)隊(duì)列處理的報(bào)文也會(huì)迅速增加。這樣就會(huì)導(dǎo)致傳統(tǒng)的BFD報(bào)文處理過(guò)程中,某些session的BFD處理過(guò)程中丟失或處理不及時(shí)等,造成BFD會(huì)話震蕩。
2 一種實(shí)現(xiàn)BFD報(bào)文處理的方法
基于這種背景,提出一種實(shí)現(xiàn)BFD報(bào)文處理的方法。該方法的主要目的是在于提供一種實(shí)現(xiàn)BFD報(bào)文處理的方法。首先,進(jìn)行BFD報(bào)文封裝的預(yù)處理;其次,引入雙內(nèi)核協(xié)同處理。
2.1 BFD報(bào)文處理的技術(shù)方案
為達(dá)到上述目的,下面介紹一下該方法的技術(shù)方案?;趫D2:改進(jìn)的BFD報(bào)文處理過(guò)程解析圖示。一方面,當(dāng)配置BFD的類型和協(xié)商參數(shù)后,對(duì)BFD報(bào)文進(jìn)行預(yù)處理,根據(jù)BFD的類型和協(xié)商參數(shù)對(duì)BFD報(bào)文進(jìn)行優(yōu)先級(jí)的區(qū)分。另一方面,根據(jù)BFD報(bào)文操作方式的不同,上送不同的CPU芯片處理。步驟1 進(jìn)行BFD報(bào)文封裝的預(yù)處理,根據(jù)BFD的類型及協(xié)商參數(shù)將BFD報(bào)文在封裝時(shí)添加報(bào)文優(yōu)先級(jí),根據(jù)BFD報(bào)文被添加的優(yōu)先級(jí)高低決定BFD報(bào)文處理的先后順序。
步驟2 進(jìn)行雙內(nèi)核的協(xié)同處理,首先通過(guò)BFD的session判斷該會(huì)話是否為新增會(huì)話。如果是新增會(huì)話,通過(guò)CPU內(nèi)核1處理后,進(jìn)行下一步處理,同時(shí)將該BFD的會(huì)話信息拷貝一份到CPU內(nèi)核2備用;如果不是新增會(huì)話,則直接轉(zhuǎn)到CPU內(nèi)核2進(jìn)行查找相關(guān)session信息,并進(jìn)行下一步處理。步驟3 BFD模塊整合MUX下發(fā)的參數(shù)并調(diào)用驅(qū)動(dòng)寫芯片。步驟4 完成BFD報(bào)文的快速發(fā)送和接收檢測(cè)報(bào)文或告警上報(bào)CPU。與現(xiàn)有技術(shù)相比較,該方法將BFD報(bào)文進(jìn)行優(yōu)先級(jí)的處理,并對(duì)新增及原有會(huì)話進(jìn)行區(qū)分處理,大大降低了BFD報(bào)文處理過(guò)程中丟包的風(fēng)險(xiǎn),同時(shí)降低了CPU的負(fù)荷,保證了BFD會(huì)話的穩(wěn)定性。
2.2 改進(jìn)的BFD處理過(guò)程的實(shí)例解析
下面結(jié)合圖2:改進(jìn)的BFD報(bào)文處理過(guò)程解析圖示,圖3:CPU內(nèi)核2處理細(xì)化圖示,對(duì)該方法進(jìn)行說(shuō)明。假設(shè)新增10條BFD會(huì)話session 1-10,該BFD為L(zhǎng)INK BFD,要求BFD配置的參數(shù)如下:interval(發(fā)送檢測(cè)報(bào)文的時(shí)間間隔)為10ms,min-rx-interval(接收檢測(cè)報(bào)文的最小時(shí)間間隔)為10ms,multiplier(檢測(cè)倍數(shù))為3。新增1條BFD會(huì)話session 11,該BFD為VRRP BFD,要求BFD配置的參數(shù)如下:interval為50ms,min-rx-interval為50ms,multiplier為3。修改1條BFD會(huì)話session 12,該會(huì)話為L(zhǎng)INK BFD,要求修改BFD配置的參數(shù)如下:interval為20ms,min-rx-interval為20ms,multiplier為3。
步驟1 根據(jù)預(yù)先約定的BFD類型及協(xié)商參數(shù)對(duì)應(yīng)表,將session 1-10的BFD報(bào)文優(yōu)先級(jí)設(shè)置為Priority1,將session 11的BFD報(bào)文優(yōu)先級(jí)設(shè)置為Priority2。步驟2.1參照?qǐng)D2,改進(jìn)的BFD報(bào)文處理過(guò)程解析圖示,判斷BFD session1-11為新增。步驟2.1.1 上送CPU內(nèi)核1處理,同時(shí)拷貝一份相同的session信息到CPU內(nèi)核2備用。當(dāng)CPU內(nèi)核1將報(bào)文轉(zhuǎn)發(fā)后,即清除相應(yīng)的session信息。后續(xù)需要更新或刪除相應(yīng)的BFD session時(shí),按照BFD session在CPU內(nèi)核2內(nèi)進(jìn)行查找并進(jìn)行相應(yīng)的參數(shù)更新及刪除操作。步驟2.1.2 參照?qǐng)D3,CPU內(nèi)核2處理細(xì)化圖示。當(dāng)BFD報(bào)文上送CPU內(nèi)核2后,解析BFD報(bào)文中包含的標(biāo)志位,此時(shí)上述BFD報(bào)文不存在標(biāo)志位,即表示該報(bào)文為新增報(bào)文,進(jìn)行BFD session信息的拷貝。步驟2.2 參照?qǐng)D2,改進(jìn)的BFD報(bào)文處理過(guò)程解析圖示,判斷BFD session 12為更新。步驟2.2.1 參照?qǐng)D示3,CPU內(nèi)核2處理細(xì)化圖示。當(dāng)BFD報(bào)文上送CPU內(nèi)核2后,解析BFD報(bào)文中包含的標(biāo)志位,此時(shí)上述BFD報(bào)文存在標(biāo)志位,即表示該報(bào)文為待更新或刪除報(bào)文。步驟2.2.2 按照BFD的session號(hào)進(jìn)行查找,查找到相應(yīng)的表項(xiàng),進(jìn)行更新。步驟3 BFD模塊整合MUX下發(fā)的參數(shù)并調(diào)用驅(qū)動(dòng)寫芯片。步驟4 完成BFD報(bào)文的快速發(fā)送和接收檢測(cè)、報(bào)文或告警上送CPU。本方法的重點(diǎn)在于步驟1和步驟2。步驟1根據(jù)BFD報(bào)文的類型及參數(shù)劃分優(yōu)先級(jí),這樣對(duì)報(bào)文可以區(qū)分對(duì)待。例如本例中VRRP BFD由于要求協(xié)商參數(shù)較低,因此,將該報(bào)文的優(yōu)先級(jí)設(shè)置偏低。這樣使CPU在能力有限的情況下,優(yōu)先處理協(xié)商參數(shù)要求高的LINK BFD,確保LINK BFD不會(huì)由于處理不及時(shí)導(dǎo)致震蕩。同時(shí)也可以滿足VRRP BFD的要求。步驟2中將CPU內(nèi)核1與CPU內(nèi)核2進(jìn)行任務(wù)分工。當(dāng)新增BFD session時(shí),首先通過(guò)CPU內(nèi)核1進(jìn)行處理,并拷貝相應(yīng)的信息到CPU內(nèi)核2,這樣后續(xù)的更新、刪除操作由CPU內(nèi)核2進(jìn)行處理。CPU內(nèi)核1刪除已拷貝給CPU內(nèi)核2的內(nèi)容,以免造成CPU內(nèi)核1的內(nèi)容冗余及不必要的處理。同時(shí),在CPU內(nèi)核2在進(jìn)行更新、刪除操作時(shí),不再需要同步相應(yīng)的session信息給CPU內(nèi)核1處理。這樣通過(guò)CPU內(nèi)核1和CPU內(nèi)核2的相互協(xié)同,在BFD報(bào)文的處理上大大降低了BFD報(bào)文處理過(guò)程中丟包的風(fēng)險(xiǎn),同時(shí),降低了CPU的負(fù)荷,保證了BFD會(huì)話的穩(wěn)定性。
3 結(jié)束語(yǔ)
總而言之,BFD是實(shí)現(xiàn)雙向快速檢測(cè)的有效方法。隨著BFD檢測(cè)數(shù)量的增加,芯片處理能力達(dá)到極限時(shí),可能導(dǎo)致BFD震蕩。為解決該問題,根據(jù)BFD報(bào)文的優(yōu)先級(jí),通過(guò)雙內(nèi)核協(xié)同處理機(jī)制,提高網(wǎng)絡(luò)的可靠性和健壯性。
參考文獻(xiàn):
[1]張韜,王俊.用BFD技術(shù)檢測(cè)網(wǎng)絡(luò)故障[J].網(wǎng)絡(luò)安全和信息化,2017(10):141-145.
[2]王坦,仝磊,郭學(xué)義,等.基于BFD檢測(cè)的靜態(tài)路由切換研究[J].自動(dòng)化技術(shù)與應(yīng)用,2015(8):42-46.