周瑩
【摘要】 本文在對(duì)零拷貝技術(shù)改進(jìn)的基礎(chǔ)上提出了一種適應(yīng)不同網(wǎng)絡(luò)負(fù)載環(huán)境下的自適應(yīng)的數(shù)據(jù)捕獲方法,重點(diǎn)介紹了其實(shí)現(xiàn)的關(guān)鍵技術(shù)、數(shù)據(jù)捕獲整體結(jié)構(gòu),自適應(yīng)數(shù)據(jù)捕獲方法使用范圍更廣、在同等條件下有效的減輕了CPU的負(fù)荷,提高了數(shù)據(jù)捕獲的效率。
【關(guān)鍵詞】 自適應(yīng) 數(shù)據(jù)捕獲 Linux系統(tǒng)
一、引言
網(wǎng)絡(luò)數(shù)據(jù)捕獲是網(wǎng)絡(luò)安全性分析過(guò)程中一種常用的方法,一般采用NAPI中斷輪詢機(jī)制、零拷貝技術(shù)和TOE等關(guān)鍵方法來(lái)提升數(shù)據(jù)捕獲的性能,但是這些方案在實(shí)際應(yīng)用中存在適用范圍小性能提升有限等問(wèn)題。本文提出了自適應(yīng)網(wǎng)絡(luò)數(shù)據(jù)捕獲方法,實(shí)現(xiàn)一種應(yīng)用范圍更廣的數(shù)據(jù)捕獲方案。
二、自適應(yīng)數(shù)據(jù)捕獲及其關(guān)鍵技術(shù)
為了提高數(shù)據(jù)捕獲的效率,適應(yīng)不同的網(wǎng)絡(luò)環(huán)境,本文在零拷貝的基礎(chǔ)上提出一種自適應(yīng)的網(wǎng)絡(luò)數(shù)據(jù)捕獲機(jī)制。
2.1 自適應(yīng)網(wǎng)絡(luò)數(shù)據(jù)捕獲整體結(jié)構(gòu)
與零拷貝技術(shù)相比,將接口程序中隊(duì)列中的去寫數(shù)據(jù)的方式從硬件中斷方式改為輪詢方式,設(shè)定自適應(yīng)的輪詢定時(shí)器,采用自適應(yīng)的方式根據(jù)流量大小對(duì)定時(shí)器的工作時(shí)間進(jìn)行調(diào)整,如果網(wǎng)絡(luò)中數(shù)據(jù)流量較大時(shí)則增大定時(shí)器的定時(shí)時(shí)間間隔,如果流量較小時(shí)則減小定時(shí)器定時(shí)時(shí)間。通過(guò)這種方式可以減小中斷帶來(lái)的系統(tǒng)開(kāi)銷,同時(shí)能夠根據(jù)不同的網(wǎng)絡(luò)環(huán)境適時(shí)調(diào)整輪詢頻率,及時(shí)高效的處理網(wǎng)絡(luò)數(shù)據(jù)。
2.2 自適應(yīng)定時(shí)器
自適應(yīng)網(wǎng)絡(luò)數(shù)據(jù)捕獲方法減少中斷次數(shù)的關(guān)鍵就是根據(jù)網(wǎng)絡(luò)流量大小修正輪詢時(shí)定時(shí)器計(jì)時(shí)的時(shí)間間隔。其核心是根據(jù)已經(jīng)采集的數(shù)據(jù)流量大小預(yù)測(cè)定下一次定時(shí)器啟動(dòng)的時(shí)間。在預(yù)測(cè)時(shí)間時(shí)首先按照一定的時(shí)間間隔采集當(dāng)前網(wǎng)絡(luò)流量大小得到一個(gè)連續(xù)的時(shí)間序列,網(wǎng)絡(luò)流量數(shù)據(jù)可以用如下數(shù)據(jù)形式描述:
X={x1,x2,x3,…xt,t=1,2,3…}
其中xt表示網(wǎng)絡(luò)中t到t+1時(shí)刻網(wǎng)絡(luò)中數(shù)據(jù)流量大小,X表示為連續(xù)的網(wǎng)絡(luò)流量時(shí)間序列。網(wǎng)絡(luò)流量預(yù)測(cè)根據(jù)過(guò)去的現(xiàn)在已知的或者非確定的網(wǎng)絡(luò)流量狀態(tài)建立一個(gè)網(wǎng)絡(luò)流量預(yù)測(cè)模型從而預(yù)測(cè)未來(lái)的流量,可以用如下函數(shù)表示:
其中為其與預(yù)測(cè)值。為了不增加額外的開(kāi)銷,在流量預(yù)測(cè)時(shí)使用計(jì)算相對(duì)簡(jiǎn)單預(yù)測(cè)也較準(zhǔn)確的基于數(shù)理統(tǒng)計(jì)的泊松過(guò)程模型。
2.3 內(nèi)存地址映射
為了避免數(shù)據(jù)在內(nèi)存之間的拷貝,在用戶和內(nèi)核中設(shè)置了一塊共享的緩沖區(qū),但是用戶程序所使用的地址和硬件使用的物理地址是不相同的。Linux操作系統(tǒng)中每個(gè)應(yīng)用程序維護(hù)一個(gè)多級(jí)頁(yè)表來(lái)實(shí)現(xiàn)地址之間的轉(zhuǎn)換。
內(nèi)存地址轉(zhuǎn)換時(shí)首先將用戶緩沖區(qū)UserBuff經(jīng)過(guò)頁(yè)對(duì)齊之后的首地址傳入內(nèi)核中并以此為首地址逐級(jí)映射到物理地址表phy_addr_table。物理地址表phy_addr_table一旦初始化后就鎖定不可更改。具體過(guò)程如下:
For(i=0;i<(BUFF_BLK_NUM)>>1);i++,addr+=PAGE_SIZE)
經(jīng)過(guò)映射之后,用戶就可以直接訪問(wèn)送入Phy_addr_ table中的網(wǎng)絡(luò)數(shù)據(jù)包。
三、測(cè)試
為了對(duì)自適應(yīng)網(wǎng)絡(luò)數(shù)據(jù)數(shù)據(jù)捕獲方法進(jìn)行進(jìn)一步分析,對(duì)整個(gè)系統(tǒng)進(jìn)行了測(cè)試。測(cè)試是使用linux2.6.21操作系統(tǒng),realtek rtl8168 8111網(wǎng)卡,CPU為Intel(R) i3-2100 CPU。為了測(cè)試自適應(yīng)數(shù)據(jù)捕獲系統(tǒng)的性能,測(cè)試了64字節(jié)小包發(fā)送不同速率的數(shù)據(jù)包對(duì)CPU資源的占用情況,測(cè)試結(jié)果如表1所示:
測(cè)試結(jié)果表明,自適應(yīng)的網(wǎng)絡(luò)數(shù)據(jù)捕獲方法在不同的數(shù)據(jù)流量大小情況下占用CPU的資源均比使用libpcap庫(kù)和零拷貝技術(shù)時(shí)要小,尤其是在發(fā)包數(shù)量大道150萬(wàn)個(gè)/s的情況下采用libpcap庫(kù)和零拷貝機(jī)制的CPU使用率達(dá)到將近100%,自適應(yīng)數(shù)據(jù)捕獲CPU使用率仍然相對(duì)較低。
四、結(jié)束語(yǔ)
本文在對(duì)零拷貝技術(shù)的改進(jìn)的基礎(chǔ)上提出了一種適應(yīng)不同網(wǎng)絡(luò)負(fù)載環(huán)境下的自適應(yīng)的數(shù)據(jù)捕獲方法,相比較與其他數(shù)據(jù)捕獲機(jī)制,自適應(yīng)數(shù)據(jù)捕獲方法使用范圍更廣、在同等條件下有效的減輕了CPU的負(fù)荷,提高了數(shù)據(jù)捕獲的效率。
參 考 文 獻(xiàn)
[1]馬博.Linux下的高流量數(shù)據(jù)包監(jiān)聽(tīng)技術(shù)[J].計(jì)算機(jī)應(yīng)用,2009,29(5):1244-1250
[2]劉文濤.網(wǎng)絡(luò)安全開(kāi)發(fā)包詳解[M].北京:電子工業(yè)出版社,2011