專利名稱:一種基于Linux的底層數(shù)據(jù)包的高速捕獲方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種Linux環(huán)境下基于千兆網(wǎng)卡的數(shù)據(jù)包高速捕獲方法,屬于信息安 全領(lǐng)域。
背景技術(shù):
隨著千兆網(wǎng)絡(luò)時(shí)代的到來(lái),傳統(tǒng)的報(bào)文捕獲機(jī)制已經(jīng)成為整個(gè)系統(tǒng)的性能瓶頸。其一,網(wǎng)絡(luò)報(bào)文以單個(gè)報(bào)文驅(qū)動(dòng)的機(jī)制被Linux內(nèi)核接收,內(nèi)核對(duì)每一條報(bào)文均無(wú)差別地 執(zhí)行緩沖申請(qǐng)以及報(bào)頭校驗(yàn)等操作;其二,報(bào)文處理程序每次通過系統(tǒng)調(diào)用僅從內(nèi)核讀取 出一條報(bào)文;其三,報(bào)文需要通過多次內(nèi)存拷貝傳送到報(bào)文處理程序所在的用戶空間。普 通的網(wǎng)卡和Libpcap接口就足以保證運(yùn)行在Linux用戶空間的網(wǎng)絡(luò)報(bào)文處理程序,如 tcpdump、ethereal和snort等,線速地捕獲網(wǎng)絡(luò)報(bào)文。這個(gè)瓶頸問題主要表現(xiàn)為丟包率急劇上升和“中斷淹沒”,也就是說(shuō),系統(tǒng)無(wú)法迅 速地捕獲網(wǎng)絡(luò)數(shù)據(jù)包,而且?guī)缀跞康腃PU時(shí)鐘都被用于處理網(wǎng)卡產(chǎn)生的中斷,而無(wú)暇顧 及處理其他任務(wù),使系統(tǒng)的性能急劇下降。如果修改網(wǎng)卡驅(qū)動(dòng)程序,使到達(dá)網(wǎng)卡的數(shù)據(jù)包繞 過內(nèi)核協(xié)議棧,而直接轉(zhuǎn)交給構(gòu)建的后續(xù)模塊處理并實(shí)現(xiàn)用戶空間的用戶程序?qū)@些數(shù)據(jù) 包的直接訪問,可以大大提高捕獲數(shù)據(jù)包的效率問題。傳統(tǒng)的數(shù)據(jù)包捕獲是由中斷驅(qū)動(dòng)的,由于中斷的系統(tǒng)開銷是昂貴的,當(dāng)數(shù)據(jù)包到 達(dá)的速率過快的時(shí)候,系統(tǒng)會(huì)陷入不斷的中斷處理而無(wú)法跳出,因此產(chǎn)生中斷活鎖,從而導(dǎo) 致報(bào)文吞吐率的急劇下降。當(dāng)帶寬相同的情況下,如果傳輸很小的數(shù)據(jù)包,此時(shí)中斷的發(fā)生 會(huì)很頻繁,系統(tǒng)的處理能力會(huì)降到很低。既然完全采用中斷驅(qū)動(dòng)存在諸多問題,有的系統(tǒng)則 采用完全驅(qū)動(dòng)的方法來(lái)接收?qǐng)?bào)文。但是當(dāng)系統(tǒng)設(shè)定的輪詢頻率遠(yuǎn)大于數(shù)據(jù)包到達(dá)的頻率 時(shí),這種輪詢就變得毫無(wú)意義。因此,單獨(dú)采用中斷驅(qū)動(dòng)或輪詢驅(qū)動(dòng)都不能很好的改善報(bào)文 的吞吐率,一種較好的實(shí)現(xiàn)方法就是采用半輪詢驅(qū)動(dòng)進(jìn)行傳輸控制,在網(wǎng)絡(luò)負(fù)載較低時(shí),報(bào) 文到達(dá)時(shí)間是隨機(jī)的,此時(shí)宜采用中斷處理機(jī)制;在網(wǎng)絡(luò)負(fù)載較高時(shí),宜采用輪詢機(jī)制。傳統(tǒng)的數(shù)據(jù)捕獲技術(shù)中,網(wǎng)絡(luò)數(shù)據(jù)傳輸需要多次內(nèi)存拷貝,消耗大量的CPU周期 和內(nèi)存資源。零拷貝的基本思想是數(shù)據(jù)分組從網(wǎng)絡(luò)設(shè)備到用戶程序空間傳遞的過程中,減 少數(shù)據(jù)拷貝次數(shù)和系統(tǒng)調(diào)用,實(shí)現(xiàn)CPU的零參與,徹底消除CPU在這方面的負(fù)擔(dān)。零拷貝的 主要實(shí)現(xiàn)技術(shù)是DMA數(shù)據(jù)傳輸技術(shù)和內(nèi)存映射技術(shù)。零拷貝技術(shù)首先利用DMA技術(shù)將網(wǎng)絡(luò) 數(shù)據(jù)包直接傳遞到系統(tǒng)內(nèi)核預(yù)先分配的地址空間中,避免CPU的參與;同時(shí),將系統(tǒng)內(nèi)核中 存儲(chǔ)數(shù)據(jù)包的內(nèi)存區(qū)域映射到用戶空間的應(yīng)用程序,應(yīng)用程序直接對(duì)這塊內(nèi)存進(jìn)行訪問, 從而減少了系統(tǒng)內(nèi)核向用戶空間的內(nèi)存拷貝,同時(shí)減少了系統(tǒng)調(diào)用的開銷。內(nèi)核訪問用戶 空間中的具體數(shù)據(jù)并不受操作系統(tǒng)的限制,但是出于安全性考慮,操作系統(tǒng)限制用戶訪問 內(nèi)核空間中的數(shù)據(jù)。因此操作系統(tǒng)接收數(shù)據(jù)包需要從內(nèi)核空間拷貝到用戶空間,如果數(shù)據(jù) 量很大,會(huì)降低系統(tǒng)的性能。內(nèi)存映射技術(shù)要構(gòu)造一個(gè)用戶空間與內(nèi)核空間共享的環(huán)形緩沖區(qū)。該緩沖區(qū)中存 放的是Linux內(nèi)核捕獲的數(shù)據(jù)包在內(nèi)存中的地址。內(nèi)核每捕獲一個(gè)數(shù)據(jù)包,就將該數(shù)據(jù)包存放的地址放在環(huán)形的共享緩沖區(qū)中。內(nèi)存映射把物理設(shè)備上的存儲(chǔ)器的“物理地址”與內(nèi)核或用戶空間進(jìn)程的“虛擬地址空間”的一段地址建立關(guān)聯(lián)起來(lái)。通過被關(guān)聯(lián)的虛擬地 址,用戶進(jìn)程或者內(nèi)核空間的進(jìn)程實(shí)現(xiàn)對(duì)物理設(shè)備上存儲(chǔ)器的直接存取。所以如果內(nèi)核空 間的虛擬地址和用戶空間的虛擬地址如果共同關(guān)聯(lián)一塊物理空間,那么它們就可以共享這 塊空間,而省去了內(nèi)存拷貝。由于網(wǎng)絡(luò)千兆時(shí)代的到來(lái),使得傳統(tǒng)的數(shù)據(jù)包捕獲遇到了性能上的瓶頸。但是高 速報(bào)文捕獲是入侵檢測(cè)系統(tǒng)、網(wǎng)絡(luò)防火墻、網(wǎng)絡(luò)協(xié)議分析、高性能路由器、高性能通信系統(tǒng) 以及其它網(wǎng)絡(luò)監(jiān)視系統(tǒng)充分發(fā)揮其性能的前提。
發(fā)明內(nèi)容
發(fā)明目的本發(fā)明目的是在千兆網(wǎng)絡(luò)環(huán)境下,針對(duì)目前數(shù)據(jù)包捕獲技術(shù)遇到的性能上的瓶頸 問題提出一種Linux環(huán)境下基于RT8110千兆網(wǎng)卡的數(shù)據(jù)包高速捕獲方法。技術(shù)方案本發(fā)明為實(shí)現(xiàn)上述目的,采用如下技術(shù)方案一種基于Linux的底層數(shù)據(jù)包的高速捕獲方法,包括準(zhǔn)備步驟和工作步驟(一)、準(zhǔn)備步驟(I)、修改網(wǎng)卡驅(qū)動(dòng)程序中的中斷處理函數(shù)提交數(shù)據(jù)包部分的響應(yīng)代碼,使修改過 的網(wǎng)卡驅(qū)動(dòng)程序能夠滿足到達(dá)網(wǎng)卡的網(wǎng)絡(luò)數(shù)據(jù)包可以繞過內(nèi)核協(xié)議棧直接轉(zhuǎn)交給后續(xù)構(gòu) 建的虛擬捕獲設(shè)備模塊,供上層協(xié)議分析子系統(tǒng)的用戶空間進(jìn)程獲?。?II)、構(gòu)建虛擬捕獲設(shè)備模塊,向內(nèi)核中注冊(cè)虛擬捕獲設(shè)備模塊實(shí)現(xiàn)內(nèi)存映射,使 內(nèi)核和上層協(xié)議分析子系統(tǒng)的用戶空間的應(yīng)用程序共享內(nèi)存;所述虛擬捕獲設(shè)備模塊包括接收環(huán)、發(fā)送環(huán)、空閑環(huán)和數(shù)據(jù)緩沖區(qū);其中數(shù)據(jù)緩沖區(qū)為在物理上和邏輯上均連續(xù)的鏈表結(jié)構(gòu),用于存放到達(dá)網(wǎng)卡的數(shù)據(jù) 包,以“零拷貝”方式向上層協(xié)議分析子系統(tǒng)的用戶空間提供數(shù)據(jù);接收環(huán)用于上層協(xié)議分析子系統(tǒng)的用戶空間獲取已經(jīng)填充的數(shù)據(jù)緩沖區(qū)結(jié)構(gòu);空閑環(huán)用于將上層協(xié)議分析子系統(tǒng)的用戶空間處理完畢的數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)歸還 給數(shù)據(jù)緩沖區(qū);發(fā)送環(huán)用于將上層協(xié)議分析子系統(tǒng)的用戶空間需要發(fā)送的數(shù)據(jù)填入數(shù)據(jù)緩沖區(qū) 結(jié)構(gòu),然后從網(wǎng)卡發(fā)送出去;(III)、設(shè)置協(xié)議分析接口,用于提供上層協(xié)議分析子系統(tǒng)與虛擬捕獲設(shè)備模塊的 接口,使上層協(xié)議分析子系統(tǒng)對(duì)從虛擬捕獲設(shè)備模塊獲取的底層數(shù)據(jù)包進(jìn)行解析、識(shí)別和 分類等后續(xù)處理;(二)、工作步驟A、初始化虛擬捕獲設(shè)備模塊,并向內(nèi)核注冊(cè)該模塊,計(jì)算接收環(huán)、空閑環(huán)、發(fā)送環(huán) 和緩沖區(qū)數(shù)據(jù)緩沖區(qū)的大小,接收環(huán)、發(fā)送環(huán)、空閑環(huán)及數(shù)據(jù)緩沖區(qū)的大小均為Iinux中頁(yè) 面大小的整數(shù)倍;B、在內(nèi)核空間,為接收環(huán)、發(fā)送環(huán)、空閑環(huán)和數(shù)據(jù)緩沖區(qū)分配內(nèi)存空間,調(diào)用內(nèi)核 函數(shù)將分配的所有內(nèi)存頁(yè)鎖住,使這些內(nèi)存頁(yè)在系統(tǒng)運(yùn)行的過程中不被換出內(nèi)存;
C、將虛擬捕獲設(shè)備模塊的這些內(nèi)存空間全部映射到用戶空間中去;D、在虛擬捕獲設(shè)備模塊中將一個(gè)數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)掛入接收環(huán)中;E、當(dāng)外部網(wǎng)絡(luò)的數(shù)據(jù)包到達(dá)網(wǎng)卡,網(wǎng)卡以中斷或者NAPI方式處理到達(dá)的數(shù)據(jù)包, 然后轉(zhuǎn)交給虛擬捕獲設(shè)備模塊中的數(shù)據(jù)緩沖區(qū),同時(shí)向協(xié)議分析接口發(fā)送信號(hào),告知有數(shù) 據(jù)包到達(dá);
F、虛擬捕獲設(shè)備模塊獲取數(shù)據(jù)包后,將該數(shù)據(jù)包掛入接收環(huán)中的數(shù)據(jù)緩沖區(qū)結(jié) 構(gòu);G、協(xié)議分析接口將數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)包封裝為吐_數(shù)據(jù)緩沖區(qū)結(jié)構(gòu),并將吐_數(shù) 據(jù)緩沖區(qū)轉(zhuǎn)交給上層協(xié)議分析子系統(tǒng)進(jìn)行分析處理;H、上層協(xié)議分析子系統(tǒng)處理完畢后,再通過協(xié)議分析接口將存儲(chǔ)該數(shù)據(jù)包的數(shù)據(jù) 緩沖區(qū)歸還給虛擬捕獲設(shè)備模塊的空閑環(huán);同時(shí)將需要發(fā)送的數(shù)據(jù)發(fā)送給發(fā)送環(huán);I、發(fā)送環(huán)將H步驟所述需要發(fā)送的數(shù)據(jù)填入數(shù)據(jù)緩沖區(qū)結(jié)構(gòu),然后從網(wǎng)卡發(fā)送出去。本發(fā)明的基于Linux的底層數(shù)據(jù)包的高速捕獲方法中在內(nèi)核為虛擬捕獲設(shè)備模 塊分配內(nèi)存空間時(shí),數(shù)據(jù)緩沖區(qū)組織成鏈表的形式,數(shù)據(jù)緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)中存放該片內(nèi)存 的內(nèi)核空間首地址,網(wǎng)卡驅(qū)動(dòng)程序可以直接通過物理地址中存放的內(nèi)核空間首地址直接訪 問該片內(nèi)存或者從鏈表的頭結(jié)點(diǎn)開始就可以訪問該片緩沖區(qū)。本發(fā)明的基于Linux的底層數(shù)據(jù)包的高速捕獲方法中在所述(III)步驟設(shè)置協(xié)議 分析接口時(shí)設(shè)置5個(gè)鏈表存放不同層次的注冊(cè)函數(shù),分別是應(yīng)用層功能分析函數(shù)、IP層功 能分析函數(shù)、TCP功能分析函數(shù)、數(shù)據(jù)鏈路層功能分析函數(shù)、附加功能函數(shù);系統(tǒng)初始化邏 輯層對(duì)應(yīng)的鏈表后,當(dāng)有數(shù)據(jù)包到達(dá)時(shí),上層協(xié)議分析子系統(tǒng)會(huì)通過協(xié)議分析接口逐個(gè)調(diào) 用5個(gè)鏈表中已經(jīng)存在的注冊(cè)函數(shù),以此完成協(xié)議分析與處理;如果數(shù)據(jù)是應(yīng)用層數(shù)據(jù),則 調(diào)用應(yīng)用層功能分析函數(shù);如果數(shù)據(jù)來(lái)自網(wǎng)絡(luò)層,則調(diào)用IP層功能分析函數(shù);如果數(shù)據(jù)有 TCP包頭部分,則調(diào)用TCP功能分析函數(shù);如果數(shù)據(jù)是數(shù)據(jù)鏈路層,則調(diào)用數(shù)據(jù)鏈路層功能 分析函數(shù);如果數(shù)據(jù)包含上述以外部分,則調(diào)用附加功能函數(shù)。本發(fā)明的基于Linux的底層數(shù)據(jù)包的高速捕獲方法中的網(wǎng)卡為RT8110千兆網(wǎng)卡。有益效果采用本發(fā)明,可以在千兆網(wǎng)絡(luò)環(huán)境下,高速獲取經(jīng)過網(wǎng)卡的原始數(shù)據(jù)包,可以克服 傳統(tǒng)的數(shù)據(jù)包捕獲技術(shù)的弊端,提高獲取效率。
圖1是本發(fā)明在整個(gè)系統(tǒng)中的位置。圖2是本發(fā)明在整個(gè)系統(tǒng)中的邏輯連接圖。圖3是本發(fā)明方法的數(shù)據(jù)流圖。圖4是本發(fā)明的修改后的網(wǎng)卡驅(qū)動(dòng)程序工作流程圖。
圖5是本發(fā)明的VUKM模塊數(shù)據(jù)流圖。圖6是本發(fā)明的VUKM模塊初始化流程圖。圖7是本發(fā)明的協(xié)議分析接口數(shù)據(jù)流圖。圖8是本發(fā)明的注冊(cè)函數(shù)組織形式示意圖。
圖9是本發(fā)明的協(xié)議分析接口初始化流程圖。圖10是本發(fā)明的最終測(cè)試結(jié)果。
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說(shuō)明從圖1和圖2所示的結(jié)構(gòu)框圖中,可以看出本發(fā)明,即底層數(shù)據(jù)包捕獲系統(tǒng)在整個(gè) DFI樣本獲取平臺(tái)中的位置。圖1中的外部網(wǎng)絡(luò)數(shù)據(jù)包到達(dá)網(wǎng)卡后,經(jīng)網(wǎng)卡驅(qū)動(dòng)程序進(jìn)入 Linux內(nèi)核,然后修改后的網(wǎng)卡驅(qū)動(dòng)程序?qū)⒂删W(wǎng)卡捕獲的網(wǎng)絡(luò)數(shù)據(jù)包轉(zhuǎn)交給虛擬捕獲設(shè)備 模塊(以下簡(jiǎn)稱VUKM模塊),以實(shí)現(xiàn)內(nèi)核空間和用戶空間的數(shù)據(jù)共享,最后處于上層的協(xié)議 分析接口將網(wǎng)絡(luò)數(shù)據(jù)包從VUKM模塊提取并轉(zhuǎn)交給用戶空間的協(xié)議分析子系統(tǒng),然后協(xié)議 分析子系統(tǒng)對(duì)網(wǎng)絡(luò)數(shù)據(jù)流進(jìn)行解析、識(shí)別和分類,并打上相應(yīng)的tag值傳遞給后續(xù)Filter 模塊和Wrapper相結(jié)合的特征選擇模塊,去除冗余和類別不相關(guān)的特征,得到最優(yōu)特征子 集。如圖2所示,協(xié)議識(shí)別和特征選擇步驟不是本發(fā)明的重點(diǎn),是已有技術(shù)在此不做贅述, 而底層數(shù)據(jù)包的捕獲是本發(fā)明的重點(diǎn)內(nèi)容,現(xiàn)分別詳細(xì)敘述底層數(shù)據(jù)包捕獲系統(tǒng)的工作流 程1.修改后的網(wǎng)卡驅(qū)動(dòng)程序圖3所示為底層數(shù)據(jù)包捕獲平臺(tái)數(shù)據(jù)流圖,外部網(wǎng)絡(luò)的數(shù)據(jù)包到達(dá)網(wǎng)卡,網(wǎng)卡以 中斷或者NAPI方式處理到達(dá)的數(shù)據(jù)包,然后并不交給內(nèi)核協(xié)議棧處理,而是轉(zhuǎn)交給VUKM模 塊提供的緩沖區(qū),同時(shí)向協(xié)議分析接口發(fā)送SI⑶SRl信號(hào),告知有數(shù)據(jù)包到達(dá)。RT8110網(wǎng)卡驅(qū)動(dòng)程序是Linux自帶的網(wǎng)卡驅(qū)動(dòng)程序,并且支持NAPI技術(shù)(Linux 由內(nèi)核版本2. 4. 23起開始支持NAPI技術(shù))。當(dāng)有數(shù)據(jù)包到達(dá)網(wǎng)卡時(shí),其網(wǎng)卡驅(qū)動(dòng)程序工作 流程如下NAPI方式的流程中斷處理函數(shù)中直接調(diào)用_nettif_rX_SChedule,并添加該設(shè) 備到POLL處理隊(duì)列中,且開發(fā)軟中斷。此時(shí)軟中斷處理函數(shù)net_rX_acti0n()對(duì)每個(gè)設(shè) 備進(jìn)行配額等計(jì)算后,調(diào)用dev- > poll ()函數(shù)(本驅(qū)動(dòng)中dev- > poll實(shí)現(xiàn)為rtl8110_ poll),進(jìn)行輪詢操作。該函數(shù)實(shí)際調(diào)用的為中斷處理函數(shù)rtl8110_rX_interrupt(),而 在中斷處理函數(shù)rtl8110_rx_interrupt()中調(diào)用宏rtl8110_rx_sk,該宏將調(diào)用netif_ receive_skb ()函數(shù)完成最后的提交操作。Ν0Ν_ΝΑΡΙ方式的流程中斷處理函數(shù)rtl8110_interrupt()作一些必要的處理 后,調(diào)用rtl8110_rx_interrupt,而該中斷處理函數(shù)將包從網(wǎng)卡DMA到內(nèi)存BD環(huán),再調(diào)用 rtl8110_rx_skb,而rtl8110_rx_skb將調(diào)用netif_rx添加到接收隊(duì)列(該隊(duì)列中的數(shù)據(jù) 包由軟中斷處理函數(shù)net_rx_action())處理。軟中斷處理函數(shù)net_rx_action()調(diào)用 dev- > poll (在 Ν0Ν_ΝΑΡΙ 模式下,dev- > poll 為 process_backlog ()函數(shù)),而 process_ backlog ()函數(shù)則調(diào)用netif_receive_skb完成后最后的提交操作。RT8110網(wǎng)卡采用了 NAPI技術(shù),在RT8110網(wǎng)卡驅(qū)動(dòng)程序中無(wú)論以何種方式提交數(shù) 據(jù)包,其操作都是在rtl8110_rx_interrupt()函數(shù)中實(shí)現(xiàn)的,而中斷處理函數(shù)rtl8110_ rx_interrupt ()主要功能是通過 netifxO 函數(shù)或 netif_receive_skb ()函數(shù)將 DMA 緩 存中的數(shù)據(jù)幀以skb結(jié)構(gòu)向上層提交。因此我們只需要修改中斷處理函數(shù)rtl8110_rx_ interrupt ()提交數(shù)據(jù)包部分的響應(yīng)代碼。為了修改RT8110網(wǎng)卡驅(qū)動(dòng)程序,
需要在該驅(qū)動(dòng)程序中添加以下代碼if(vukm dev state) {Vukm clean 數(shù)據(jù)緩沖區(qū) of rxfreebd();Vukm數(shù)據(jù)緩沖區(qū)=vukm malloc數(shù)據(jù)緩沖區(qū)f(); If (vukm數(shù)據(jù)緩沖區(qū)){Memcpy (vukm 數(shù)據(jù)緩沖區(qū)-> packet, skb- > data, pkt size);Vukm insert 數(shù)據(jù)緩沖區(qū) to rxbd (vukm 數(shù)據(jù)緩沖區(qū),pkt size);}Else{Printk (KERN DEBUG” nsi vukm :No Empty 數(shù)據(jù)緩沖區(qū) fer ! \n”);}}修改后的網(wǎng)卡驅(qū)動(dòng)程序可以將網(wǎng)絡(luò)數(shù)據(jù)包繞過內(nèi)核協(xié)議棧直接轉(zhuǎn)交給VUKM模 塊,但上段代碼需要首先作一些同步操作,然后將數(shù)據(jù)包轉(zhuǎn)交給VUKM模塊中的函數(shù)vukm_ insert數(shù)據(jù)緩沖區(qū)_to_rXbd(),它的主要功能是將一個(gè)數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)掛入接收環(huán)中。 圖4為修改后的網(wǎng)卡驅(qū)動(dòng)程序工作流程圖。2.構(gòu)建VUMK模塊圖5為VUKM模塊數(shù)據(jù)流圖,VUKM模塊從修改后的網(wǎng)卡驅(qū)動(dòng)程序獲取網(wǎng)絡(luò)數(shù)據(jù)包 后,將該數(shù)據(jù)包掛入接收環(huán),然后再將數(shù)據(jù)包發(fā)送給協(xié)議分析接口,協(xié)議分析接口在處理完 相應(yīng)的網(wǎng)絡(luò)數(shù)據(jù)包后,將存儲(chǔ)該數(shù)據(jù)包的數(shù)據(jù)緩沖區(qū)f歸還給VUKM模塊的空閑環(huán)?!傲憧?貝”實(shí)現(xiàn)的關(guān)鍵就是環(huán)結(jié)構(gòu),而數(shù)據(jù)包則存放在數(shù)據(jù)緩沖區(qū)中,該緩沖區(qū)是在內(nèi)核中分配 的,該結(jié)構(gòu)的大小定位2K—個(gè)。為了盡可能地減少內(nèi)存碎片,因此本模塊采用事先申請(qǐng)好 的內(nèi)存。在內(nèi)核空間,用vmallocO為接收環(huán)、發(fā)送環(huán)、空閑環(huán)和數(shù)據(jù)緩沖區(qū)(接收環(huán)、發(fā)送 環(huán)、空閑環(huán)及數(shù)據(jù)緩沖區(qū)的大小均為Iinux中頁(yè)面大小的整數(shù)倍)分配內(nèi)存空間,vukm模 塊將這些內(nèi)存全部映射到用戶空間中去。圖6為VUKM模塊初始化流程圖,在Linux系統(tǒng)啟動(dòng)的過程中,VUKM模塊被初始化, 并向內(nèi)核注冊(cè)該模塊設(shè)備,并開始計(jì)算和分配接收環(huán)、空閑環(huán)、發(fā)送環(huán)和緩沖區(qū)數(shù)據(jù)緩沖區(qū) 的大小。并且調(diào)用內(nèi)核提供的set_bit()函數(shù)和atomicjncO函數(shù)將分配的所有內(nèi)存頁(yè) 鎖住,使這些內(nèi)存頁(yè)在系統(tǒng)運(yùn)行的過程中不被換出內(nèi)存,緩沖區(qū)數(shù)據(jù)緩沖區(qū)被組織成物理 上和邏輯上均連續(xù)的鏈表結(jié)構(gòu),然后以“零拷貝”方式向上層提供數(shù)據(jù)。Vukm模塊初始化函 數(shù)為 vukm_init ()。通?!傲憧截悺狈绞降膶?shí)現(xiàn)是在用戶空間分配內(nèi)存空間作為緩沖區(qū),網(wǎng)卡若要訪問 該緩沖區(qū),則是通過在VUKM模塊中加入為用戶緩沖區(qū)定義的用戶物理地址映射表來(lái)實(shí)現(xiàn) 的。而本發(fā)明的數(shù)據(jù)包捕獲平臺(tái)的VUKM模塊改為在內(nèi)核空間分配內(nèi)存(鎖住該片內(nèi)存,防 止換出),并且組織成鏈表的形式,緩沖區(qū)數(shù)據(jù)緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)中的kaddr項(xiàng)存放該片內(nèi)存 的內(nèi)核空間首地址,網(wǎng)卡驅(qū)動(dòng)程序可以直接通過kaddr中存放的內(nèi)核空間首地址直接訪問 該片內(nèi)存或者網(wǎng)卡從鏈表的頭結(jié)點(diǎn)開始就可以訪問該片緩沖區(qū)。Linux系統(tǒng)中,處于用戶態(tài)的應(yīng)用程序由于權(quán)限的設(shè)置是無(wú)法訪問處于內(nèi)核態(tài)數(shù) 據(jù)的。但內(nèi)存映射機(jī)制為很好地解決了用戶態(tài)的應(yīng)用程序無(wú)權(quán)限訪問內(nèi)核態(tài)數(shù)據(jù)的問題, 它使得用戶態(tài)和內(nèi)核態(tài)共享一片內(nèi)存區(qū)域,到達(dá)網(wǎng)卡的數(shù)據(jù)包直接被傳遞到位于該片共享內(nèi)存區(qū)域的數(shù)據(jù)緩沖區(qū),用戶態(tài)應(yīng)用程序就可以從數(shù)據(jù)緩沖區(qū)中取走數(shù)據(jù)。3.協(xié)議分析接口設(shè)置圖7為協(xié)議分析接口數(shù)據(jù)流圖,內(nèi)核中通過注冊(cè)VUKM模塊實(shí)現(xiàn)內(nèi)存映射,從而實(shí)現(xiàn)了內(nèi)核態(tài)和用戶態(tài)的應(yīng)用程序共享內(nèi)存,協(xié)議分析接口則實(shí)現(xiàn)了數(shù)據(jù)包從網(wǎng)卡到協(xié)議分 析子系統(tǒng)的機(jī)制。該接口將數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)包封裝為吐_數(shù)據(jù)緩沖區(qū)結(jié)構(gòu),并將吐_數(shù) 據(jù)緩沖區(qū)轉(zhuǎn)交給上層的協(xié)議分析子系統(tǒng)提供的注冊(cè)函數(shù)進(jìn)行分析處理,完畢后,將存儲(chǔ)數(shù) 據(jù)包的數(shù)據(jù)緩沖區(qū)還給VUKM模塊。在底層數(shù)據(jù)捕獲平臺(tái)中,協(xié)議分析接口則實(shí)現(xiàn)了數(shù)據(jù)包 從網(wǎng)卡到協(xié)議分析子系統(tǒng)的傳輸機(jī)制,協(xié)議分析子系統(tǒng)需要一個(gè)統(tǒng)一的開發(fā)接口,因此以 注冊(cè)函數(shù)的方式為上層提供這個(gè)接口,我們?cè)O(shè)置了 5個(gè)鏈表存放不同層次的注冊(cè)函數(shù)。圖8為本發(fā)明注冊(cè)函數(shù)組織形式示意圖,在本系統(tǒng)中用于注冊(cè)的函數(shù)為fimcmocL reg(),該函數(shù)根據(jù)傳入的形參wfunlevel的值,確定regfunc ()函數(shù)應(yīng)該加入哪一個(gè)鏈表 中,當(dāng)有數(shù)據(jù)包到達(dá)后,會(huì)逐個(gè)調(diào)用五個(gè)鏈表中已經(jīng)存在的注冊(cè)函數(shù),以此完成協(xié)議分析與 處理。圖9為協(xié)議分析接口的初始化流程圖,首先系統(tǒng)初始化,然后系統(tǒng)調(diào)用mod_Call_ initO函數(shù),并且初始化5個(gè)邏輯層對(duì)應(yīng)的鏈表,協(xié)議分析子系統(tǒng)只需在初始化時(shí)調(diào)用 mod_call_reg()函數(shù)注冊(cè)各回調(diào)函數(shù)。如果用戶輸入“S”命令,則開始初始化協(xié)議分析子 系統(tǒng),等待接收數(shù)據(jù)包;如果用戶輸入“P”命令,則打印所有已注冊(cè)函數(shù)信息;如果用戶輸 入“Q”命令,則程序結(jié)束。本發(fā)明具有以下有益效果采用本發(fā)明,可以在千兆網(wǎng)絡(luò)環(huán)境下,高速的捕獲通過 網(wǎng)卡的原始數(shù)據(jù)包,可以克服傳統(tǒng)的數(shù)據(jù)包捕獲技術(shù)帶來(lái)的性能上的瓶頸和發(fā)生中斷淹沒 的弊端,提高系統(tǒng)的效率。4.功能及性能測(cè)試我們?cè)谡鎸?shí)網(wǎng)絡(luò)環(huán)境中測(cè)試該方法捕獲數(shù)據(jù)包的性能。圖10為本方法的測(cè)試結(jié) 果,0Xc3c6d00b為內(nèi)存地址,OOld為在該片內(nèi)存中的數(shù)據(jù)包,可見,一個(gè)網(wǎng)絡(luò)流在內(nèi)存中式 連續(xù)存儲(chǔ)的。0xc3c6d00b、0xc3c6d01b、0xc3c6d02b表示一個(gè)網(wǎng)絡(luò)流在該片內(nèi)存中的連續(xù)存 儲(chǔ)位置,其后對(duì)應(yīng)的是在該片內(nèi)存中存儲(chǔ)的原始網(wǎng)絡(luò)數(shù)據(jù)包。表1為該數(shù)據(jù)包捕獲系統(tǒng)在各種報(bào)文長(zhǎng)度下系統(tǒng)捕獲性能測(cè)試結(jié)果。定義如下性能指標(biāo)臨界發(fā)包間隔(ns)按一定時(shí)間間隔發(fā)送數(shù)據(jù)包,當(dāng)兩個(gè)相鄰數(shù)據(jù)包的發(fā)送時(shí)間 間隔達(dá)到該值時(shí),系統(tǒng)會(huì)產(chǎn)生丟包現(xiàn)象。最大速率(p/s)系統(tǒng)在不發(fā)生丟包的前提下,每秒能捕獲的數(shù)據(jù)包最大個(gè)數(shù)目。最大流量(bps)系統(tǒng)在不發(fā)生丟包的前提下,每秒能捕獲的數(shù)據(jù)報(bào)文總長(zhǎng)度。表1系統(tǒng)測(cè)試總結(jié)表 可見系統(tǒng)在報(bào)文長(zhǎng)度為128B的時(shí)候趨于穩(wěn)定,接近網(wǎng)絡(luò)千兆線速。下面從整體上描述本發(fā)明的步驟,具體如下步驟A、修改網(wǎng)卡驅(qū)動(dòng)程序,使修改過的網(wǎng)卡驅(qū)動(dòng)程序能夠滿足到達(dá)網(wǎng)卡的網(wǎng)絡(luò) 數(shù)據(jù)包可以繞過內(nèi)核協(xié)議棧直接轉(zhuǎn)交給后續(xù)構(gòu)建的虛擬捕獲設(shè)備模塊,供用戶空間進(jìn)程獲 ??;RT8110網(wǎng)卡采用了 NAPI (新應(yīng)用程序接口)技術(shù),在RT8110網(wǎng)卡驅(qū)動(dòng)程序中無(wú)論以何 種方式提交數(shù)據(jù)包,其操作都是在中斷處理函數(shù)中實(shí)現(xiàn)的,而中斷處理函數(shù)的主要功能是 將DMA緩存中的數(shù)據(jù)幀以skb結(jié)構(gòu)向上層提交。因此只需要修改中斷處理函數(shù)提交數(shù)據(jù)包 部分的響應(yīng)代碼,就可以達(dá)到目的第一步,如果構(gòu)建的虛擬捕獲設(shè)備模塊處于可用的開啟狀態(tài),則將接收環(huán)上的數(shù) 據(jù)緩沖區(qū)結(jié)構(gòu)全部歸還到數(shù)據(jù)緩存鏈表中,為虛擬捕獲設(shè)備模塊分配內(nèi)存空間。第二步,如果虛擬設(shè)備模塊的內(nèi)存分配成功,則將到達(dá)網(wǎng)卡的數(shù)據(jù)包直接送達(dá)已 經(jīng)分配好的內(nèi)存空間,并且將一個(gè)數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)掛入接收環(huán)上。第三部,如果虛擬設(shè)備模塊的內(nèi)存分配不成功,則打印沒有多余的內(nèi)存分配。步驟B、構(gòu)建虛擬捕獲設(shè)備模塊其作用在于使到達(dá)網(wǎng)卡的網(wǎng)絡(luò)數(shù)據(jù)包可以繞過 內(nèi)核協(xié)議棧并實(shí)現(xiàn)用戶空間的用戶程序?qū)@些數(shù)據(jù)包的直接訪問,由內(nèi)核空間高速傳遞給 上層協(xié)議分析處理接口。主要實(shí)現(xiàn)是通過向內(nèi)核中注冊(cè)虛擬捕獲設(shè)備模塊實(shí)現(xiàn)內(nèi)存映射, 從而達(dá)到內(nèi)核和用戶空間的應(yīng)用程序共享內(nèi)存,提高數(shù)據(jù)包傳輸效率。所述虛擬捕獲設(shè)備模塊包括接收環(huán)、發(fā)送環(huán)、空閑環(huán)和存放數(shù)據(jù)包的數(shù)據(jù)緩沖 區(qū);接收環(huán)功能修改后的網(wǎng)卡驅(qū)動(dòng)程序?qū)⑦_(dá)到網(wǎng)卡的數(shù)據(jù)包放入數(shù)據(jù)緩沖區(qū)中,然 后將數(shù)據(jù)緩沖區(qū)掛入接收環(huán)上,由于虛擬捕獲設(shè)備模塊使得用戶空間和內(nèi)核空間可以共享 內(nèi)存,所以用戶空間可以直接從接收環(huán)中獲取已經(jīng)填充的數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)??臻e環(huán)功能用戶空間將已經(jīng)處理完畢的數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)掛入空閑環(huán),而空閑環(huán) 將掛入的數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)歸還給緩沖區(qū),此時(shí)如果有網(wǎng)絡(luò)數(shù)據(jù)包達(dá)到網(wǎng)卡,則修改后的網(wǎng) 卡驅(qū)動(dòng)程序可以再次獲取已經(jīng)歸還的數(shù)據(jù)緩沖區(qū)結(jié)構(gòu),并填入數(shù)據(jù)包。發(fā)送環(huán)功能如果用戶空間有數(shù)據(jù)需要從網(wǎng)卡發(fā)送出去,則將需要發(fā)送的數(shù)據(jù)填 入數(shù)據(jù)緩沖區(qū)結(jié)構(gòu),然后掛入發(fā)送環(huán)上,通過發(fā)送環(huán)從網(wǎng)卡發(fā)送出去。第一步,網(wǎng)卡將數(shù)據(jù)直接傳遞給共享的數(shù)據(jù)緩沖區(qū),并使網(wǎng)卡和上層協(xié)議分析子 系統(tǒng)可以無(wú)沖突地通過接收環(huán)和空閑環(huán)訪問共享的數(shù)據(jù)緩沖區(qū);第二步,使位于用戶空間的應(yīng)用程序能訪問接收環(huán)、發(fā)送環(huán)、空閑環(huán)和數(shù)據(jù)緩沖區(qū);Linux系統(tǒng)啟動(dòng)的過程中,虛擬捕獲設(shè)備模塊被初始化,并向內(nèi)核注冊(cè)該模塊設(shè) 備,并且開始計(jì)算和分配接收環(huán)、發(fā)送環(huán)、空閑環(huán)和緩沖區(qū)數(shù)據(jù)緩沖區(qū)的大小。緩沖區(qū)數(shù)據(jù) 緩沖區(qū)被組織成物理上和邏輯上均連續(xù)的鏈表結(jié)構(gòu),然后以“零拷貝”方式向上層提供數(shù) 據(jù)。網(wǎng)卡若要訪問該緩沖區(qū),則是通過在虛擬捕獲設(shè)備模塊中加入為用戶緩沖區(qū)定義的用 戶物理地址映射表來(lái)實(shí)現(xiàn)的。緩沖區(qū)數(shù)據(jù)緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)中的kaddr項(xiàng)存放該片內(nèi)存的內(nèi) 核空間首地址,網(wǎng)卡驅(qū)動(dòng)程序可以直接通過kaddr中存放的內(nèi)核空間首地址直接訪問該片 內(nèi)存或者網(wǎng)卡從鏈表的頭結(jié)點(diǎn)開始就可以訪問該片緩沖區(qū)。用戶空間的應(yīng)用程序由于權(quán)限的設(shè)置是無(wú)法訪問處理內(nèi)核態(tài)數(shù)據(jù)的。但內(nèi)存映射 機(jī)制很好地解決了用戶態(tài)的應(yīng)用程序無(wú)權(quán)限訪問內(nèi)核態(tài)數(shù)據(jù)的問題,它使得用戶態(tài)和內(nèi)核 態(tài)共享一片內(nèi)存區(qū)域,到達(dá)網(wǎng)卡的數(shù)據(jù)包直接被傳遞到位于該片共享內(nèi)存區(qū)域的數(shù)據(jù)緩沖 區(qū)中,用戶態(tài)的應(yīng)用程序就可以從數(shù)據(jù)緩沖區(qū)取走數(shù)據(jù)。步驟C、設(shè)置協(xié)議分析接口 協(xié)議分析接口提供上層協(xié)議分析子系統(tǒng)(DPI系統(tǒng)) 與底層數(shù)據(jù)捕獲系統(tǒng)的接口,位于用戶端的應(yīng)用程序讀數(shù)據(jù)時(shí)和網(wǎng)卡DMA傳輸數(shù)據(jù)時(shí)訪問 同一塊緩存區(qū)域。第一步,協(xié)議分析子系統(tǒng)需要一個(gè)統(tǒng)一的開發(fā)接口,因此以注冊(cè)函數(shù)的方式為上 層提供這個(gè)接口。系統(tǒng)初始化,然后系統(tǒng)初始化邏輯層對(duì)應(yīng)的鏈表。第二步,等待用戶輸入,如果用戶輸入“S”(開始)命令,則開始初始化協(xié)議分析子 系統(tǒng),等待接收數(shù)據(jù)包;如果用戶輸入“P”(停止)命令,則打印所有已注冊(cè)函數(shù)信息,完畢 后返回;如果用戶輸入“Q”(退出)命令,則程序結(jié)束。第三步,協(xié)議分析接口將數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)封裝為sk_數(shù)據(jù)緩沖區(qū)f結(jié)構(gòu),并將 該結(jié)構(gòu)轉(zhuǎn)交給上層協(xié)議分析子系統(tǒng)提供的注冊(cè)函數(shù)進(jìn)行分析處理,完畢后,將存儲(chǔ)數(shù)據(jù)包 的數(shù)據(jù)緩沖區(qū)歸還給虛擬捕獲設(shè)備模塊。
權(quán)利要求
一種基于Linux的底層數(shù)據(jù)包的高速捕獲方法,其特征在于包括準(zhǔn)備步驟和工作步驟(一)、準(zhǔn)備步驟(I)、修改網(wǎng)卡驅(qū)動(dòng)程序中的中斷處理函數(shù)提交數(shù)據(jù)包部分的響應(yīng)代碼,使修改過的網(wǎng)卡驅(qū)動(dòng)程序能夠滿足到達(dá)網(wǎng)卡的網(wǎng)絡(luò)數(shù)據(jù)包可以繞過內(nèi)核協(xié)議棧直接轉(zhuǎn)交給后續(xù)構(gòu)建的虛擬捕獲設(shè)備模塊,供上層協(xié)議分析子系統(tǒng)的用戶空間進(jìn)程獲取;(II)、構(gòu)建虛擬捕獲設(shè)備模塊,向內(nèi)核中注冊(cè)虛擬捕獲設(shè)備模塊實(shí)現(xiàn)內(nèi)存映射,使內(nèi)核和上層協(xié)議分析子系統(tǒng)的用戶空間的應(yīng)用程序共享內(nèi)存;所述虛擬捕獲設(shè)備模塊包括接收環(huán)、發(fā)送環(huán)、空閑環(huán)和數(shù)據(jù)緩沖區(qū);其中數(shù)據(jù)緩沖區(qū)為在物理上和邏輯上均連續(xù)的鏈表結(jié)構(gòu),用于存放到達(dá)網(wǎng)卡的數(shù)據(jù)包,以“零拷貝”方式向上層協(xié)議分析子系統(tǒng)的用戶空間提供數(shù)據(jù);接收環(huán)用于上層協(xié)議分析子系統(tǒng)的用戶空間獲取已經(jīng)填充的數(shù)據(jù)緩沖區(qū)結(jié)構(gòu);空閑環(huán)用于將上層協(xié)議分析子系統(tǒng)的用戶空間處理完畢的數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)歸還給數(shù)據(jù)緩沖區(qū);發(fā)送環(huán)用于將上層協(xié)議分析子系統(tǒng)的用戶空間需要發(fā)送的數(shù)據(jù)填入數(shù)據(jù)緩沖區(qū)結(jié)構(gòu),然后從網(wǎng)卡發(fā)送出去;(III)、設(shè)置協(xié)議分析接口,用于提供上層協(xié)議分析子系統(tǒng)與虛擬捕獲設(shè)備模塊的接口,使上層協(xié)議分析子系統(tǒng)對(duì)從虛擬捕獲設(shè)備模塊獲取的底層數(shù)據(jù)包進(jìn)行解析、識(shí)別和分類等后續(xù)處理;(二)、工作步驟A、初始化虛擬捕獲設(shè)備模塊,并向內(nèi)核注冊(cè)該模塊,計(jì)算接收環(huán)、空閑環(huán)、發(fā)送環(huán)和緩沖區(qū)數(shù)據(jù)緩沖區(qū)的大小,接收環(huán)、發(fā)送環(huán)、空閑環(huán)及數(shù)據(jù)緩沖區(qū)的大小均為linux中頁(yè)面大小的整數(shù)倍;B、在內(nèi)核空間,為接收環(huán)、發(fā)送環(huán)、空閑環(huán)和數(shù)據(jù)緩沖區(qū)分配內(nèi)存空間,調(diào)用內(nèi)核函數(shù)將分配的所有內(nèi)存頁(yè)鎖住,使這些內(nèi)存頁(yè)在系統(tǒng)運(yùn)行的過程中不被換出內(nèi)存;C、將虛擬捕獲設(shè)備模塊的這些內(nèi)存空間全部映射到用戶空間中去;D、在虛擬捕獲設(shè)備模塊中將一個(gè)數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)掛入接收環(huán)中;E、當(dāng)外部網(wǎng)絡(luò)的數(shù)據(jù)包到達(dá)網(wǎng)卡,網(wǎng)卡以中斷或者NAPI方式處理到達(dá)的數(shù)據(jù)包,然后轉(zhuǎn)交給虛擬捕獲設(shè)備模塊中的數(shù)據(jù)緩沖區(qū),同時(shí)向協(xié)議分析接口發(fā)送信號(hào),告知有數(shù)據(jù)包到達(dá);F、虛擬捕獲設(shè)備模塊獲取數(shù)據(jù)包后,將該數(shù)據(jù)包掛入接收環(huán)中的數(shù)據(jù)緩沖區(qū)結(jié)構(gòu);G、協(xié)議分析接口將數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)包封裝為sk_數(shù)據(jù)緩沖區(qū)結(jié)構(gòu),并將sk_數(shù)據(jù)緩沖區(qū)轉(zhuǎn)交給上層協(xié)議分析子系統(tǒng)進(jìn)行分析處理;H、上層協(xié)議分析子系統(tǒng)處理完畢后,再通過協(xié)議分析接口將存儲(chǔ)該數(shù)據(jù)包的數(shù)據(jù)緩沖區(qū)歸還給虛擬捕獲設(shè)備模塊的空閑環(huán);同時(shí)將需要發(fā)送的數(shù)據(jù)發(fā)送給發(fā)送環(huán);I、發(fā)送環(huán)將H步驟所述需要發(fā)送的數(shù)據(jù)填入數(shù)據(jù)緩沖區(qū)結(jié)構(gòu),然后從網(wǎng)卡發(fā)送出去。
2.根據(jù)權(quán)利要求1所述的基于Linux的底層數(shù)據(jù)包的高速捕獲方法,其特征在于在內(nèi)核為虛擬捕獲設(shè)備模塊分配內(nèi)存空間時(shí),數(shù)據(jù)緩沖區(qū)組織成鏈表的形式,數(shù)據(jù)緩沖區(qū)數(shù) 據(jù)結(jié)構(gòu)中存放該片內(nèi)存的內(nèi)核空間首地址,網(wǎng)卡驅(qū)動(dòng)程序可以直接通過物理地址中存放的內(nèi)核空間首地址直接訪問該片內(nèi)存或者從鏈表的頭結(jié)點(diǎn)開始就可以訪問該片緩沖區(qū)。
3.根據(jù)權(quán)利要求1所述的基于Linux的底層數(shù)據(jù)包的高速捕獲方法,其特征在于在所述(III)步驟設(shè)置協(xié)議分析接口時(shí)設(shè)置5個(gè)鏈表存放不同層次的注冊(cè)函數(shù),分別是應(yīng)用 層功能分析函數(shù)、IP層功能分析函數(shù)、TCP功能分析函數(shù)、數(shù)據(jù)鏈路層功能分析函數(shù)、附加 功能函數(shù);系統(tǒng)初始化邏輯層對(duì)應(yīng)的鏈表后,當(dāng)有數(shù)據(jù)包到達(dá)時(shí),上層協(xié)議分析子系統(tǒng)會(huì)通 過協(xié)議分析接口逐個(gè)調(diào)用5個(gè)鏈表中已經(jīng)存在的注冊(cè)函數(shù),以此完成協(xié)議分析與處理;如 果數(shù)據(jù)是應(yīng)用層數(shù)據(jù),則調(diào)用應(yīng)用層功能分析函數(shù);如果數(shù)據(jù)來(lái)自網(wǎng)絡(luò)層,則調(diào)用IP層功 能分析函數(shù);如果數(shù)據(jù)有TCP包頭部分,則調(diào)用TCP功能分析函數(shù);如果數(shù)據(jù)是數(shù)據(jù)鏈路 層,則調(diào)用數(shù)據(jù)鏈路層功能分析函數(shù);如果數(shù)據(jù)包含上述以外部分,則調(diào)用附加功能函數(shù)。
4.根據(jù)權(quán)利要求1所述的基于Linux的底層數(shù)據(jù)包的高速捕獲方法,其特征在于所 述網(wǎng)卡為RT8110千兆網(wǎng)卡。
全文摘要
本發(fā)明提供一種基于Linux的底層數(shù)據(jù)包的高速捕獲方法。本發(fā)明通過設(shè)定虛擬捕獲設(shè)備模塊(VUKM模塊)修改網(wǎng)卡驅(qū)動(dòng)程序,使到達(dá)網(wǎng)卡的數(shù)據(jù)包可以繞過內(nèi)核協(xié)議棧直接轉(zhuǎn)交給后續(xù)模塊處理,以實(shí)現(xiàn)用戶空間和內(nèi)核空間的內(nèi)存共享;并由內(nèi)核空間高速傳遞給上層協(xié)議分析處理接口模塊,為上層應(yīng)用程序和網(wǎng)卡無(wú)沖突的訪問VUKM模塊提供一種機(jī)制,對(duì)已捕獲的數(shù)據(jù)包作進(jìn)一步處理,本發(fā)明可以在千兆網(wǎng)絡(luò)環(huán)境下,高速獲取經(jīng)過網(wǎng)卡的原始數(shù)據(jù)包,可以克服傳統(tǒng)的數(shù)據(jù)包捕獲技術(shù)的弊端,提高獲取效率。
文檔編號(hào)H04L12/56GK101841470SQ20101013436
公開日2010年9月22日 申請(qǐng)日期2010年3月29日 優(yōu)先權(quán)日2010年3月29日
發(fā)明者劉榮偉, 孫慶慶, 張春, 王開, 裴文江, 鄭麒麟 申請(qǐng)人:東南大學(xué)