邢毅偉,曹祁生,陽(yáng)琳峰
(1.武漢郵電科學(xué)研究院通信與信息系統(tǒng)系,湖北武漢430074;2.烽火通信股份有限公司,湖北武漢430073)
家庭網(wǎng)關(guān)是接入互聯(lián)網(wǎng)的主要終端之一,也是目前各大互聯(lián)網(wǎng)運(yùn)營(yíng)商主推的互聯(lián)網(wǎng)接入設(shè)備.隨著網(wǎng)絡(luò)發(fā)展的日新月異以及眾多新業(yè)務(wù)的出現(xiàn),互聯(lián)網(wǎng)承載了更多的業(yè)務(wù),對(duì)這些業(yè)務(wù)的服務(wù)質(zhì)量的保障,給家庭網(wǎng)關(guān)的性能提出了更高的要求[1].提高家庭網(wǎng)關(guān)對(duì)數(shù)據(jù)的處理能力,同時(shí)有效地節(jié)約嵌入式系統(tǒng)資源,開(kāi)展數(shù)據(jù)加速方面的研究工作尤為重要.結(jié)合DPI(深度包檢測(cè))技術(shù),可以較為精確地識(shí)別出業(yè)務(wù)類(lèi)型,以此為依據(jù)對(duì)包進(jìn)行標(biāo)記,對(duì)高優(yōu)先級(jí)包進(jìn)行優(yōu)先快速轉(zhuǎn)發(fā),確保重要業(yè)務(wù)的優(yōu)先保障.
DPI(深度包檢測(cè)),是一種先進(jìn)的包過(guò)濾方法,它在開(kāi)放系統(tǒng)互連(OSI)參考模型的應(yīng)用層中起作用.使用深度包檢測(cè)可以發(fā)現(xiàn)、識(shí)別、分類(lèi)、重新路由或阻止具有特殊數(shù)據(jù)或代碼有效載荷的數(shù)據(jù)包,而傳統(tǒng)的包過(guò)濾只能檢測(cè)數(shù)據(jù)包包頭,不能發(fā)現(xiàn)這些數(shù)據(jù)包.因此,使用DPI技術(shù)可以較為準(zhǔn)確地識(shí)別出用戶(hù)所使用的業(yè)務(wù),進(jìn)而針對(duì)業(yè)務(wù)進(jìn)行后續(xù)處理.
其實(shí)現(xiàn)原理為利用Linux下的Netfilter框架,實(shí)現(xiàn)對(duì)內(nèi)核數(shù)據(jù)報(bào)文的獲?。?],其基本框架如下圖1所示.DPI模塊在NF_IP_PRE_ROUTING處設(shè)置鉤子函數(shù),將數(shù)據(jù)包提取出來(lái)進(jìn)行分析.對(duì)于不同的業(yè)務(wù)具有不同的關(guān)鍵字信息,以此為依據(jù)進(jìn)行業(yè)務(wù)識(shí)別.識(shí)別出某個(gè)業(yè)務(wù)的連接信息后則設(shè)置其skb的mark值為當(dāng)前業(yè)務(wù)所代表的值,后續(xù)轉(zhuǎn)發(fā)依據(jù)skb的mark值來(lái)進(jìn)行該條流的調(diào)度轉(zhuǎn)發(fā)策略設(shè)置,從而后續(xù)報(bào)文則會(huì)使用新設(shè)置的調(diào)度轉(zhuǎn)發(fā)策略來(lái)進(jìn)行處理.
圖1 Linux下Netfilter框架圖
通常在互聯(lián)網(wǎng)上使用的業(yè)務(wù)分為很多種,不同類(lèi)型的業(yè)務(wù)有著不同的QoS需求[3].要使在多種業(yè)務(wù)并存的情況下使用戶(hù)得到更好的體驗(yàn),需要使用流量控制和業(yè)務(wù)調(diào)度的功能.其基本思想是,在數(shù)據(jù)包被發(fā)送后,并不是直接把數(shù)據(jù)包交給硬件進(jìn)行發(fā)送,而是會(huì)根據(jù)配置和需要把數(shù)據(jù)進(jìn)行分類(lèi),然后把數(shù)據(jù)放入相應(yīng)的QoS隊(duì)列內(nèi)[4].對(duì)這些隊(duì)列劃分優(yōu)先級(jí)極高、高、一般、低等幾個(gè)等級(jí),對(duì)于優(yōu)先級(jí)高的隊(duì)列進(jìn)行優(yōu)先保障,剩余的帶寬再進(jìn)行盡力而為的發(fā)送.據(jù)此,結(jié)合DPI的業(yè)務(wù)識(shí)別功能設(shè)計(jì)出一種基于業(yè)務(wù)類(lèi)型的QoS調(diào)度方法.
此外,傳統(tǒng)的家庭網(wǎng)關(guān)設(shè)備對(duì)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)通過(guò)網(wǎng)絡(luò)協(xié)議棧進(jìn)行轉(zhuǎn)發(fā),傳統(tǒng)的協(xié)議棧轉(zhuǎn)發(fā)存在轉(zhuǎn)發(fā)效率低下、丟包嚴(yán)重的缺陷.然而,對(duì)于五元組相同的數(shù)據(jù)報(bào)文來(lái)說(shuō),網(wǎng)關(guān)對(duì)首個(gè)報(bào)文與后續(xù)報(bào)文的處理行為完全一致,沒(méi)有必要讓所有報(bào)文都完整經(jīng)過(guò)協(xié)議棧轉(zhuǎn)發(fā),現(xiàn)有的技術(shù)中出現(xiàn)了軟件或硬件加速轉(zhuǎn)發(fā)方式[5].但是,現(xiàn)有技術(shù)沒(méi)有很好的方法來(lái)管理和控制軟件加速轉(zhuǎn)發(fā)和硬件轉(zhuǎn)發(fā),家庭網(wǎng)關(guān)對(duì)報(bào)文的業(yè)務(wù)類(lèi)型也不加以區(qū)分,任何業(yè)務(wù)類(lèi)型的數(shù)據(jù)報(bào)文被同等對(duì)待轉(zhuǎn)發(fā).因此,現(xiàn)有技術(shù)在數(shù)據(jù)轉(zhuǎn)發(fā)方面存在轉(zhuǎn)發(fā)行為盲目、沒(méi)有針對(duì)性、轉(zhuǎn)發(fā)效率低、轉(zhuǎn)發(fā)資源分配不合理以及浪費(fèi)轉(zhuǎn)發(fā)資源等問(wèn)題.針對(duì)如上問(wèn)題,提出一種基于業(yè)務(wù)類(lèi)型的數(shù)據(jù)報(bào)文多級(jí)加速轉(zhuǎn)發(fā)模塊,并將其與QoS模塊結(jié)合,作為其擴(kuò)展功能,稱(chēng)作QoS快轉(zhuǎn)模塊.目前多級(jí)加速分為4個(gè)級(jí)別:A)不加速;B)軟件加速;C)硬件加速;D)混合加速.
所述的QoS快轉(zhuǎn)模塊,用于實(shí)現(xiàn)已進(jìn)行業(yè)務(wù)分類(lèi)報(bào)文的各種優(yōu)先級(jí)設(shè)置以及各種級(jí)別的轉(zhuǎn)發(fā).其中,不同業(yè)務(wù)類(lèi)型的報(bào)文的轉(zhuǎn)發(fā)控制由用戶(hù)按照需求配置.進(jìn)入到QoS快轉(zhuǎn)模塊中的報(bào)文,按照轉(zhuǎn)發(fā)控制進(jìn)行隊(duì)列優(yōu)先級(jí)設(shè)置以及各種級(jí)別加速,其中加速的報(bào)文需要匹配各自的加速轉(zhuǎn)發(fā)表項(xiàng).只有匹配成功的報(bào)文才可以成功進(jìn)行加速轉(zhuǎn)發(fā),匹配失敗的報(bào)文被送往協(xié)議棧進(jìn)行轉(zhuǎn)發(fā).對(duì)于軟加速,適用于那些含有特殊的信令報(bào)文,必須經(jīng)過(guò)協(xié)議棧處理,但是又不需要完整走協(xié)議棧那么效率低下的業(yè)務(wù),例如網(wǎng)絡(luò)語(yǔ)音電話等.硬件加速,適用于大業(yè)務(wù)流量的P2P視頻流業(yè)務(wù).而混合加速則為一種折中處理方法,依據(jù)業(yè)務(wù)流量的速率大小自動(dòng)選擇加速方法.對(duì)于一般的業(yè)務(wù),默認(rèn)不加速即協(xié)議棧轉(zhuǎn)發(fā).
本模塊功能突出的優(yōu)點(diǎn)在于:實(shí)現(xiàn)了多種數(shù)據(jù)加速轉(zhuǎn)發(fā),并且對(duì)優(yōu)先級(jí)隊(duì)列的調(diào)度和報(bào)文的加速轉(zhuǎn)發(fā)是基于業(yè)務(wù)類(lèi)型的,用戶(hù)可以根據(jù)自己的需求來(lái)設(shè)置適合自身需求的QoS配置方案以及轉(zhuǎn)發(fā)方式,提高家庭網(wǎng)關(guān)的轉(zhuǎn)發(fā)速率和效率,也提高了家庭網(wǎng)關(guān)的服務(wù)質(zhì)量.
3.1 DPI模塊的實(shí)現(xiàn) 通過(guò)設(shè)置鉤子函數(shù)將報(bào)文的信息提取出來(lái),報(bào)文的數(shù)據(jù)以Linux內(nèi)核中重要的結(jié)構(gòu)體sk_buff作為基礎(chǔ),進(jìn)行數(shù)據(jù)對(duì)比解析[6].其中用到以下的幾個(gè)重要的數(shù)據(jù)指針:
skb->mac_h(yuǎn)eader 指向數(shù)據(jù)包的Ethernet頭;
skb->pkt_type 指向數(shù)據(jù)包的類(lèi)型;
skb->len 指向數(shù)據(jù)包的長(zhǎng)度;
skb->data 指向數(shù)據(jù)包內(nèi)容的開(kāi)頭.
利用skb->mac_h(yuǎn)eader可以通過(guò)加偏移量取出數(shù)據(jù)包的源mac、目的mac、源IP、目的IP、源端口、目的端口、傳輸協(xié)議等信息[7].通過(guò)skb->pkt_type可以劃分?jǐn)?shù)據(jù)包的類(lèi)型,對(duì)于廣播包或者組播報(bào)文可以進(jìn)行相應(yīng)的處理.通過(guò)skb->len判斷數(shù)據(jù)包的長(zhǎng)度,可以有效地篩選某些特征報(bào)文.最重要的是skb->data,通過(guò)加上偏移量就可得到數(shù)據(jù)包正文開(kāi)始的位置,也是判斷業(yè)務(wù)的最關(guān)鍵地方.
目前常見(jiàn)的上述業(yè)務(wù)有web郵箱的附件上傳業(yè)務(wù),還有各種網(wǎng)絡(luò)硬盤(pán)上傳業(yè)務(wù)等.對(duì)于這些業(yè)務(wù)普遍使用TCP協(xié)議80端口進(jìn)行通信.傳統(tǒng)的協(xié)議類(lèi)型區(qū)分業(yè)務(wù)方法不能細(xì)分這些業(yè)務(wù).然而使用DPI技術(shù),則可以將TCP連接發(fā)起和回包中的具體內(nèi)容加以區(qū)分[8].以某web郵箱上傳附件為例,在其建立連接時(shí)必然會(huì)出現(xiàn)關(guān)鍵字“mail.xxx.cn”.以此為根據(jù)通過(guò)skb->data指針進(jìn)行查找,對(duì)于含有這樣字段的報(bào)文進(jìn)行mark打標(biāo)操作,即可實(shí)現(xiàn)該業(yè)務(wù)的識(shí)別,后續(xù)加以保障.
3.2 連接跟蹤條目的mark值規(guī)劃 在連接跟蹤條目的數(shù)據(jù)結(jié)構(gòu)中有一個(gè)mark(conntrack->mark),可以作為私有功能的使用.因此,可以利用這個(gè)mark值來(lái)實(shí)現(xiàn)本系統(tǒng)的功能.規(guī)劃如表1所示.
表1 conntrack->mark值規(guī)劃
其中低4位用于設(shè)置快速轉(zhuǎn)發(fā)的類(lèi)型,設(shè)置為0001為開(kāi)啟軟加速,設(shè)置為1001為開(kāi)啟硬加速.第5到8位暫且保留,用來(lái)作為后續(xù)新功能的開(kāi)發(fā)使用.第9到12位則規(guī)劃為業(yè)務(wù)的調(diào)度入隊(duì)列優(yōu)先級(jí)而使用.
3.3 業(yè)務(wù)流的mark值與QoS調(diào)度 在數(shù)據(jù)包進(jìn)行路由轉(zhuǎn)發(fā)時(shí),業(yè)務(wù)流的數(shù)據(jù)結(jié)構(gòu)中也存在一個(gè)mark值(skb->mark).同樣可以利用這個(gè)mark值來(lái)實(shí)現(xiàn)QoS隊(duì)列調(diào)度的功能.由于交換芯片硬件提供了0到7共8個(gè)隊(duì)列可供調(diào)度使用,其中隊(duì)列0的優(yōu)先級(jí)最低隊(duì)列7的優(yōu)先級(jí)最高,8個(gè)隊(duì)列的操作需要3位二進(jìn)制數(shù)來(lái)控制.因此設(shè)置交換芯片的硬件規(guī)則,根據(jù)業(yè)務(wù)流的mark值最低的四位值的判斷進(jìn)行調(diào)度操作.其中第四位來(lái)確定是否進(jìn)行調(diào)度,后三位來(lái)決定調(diào)度入隊(duì)列的值.如設(shè)置某條流的mark值為0x9即1001,則這條流將會(huì)被放入隊(duì)列1中進(jìn)行調(diào)度.
3.4 連接跟蹤條目mark值進(jìn)行調(diào)度的實(shí)現(xiàn) 在QoS快轉(zhuǎn)的內(nèi)核模塊中,將提取連接跟蹤條目的mark值,將其設(shè)置業(yè)務(wù)流的隊(duì)列優(yōu)先級(jí)的9到12位寫(xiě)入業(yè)務(wù)流的mark位低四位,便實(shí)現(xiàn)了設(shè)置連接跟蹤條目的mark值,同時(shí)也設(shè)置了業(yè)務(wù)流的mark值.也即設(shè)置了連接跟蹤條目的mark值,便可以進(jìn)行業(yè)務(wù)優(yōu)先級(jí)的調(diào)度,以及加速的策略的設(shè)置.
3.5 系統(tǒng)工作流程 當(dāng)一條業(yè)務(wù)流經(jīng)過(guò)家庭網(wǎng)關(guān),它的首個(gè)數(shù)據(jù)報(bào)文在協(xié)議棧處理過(guò)程中被DPI模塊設(shè)置的鉤子函數(shù)提取,進(jìn)入解析.相同五元組的首個(gè)TCP或UDP報(bào)文,必須由CPU進(jìn)行協(xié)議棧轉(zhuǎn)發(fā).對(duì)于首個(gè)報(bào)文,送往協(xié)議棧前經(jīng)過(guò)DPI識(shí)別的程序.解析出業(yè)務(wù)類(lèi)型,將報(bào)文所屬的五元組打上特定的標(biāo)簽,確認(rèn)業(yè)務(wù)的類(lèi)型后則把報(bào)文送往QoS快轉(zhuǎn)模塊進(jìn)行處理.首先進(jìn)行QoS優(yōu)先級(jí)的隊(duì)列配置,然后多級(jí)加速轉(zhuǎn)發(fā)模塊根據(jù)用戶(hù)預(yù)先配置的各種業(yè)務(wù)轉(zhuǎn)發(fā)策略,決定該報(bào)文進(jìn)行哪種類(lèi)型的轉(zhuǎn)發(fā),將該條連接信息加入到加速轉(zhuǎn)發(fā)表項(xiàng)中.后續(xù)的報(bào)文在進(jìn)linux協(xié)議棧之前便會(huì)根據(jù)數(shù)據(jù)包的五元組信息與加速轉(zhuǎn)發(fā)表進(jìn)行匹配,如果匹配成功.則進(jìn)行相應(yīng)加速并進(jìn)行調(diào)度策略處理,即根據(jù)連接跟蹤條目的mark值設(shè)置業(yè)務(wù)流的mark值.隨后,數(shù)據(jù)流進(jìn)入交換芯片,根據(jù)所設(shè)置的隊(duì)列優(yōu)先級(jí)進(jìn)行轉(zhuǎn)發(fā).具體流程如圖2所示.
圖2 系統(tǒng)工作流程圖
采用某web郵箱附件上傳業(yè)務(wù)與某云盤(pán)的上傳業(yè)務(wù)做比較進(jìn)行測(cè)試.其中某web郵箱業(yè)務(wù)進(jìn)行DPI識(shí)別,并將其調(diào)度策略設(shè)置為隊(duì)列7(最高優(yōu)先級(jí)),硬件加速轉(zhuǎn)發(fā),即連接跟蹤條目的mark值設(shè)置成0xF0B,而某云盤(pán)則采用策略默認(rèn)為隊(duì)列0(最低優(yōu)先級(jí)).
實(shí)驗(yàn)環(huán)境:現(xiàn)網(wǎng)PPPOE環(huán)境,通過(guò)網(wǎng)關(guān)撥號(hào)獲取地址.
實(shí)驗(yàn)步驟為:
1)在olt上對(duì)家庭網(wǎng)關(guān)的上行速率限制到1Mbps.
2)家庭網(wǎng)關(guān)上建立一條PPPOE撥號(hào)的wan連接,使其下接的PC可以上網(wǎng).
3)單獨(dú)使用web郵箱和云盤(pán)上傳相同大小的文件,記錄時(shí)間.
4)不開(kāi)啟DPI_QOS功能,同時(shí)使用web郵箱和云盤(pán)上傳相同大小的文件,記錄時(shí)間.
5)開(kāi)啟DPI_QOS功能后,再次同時(shí)使用web郵箱和云盤(pán)上傳相同大小的文件,記錄時(shí)間.
實(shí)驗(yàn)結(jié)果如表2所示.
表2 測(cè)試結(jié)果
由實(shí)驗(yàn)結(jié)果可以看出,在開(kāi)啟的DPI_QOS以后,web郵箱附件上傳的時(shí)間遠(yuǎn)遠(yuǎn)小于云盤(pán)上傳的時(shí)間,幾乎等于單獨(dú)上傳web郵箱附件的時(shí)間,而云盤(pán)則是在前者上傳完畢后才開(kāi)始占領(lǐng)全部的帶寬.這樣便實(shí)現(xiàn)了高優(yōu)先級(jí)的業(yè)務(wù)進(jìn)行絕對(duì)的優(yōu)先保障.
隨著互聯(lián)網(wǎng)的繁榮,許多新興的業(yè)務(wù)和應(yīng)用對(duì)于端口號(hào)或者IP地址的選擇并不是固定的,相同的端口號(hào)和傳輸協(xié)議被許多業(yè)務(wù)共同使用,因此傳統(tǒng)的識(shí)別方法并不能識(shí)別這些業(yè)務(wù).而利用DPI技術(shù)可以精確地識(shí)別出業(yè)務(wù)的類(lèi)型并加以調(diào)度,外加設(shè)置成不同加速轉(zhuǎn)發(fā)的策略,完全擴(kuò)展了傳統(tǒng)QoS的功能,為客戶(hù)的業(yè)務(wù)提供更加貼心的基于業(yè)務(wù)的QoS保障.經(jīng)過(guò)驗(yàn)證,通過(guò)DPI的業(yè)務(wù)識(shí)別進(jìn)行業(yè)務(wù)的QoS保障實(shí)際效果明顯.后續(xù)會(huì)將更多的常見(jiàn)應(yīng)用進(jìn)行特征匹配,以提供更多業(yè)務(wù)的QoS保障服務(wù).
[1]肖恒杰.家庭網(wǎng)關(guān)中分層服務(wù)質(zhì)量管理功能的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2010.
[2]蔣華,王汝傳,李致遠(yuǎn).基于Netfilter的流量檢測(cè)與控制系統(tǒng)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012(1):90-93.
[3]劉星.MoIP網(wǎng)關(guān)中服務(wù)質(zhì)量的研究與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2008.
[4]肖趙斌.QoS框架中隊(duì)列調(diào)度功能的設(shè)計(jì)和實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2012.
[5]熊軻.支持QoS的可擴(kuò)展可靠路由算法及轉(zhuǎn)發(fā)技術(shù)研究[D].北京:北京交通大學(xué),2010.
[6]鮑娟.基于嵌入式Linux的網(wǎng)絡(luò)流量監(jiān)測(cè)系統(tǒng)[D].武漢:武漢科技大學(xué),2009.
[7]王偉.深度檢測(cè)技術(shù)探討及其在校園網(wǎng)中的應(yīng)用[D].長(zhǎng)春:長(zhǎng)春理工大學(xué),2009.
[8]郭恩陽(yáng).DPI在移動(dòng)分組域中的應(yīng)用與展望[J].移動(dòng)通信,2012,18:85-89.