章 帆,韓毅剛,段鵬飛,韓宏宇,宿國防
(南開大學(xué) 電子信息與光學(xué)工程學(xué)院 天津市光電傳感器與傳感網(wǎng)絡(luò)技術(shù)重點實驗室,天津 300350)
隨著互聯(lián)網(wǎng)的高速發(fā)展,諸如對等網(wǎng)絡(luò)、流媒體和VoIP等新出現(xiàn)的業(yè)務(wù)在豐富了網(wǎng)絡(luò)資源的同時也加重了網(wǎng)絡(luò)擁塞,嚴(yán)重影響了其他關(guān)鍵業(yè)務(wù)的開展[1]。因此,有效的帶寬規(guī)劃和管理迫在眉睫,可目前常見的帶寬管理系統(tǒng)因其采用的協(xié)議識別技術(shù)和流量整形算法而存在著或多或少的缺陷。
協(xié)議識別技術(shù)是帶寬管理的前提,它能夠準(zhǔn)確識別網(wǎng)絡(luò)上出現(xiàn)的流量并精確確認(rèn)其所屬應(yīng)用,以便標(biāo)識流量并采取相應(yīng)的處置策略[2]。目前常用的協(xié)議識別方法主要有基于端口的識別技術(shù)、深度流檢測技術(shù)(Deep Flow Inspection,DFI)和深度包檢測技術(shù)(Deep Packet Inspection, DPI)三類。其中基于端口的識別技術(shù)雖然相對簡單,但由于現(xiàn)在的應(yīng)用程序大多采用未注冊的端口或不使用固定的端口進(jìn)行通信,因而能正確識別出的協(xié)議數(shù)量不斷減少,被逐步淘汰。
DFI技術(shù)通過識別數(shù)據(jù)流的行為特征,如數(shù)據(jù)包的發(fā)送頻率、上下行的流量比例和報文長度等信息來對數(shù)據(jù)流進(jìn)行分類,因只用分析流量的行為特征故而復(fù)雜度較低但識別率不足[3],對于一些同類型的應(yīng)用無法進(jìn)行細(xì)分。DPI技術(shù)通過搜索數(shù)據(jù)包載荷部分的特征字段來識別流量,精度相對較高。
此外,在帶寬管理系統(tǒng)中,流量整形算法的優(yōu)劣直接影響了系統(tǒng)整體的穩(wěn)定性與可靠性。在傳統(tǒng)的基于HTB(Hierarchical Token Bucket)算法的帶寬管理系統(tǒng)中,當(dāng)各個類之間存在帶寬競爭時,某些類的保證速率有可能會失效,導(dǎo)致流量整形策略整體失效。
本文設(shè)計并實現(xiàn)了一種基于DPI技術(shù)的帶寬管理系統(tǒng),并從該系統(tǒng)的數(shù)據(jù)流捕獲,協(xié)議識別和流量整形三個方面入手,解決了一般帶寬管理系統(tǒng)存在的例如協(xié)議識別率不足,流量整形性能較低和流量整形策略失效的問題。
基于DPI技術(shù)的帶寬管理系統(tǒng)主要由Web管理界面、網(wǎng)絡(luò)應(yīng)用協(xié)議識別系統(tǒng)和流量整形模塊三個主要模塊構(gòu)成,如圖1所示。
Web管理界面是用戶和帶寬管理系統(tǒng)交互的工具,其主要作用是實現(xiàn)流量整形的可視化,使用戶不必通過傳統(tǒng)的命令行來管理流量整形策略,極大地降低了帶寬管理系統(tǒng)的操作難度。
由于整個網(wǎng)絡(luò)應(yīng)用協(xié)議識別系統(tǒng)需要在線進(jìn)行網(wǎng)絡(luò)流量的實時識別,因此系統(tǒng)必須同時具有數(shù)據(jù)流捕獲和協(xié)議識別兩大功能。
其中數(shù)據(jù)流捕獲模塊捕獲網(wǎng)絡(luò)數(shù)據(jù)包,對其進(jìn)行解析,并將得到的參數(shù)數(shù)據(jù)傳遞到協(xié)議識別模塊。協(xié)議識別模塊則利用特征字符匹配、IP地址匹配、端口匹配等方式對所得參數(shù)數(shù)據(jù)進(jìn)行識別并輸出結(jié)果。
為了兼顧提高帶寬利用率和解決流量整形策略失效的問題,系統(tǒng)采用了HTB_resv流量整形算法和動態(tài)帶寬調(diào)整算法來進(jìn)行帶寬管控。
HTB_resv算法是在HTB算法基礎(chǔ)上添加了保留帶寬的一種改良算法。其目的是在保證令牌的租借的同時實現(xiàn)部分令牌的私有化,避免某個類的帶寬被其他類占用。
動態(tài)帶寬調(diào)整算法的目的是實時監(jiān)控各個類的帶寬使用情況,避免帶寬競爭的發(fā)生。如果發(fā)現(xiàn)類A有搶占其他類帶寬的可能,則動態(tài)調(diào)低類A的最大帶寬,并經(jīng)過嚴(yán)格的驗證算法,驗證類A是否在搶占其他類的帶寬。最后根據(jù)結(jié)果決定是繼續(xù)降低類A的最大帶寬還是將類A的最大帶寬調(diào)整至一個合理的水平。
本文主要對基于DPI技術(shù)的帶寬管理系統(tǒng)的數(shù)據(jù)流捕獲模塊、協(xié)議識別模塊和流量整形模塊的具體實現(xiàn)進(jìn)行概述。
數(shù)據(jù)流捕獲模塊的主要功能是完成數(shù)據(jù)包的捕獲、重組以及對相關(guān)數(shù)據(jù)的保存。系統(tǒng)選用Libpcap函數(shù)庫來實現(xiàn),其基本工作流程如圖2所示。
初始化網(wǎng)絡(luò)接口包括網(wǎng)絡(luò)設(shè)備查找和打開網(wǎng)絡(luò)設(shè)備兩個步驟。它首先調(diào)用函數(shù)pcap_lookupdev()找到可用的網(wǎng)絡(luò)接口設(shè)備,并返回該網(wǎng)絡(luò)接口的名稱[4]。利用這個返回值,用戶可以決定使用哪個網(wǎng)卡,并通過函數(shù)pcap_open_live()進(jìn)行調(diào)用。
其次是設(shè)置過濾規(guī)則,包括編譯過濾策略和設(shè)置過濾器兩個步驟。Libpcap提供數(shù)據(jù)包過濾功能,即只采集符合規(guī)則的數(shù)據(jù)包,可通過函數(shù)pcap_compile()和pcap_setfilter()實現(xiàn)。前者的作用是將用戶指定的過濾策略編譯到過濾程序中,后者則是設(shè)置過濾器并引用上述編譯好的過濾規(guī)則。
關(guān)鍵的循環(huán)捕獲操作中Lipcap可以通過函數(shù)pcap_next()、pcap_loop()和pcap_dispatch()來實現(xiàn)一種回調(diào)的機制來獲取數(shù)據(jù)包。 其區(qū)別是pcap_next()只要收到一個數(shù)據(jù)包就會立即返回。pcap_loop()會循環(huán)捕獲網(wǎng)絡(luò)數(shù)據(jù)包,直到遇到錯誤或者滿足退出條件。此外pcap_loop()給用戶提供了一個回調(diào)函數(shù)的入口pcap_handler callback,每當(dāng)pcap_loop()函數(shù)捕獲到一個數(shù)據(jù)包時便會調(diào)用該函數(shù)。所以,用戶可以在回調(diào)函數(shù)中進(jìn)行數(shù)據(jù)包的處理。 pcap_dispatch()和pcap_loop()十分接近,區(qū)別是當(dāng)這個函數(shù)的工作時間超過to_ms毫秒時,它就會立刻返回。參數(shù)to_ms可以在pcap_open_live()中進(jìn)行設(shè)定。
當(dāng)循環(huán)捕獲操作工作完畢時,可以調(diào)用函數(shù)pcap_close()關(guān)閉網(wǎng)絡(luò)接口,結(jié)束相關(guān)進(jìn)程。
已經(jīng)確定協(xié)議識別模塊是以DPI技術(shù)為基礎(chǔ)的,因此對它的設(shè)計還需要考慮兩個方面,一是匹配策略的改進(jìn),二是采用何種模式匹配算法。
2.2.1 匹配策略的改進(jìn)
相較于其他技術(shù),DPI技術(shù)的準(zhǔn)確率是毋庸置疑的,但它仍存在提高的空間。傳統(tǒng)DPI技術(shù)的協(xié)議描述文件一般只包含特征字符,但為了進(jìn)一步提高識別準(zhǔn)確率,還應(yīng)該在此基礎(chǔ)上添加一些規(guī)則信息。
首先DPI技術(shù)傳統(tǒng)的實現(xiàn)方法是對每一個數(shù)據(jù)包的載荷進(jìn)行掃描,然后根據(jù)對應(yīng)的特征字符將其標(biāo)識出來,可這樣的方法效率并不高。對一個連接而言,如果它已經(jīng)被標(biāo)識了協(xié)議類型,那么后續(xù)使用該連接的數(shù)據(jù)包可直接被表示出來,也就是說先通過數(shù)據(jù)包的源IP地址,源端口,目的IP地址,目的端口和傳輸層協(xié)議查找對應(yīng)的連接,如果該連接已被識別,那么可直接將該數(shù)據(jù)包打上對應(yīng)的協(xié)議標(biāo)識[5]。
另外,雖然單獨使用基于端口的識別技術(shù)的準(zhǔn)確率無法保證,但可將其作為輔助手段。這種做法的優(yōu)勢不僅在于面對使用固定端口的協(xié)議識別率高、速度快,更重要的是一些同公司、同類型的應(yīng)用往往具有相同的特征字符,這時它們采用不同的固定端口的可能性很大。因此對于一些沒有在互聯(lián)網(wǎng)名稱與數(shù)字地址分配機構(gòu)(The Internet Corpo- ration for Assigned Names and Numbers,ICANN)注冊但使用固定端口的協(xié)議而言可以將其端口信息和特征字符寫入?yún)f(xié)議描述文件;在ICANN注冊的協(xié)議則可以只以端口號為依據(jù)進(jìn)行識別。
此外,通過對大量網(wǎng)絡(luò)應(yīng)用協(xié)議的分析,得出了如下規(guī)律。
(1)絕大多數(shù)股票和銀行軟件會使用固定的服務(wù)器,因此主機向服務(wù)器發(fā)送的數(shù)據(jù)包的目的IP地址往往固定。針對這類協(xié)議只需將該IP地址寫入?yún)f(xié)議規(guī)則,這會節(jié)省部分系統(tǒng)資源。
(2)絕大多數(shù)協(xié)議的特征字符出現(xiàn)的位置固定,一般都在連接的前幾個數(shù)據(jù)包。因此可以在協(xié)議規(guī)則中添加位置信息作為依據(jù)來提高識別準(zhǔn)確率。
(3)一些下載軟件在進(jìn)行數(shù)據(jù)傳輸時會采用多種協(xié)議,這些協(xié)議屬于P2P類,具備P2P類的一般特征,但仍有少部分特殊協(xié)議不含特征字符。這時可以使用DFI技術(shù)的思想對其進(jìn)行識別,即如果從同一源IP、源端口發(fā)出了超過三個包含足夠數(shù)據(jù)包的連接,則將其歸為“P2PLike”大類。
最后,一些有用的諸如傳輸層協(xié)議,數(shù)據(jù)包長度等信息都可以添加至協(xié)議描述文件中來提高識別的準(zhǔn)確度,降低誤識別率。
2.2.2 模式匹配算法
AC(Aho-Corasick)算法是一種技術(shù)成熟、使用廣泛的多模式匹配算法。它將待匹配的多個模式串生成樹形有限狀態(tài)機,只需要對文本串掃描1次就可匹配多個模式串[6]。AC算法是基于AC自動機的,其行為通過三個函數(shù)來指示:轉(zhuǎn)向函數(shù)(goto)、失效函數(shù)(fail)以及輸出函數(shù)(output)。假設(shè)模式串集為{he,she,his,her},那么生成的字典樹如圖3所示。
轉(zhuǎn)向函數(shù)是自動機基本的狀態(tài)轉(zhuǎn)移過程,例如當(dāng)處于狀態(tài)0時,如果目標(biāo)串的下一個字符是h,則轉(zhuǎn)移到狀態(tài)1。但如果下一個字符串匹配失敗,即在一個狀態(tài)接受了無法轉(zhuǎn)移的字符,這時會調(diào)用失效函數(shù)。它并不需要將匹配過程完全重來一遍,而是繼續(xù)匹配當(dāng)前字符,例如當(dāng)在狀態(tài)4時如果目標(biāo)串下一個字符是i,則直接跳到狀態(tài)6。輸出函數(shù)則輸出整個過程中匹配成功的模式串集,例如當(dāng)處于狀態(tài)8時,則會輸出“he”和“her”。
AC算法的時間復(fù)雜度為O(n),在眾多的模式匹配算法中處于較低水平??梢钥闯鲞@種算法在面對運營商每秒數(shù)據(jù)流量高達(dá)G級別的核心網(wǎng)時會有很好的表現(xiàn)。因此,可以選擇AC算法作為協(xié)議識別模塊的模式匹配算法。
2.3.1 HTB_resv算法
HTB算法是一種基于令牌桶的分類排隊規(guī)則算法,其中令牌表示發(fā)送數(shù)據(jù)包的資格,桶表示令牌的最大個數(shù)。令牌以一定的速率生成,但不能超出“桶”,一旦“桶”滿了,那么新生成的令牌將被丟棄。每發(fā)送一個數(shù)據(jù)包將消耗相應(yīng)的令牌,于是當(dāng)令牌桶中令牌充足時,數(shù)據(jù)包會被發(fā)送,但當(dāng)令牌不足時,數(shù)據(jù)包將會被丟棄或推遲發(fā)送,這樣一來便能控制流量的速率。
HTB算法會模擬出若干條模擬鏈路,通常被稱為類。這些類以如圖4所示的樹狀結(jié)構(gòu)組織在一起。
在這種樹狀結(jié)構(gòu)中,類之間的關(guān)系通常使用父類或者子類描述。例如,類A是類B的父類,類E是類A的子類。同時,沒有子類的類被稱為葉子類,如類C、類D,有子類的類被稱為內(nèi)部類,如類A、類B。
在流量整形過程中,HTB算法會嚴(yán)格依賴最小帶寬(Assured Rate,AR)、最大帶寬(Ceil Rate,CR)、實際速率(Assured Rate,AR)等類的屬性。AR是保證本類發(fā)送數(shù)據(jù)的最小速率,也是本類令牌的生成速率。CR是本類發(fā)送數(shù)據(jù)的最大速率,在令牌的租借機制中,CR反映了該類令牌的最大個數(shù)。實際速率R是在很短的時間間隔內(nèi),測得的本類發(fā)送數(shù)據(jù)包的實際速率[7]。
對葉子類而言,當(dāng)R
在上述令牌租借機制的支持下,各個類之間可以復(fù)用帶寬,提高帶寬利用率,但在實際應(yīng)用中,當(dāng)各個類之間存在帶寬競爭時,某些類的AR可能失效,這也導(dǎo)致了流量整形策略失效的情形發(fā)生。為了兼顧HTB算法的有效性和可靠性,HTB_resv算法在HTB算法的基礎(chǔ)上提供了保留帶寬(Resverved Rate,RR)。
RR是保留給某個特定類的帶寬,不允許其他類使用。RR的實現(xiàn)基于一個全新的令牌桶,其特點主要有:(1)發(fā)送數(shù)據(jù)包時優(yōu)先消耗該令牌桶的令牌;(2)該令牌桶內(nèi)的令牌不允許其他類租借;(3)當(dāng)該令牌桶內(nèi)的令牌不足時轉(zhuǎn)而消耗其他令牌桶的令牌。在此基礎(chǔ)上,HTB_resv算法既能實現(xiàn)令牌租借機制保證帶寬有效利用,又能實現(xiàn)部分令牌私有保證該類帶寬不被其他類占有。
2.3.2 動態(tài)帶寬調(diào)整算法
動態(tài)帶寬調(diào)整算法是另一種解決流量整形策略失效的方法。該算法依據(jù)擁塞控制機制,動態(tài)地監(jiān)測和調(diào)整HTB算法中類的CR值,然后根據(jù)下一時刻各個類的R值對帶寬分配做出進(jìn)一步的優(yōu)化。
動態(tài)帶寬調(diào)整算法每時每刻都會進(jìn)行如圖5所示的帶寬調(diào)整。
動態(tài)帶寬調(diào)整算法只對同時滿足以下三個條件的類進(jìn)行帶寬調(diào)整:
1)液化石油氣的特性:液態(tài)密度:580kg/m3;氣態(tài)密度:2.35kg/m3;氣態(tài)相對密度:1.686;引燃溫度:426~537℃;爆炸上限:[V(能發(fā)生爆炸的氣體體積)/V(含有能爆炸氣體的氣體混合物總體積)]:9.5%;爆炸下限:V/V:1.5%;燃燒值:45.22~50.23MJ/kg。
(1)父類的實時速率R≥最大帶寬AR的85%(保證足夠的帶寬利用率);
(2)該類至少存在一個R>AR的子類;
(3)該類至少存在一個R 假設(shè)滿足圖4所示拓?fù)浣Y(jié)構(gòu)的類A、類B、類C、類D和類E的流量整形參數(shù)和t0時刻的實時速率如表1所示。 表1 類A、類B、類C流量整形參數(shù)和t0時刻實時速率 類AR/MbpsCR/MbpsR/MbpsA222B120.5C120.2D020.3E121.5 按照順序,首先檢查類A,顯然類A未被調(diào)整且滿足上述三個條件。于是對類A進(jìn)行下述操作: (1)查找該類R>AR的子類。 (2)備份這些子類的CR。 (4)將該類標(biāo)記為已調(diào)整。 結(jié)果將把類E的CR設(shè)置為1.9 Mbps。之后繼續(xù)按照順序檢查,類B滿足條件,將類D的CR設(shè)置為1.9 Mbps,類C、類D、類E均不滿足上述條件,不予調(diào)整。 t0+1時刻,會檢查被標(biāo)記為已調(diào)整的類在上一時刻的帶寬調(diào)整是否生效。其判定依據(jù)為該類至少存在一個上一時刻R 之后在t0+2、t0+3、t0+4、t0+5時刻執(zhí)行的操作與t0+1時刻類似。假設(shè)類E在t0+6時刻的實時速率R仍為1.5 Mbps,但此時類E的CR已被調(diào)整至1.47 Mbps,小于R。這時HTB算法調(diào)度器會丟棄多余的數(shù)據(jù)包,引發(fā)擁塞。數(shù)據(jù)發(fā)送方檢測到擁塞后會降低發(fā)送數(shù)據(jù)包的速率。 假設(shè)類B的網(wǎng)絡(luò)流量隨類E的降低而增大,那么在t0+6時刻對類A的帶寬調(diào)整將在t0+7時刻被認(rèn)定為生效,導(dǎo)致類E的CR被繼續(xù)調(diào)低,直至類B的R不再增大或者類E的CR等于AR。至此,類E無法再搶占類B的帶寬。 假設(shè)類C的網(wǎng)絡(luò)流量與類D無關(guān),那么經(jīng)過MAX_FAIL次調(diào)低類D的CR后將類D的CR復(fù)位。 動態(tài)帶寬調(diào)整算法最終使搶占其他類帶寬的類的CR降至一個合理的水平,這樣可以保證各個類的帶寬競爭降至最低,以此來解決流量整形策略失效的問題。 現(xiàn)如今,各種網(wǎng)絡(luò)應(yīng)用的出現(xiàn)在滿足了用戶使用需求的同時,也對網(wǎng)絡(luò)流量的管理提出了很大的挑戰(zhàn)。本文結(jié)合網(wǎng)絡(luò)應(yīng)用流量識別技術(shù)以及國內(nèi)外在帶寬管理領(lǐng)域取得的一些研究成果,設(shè)計并實現(xiàn)了一種基于DPI技術(shù)的帶寬管理系統(tǒng)。該系統(tǒng)的網(wǎng)絡(luò)應(yīng)用協(xié)議識別部分具有成本開銷小、支持協(xié)議數(shù)量多、識別率高等特點。流量整形方面則主要有效解決了因帶寬競爭而引起的流量整形策略失效的問題,為如何合理地分配帶寬和有效地制定帶寬管理制度提出了一種良好的解決方案。3 結(jié)語