專利名稱:基于Linux內(nèi)核的流量分析方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)網(wǎng)絡(luò)流量分析技術(shù)領(lǐng)域,特別是設(shè)計一種基于Linux內(nèi)核的流量分析方法。
背景技術(shù):
流量指標(biāo)是網(wǎng)絡(luò)運(yùn)維最重要的指標(biāo)之一,是網(wǎng)絡(luò)規(guī)劃設(shè)計、協(xié)議設(shè)計、業(yè)務(wù)部署、流量工程實施、攻擊檢測與故障診斷的基礎(chǔ)。通過網(wǎng)絡(luò)流量的監(jiān)測和分析可以獲得大量網(wǎng)絡(luò)性能信息、網(wǎng)絡(luò)服務(wù)狀況以及網(wǎng)絡(luò)中存在的攻擊或者弱點(diǎn)。通過數(shù)據(jù)包捕獲與協(xié)議分析的被動流量監(jiān)測獲得各個協(xié)議層次的流量指標(biāo),是流量監(jiān)測最常用的方法。
近幾年來,網(wǎng)絡(luò)鏈路速率迅速增長,已經(jīng)開始從Mbit/s邁向Gbit/s,不久的將來可能還會發(fā)展至40Gbit/s甚至Tbit/s。千兆網(wǎng)卡和千兆交換機(jī)已經(jīng)相當(dāng)?shù)谋阋?,幾乎每個新的局域網(wǎng)用戶都會采用此項技術(shù),一個普通的家庭用戶所能夠獲得的帶寬比兩年前一個公司獲得的帶寬還要大。網(wǎng)絡(luò)應(yīng)用的普及與網(wǎng)絡(luò)技術(shù)的發(fā)展,導(dǎo)致網(wǎng)絡(luò)流量也日益龐大,基于數(shù)據(jù)包捕獲的被動流量監(jiān)測分析受到諸多技術(shù)的限制,如PCI(PeripheralComponent Interconnect,外設(shè)部件互連)總線吞吐量、存儲容量、內(nèi)存訪問速度以及磁盤陣列的速率[1],使得滿足低速鏈路流量監(jiān)測分析的傳統(tǒng)被動流量監(jiān)測分析技術(shù)不能適用于更高速率的網(wǎng)絡(luò)環(huán)境,如基于libpcap的流量監(jiān)測分析工具。為了克服操作系統(tǒng)、PCI總線帶寬和系統(tǒng)資源所帶來的性能限制,很多研究人員開始采用網(wǎng)絡(luò)處理器進(jìn)行流量監(jiān)測分析。而采用網(wǎng)絡(luò)處理器往往需要專用的設(shè)備,開發(fā)周期長,大量部署不太現(xiàn)實。
數(shù)據(jù)包捕獲方法是進(jìn)行被動流量監(jiān)測分析最常用的方法。近幾年,也有很多研究人員和硬件生產(chǎn)廠商試圖A通過專用硬件實現(xiàn)被動流量監(jiān)測和分析,如OC3MON及DAG。另外,有關(guān)流量監(jiān)測分析的一些新的研究項目也正在進(jìn)行,如歐洲的SCAMP設(shè)計了一種數(shù)據(jù)包捕獲的體系結(jié)構(gòu);MAGNet則可以進(jìn)行應(yīng)用流的監(jiān)測;CoralReef是由著名的CAIDA組織開發(fā)實現(xiàn)的一種收集和分析Internet被動流量監(jiān)測信息的重要工具之一。
在通用平臺上實現(xiàn)流量監(jiān)測分析仍然是最為常用的方法,如Tcpdump/Libpcap,Sniffer等,其基本原理是捕獲流經(jīng)鏈路或者端口的數(shù)據(jù)包,分析每個數(shù)據(jù)包并獲得流量統(tǒng)計分析結(jié)果。流量分析方法被廣泛應(yīng)用到入侵檢測(snort,Bro),流量分析(ntop,ethereal,tcpflow)系統(tǒng)中。目前大部分的流量分析工具是基于libpcap實現(xiàn)的,能夠提供基本的網(wǎng)絡(luò)鏈路狀況信息,比如鏈路利用率,帶寬,協(xié)議分布等。
Libpcap是可以適用于多種操作系統(tǒng)(如Linux,F(xiàn)reeBSD,Solaris等)的數(shù)據(jù)包捕獲庫,利用該庫可以向開發(fā)人員屏蔽底層網(wǎng)絡(luò)鏈路所采用技術(shù)。Libpcap提供強(qiáng)大的內(nèi)核包過濾器-BPF(Berkeley Packet Filter)。在介紹BPF之前,首先解釋Linux操作系統(tǒng)中網(wǎng)絡(luò)通信的實現(xiàn)。圖1是一個簡單linux系統(tǒng)中數(shù)據(jù)包接收的流向圖,其中包括了BPF的位置。Linux網(wǎng)絡(luò)接口包括四個重要部分網(wǎng)絡(luò)設(shè)備接口、網(wǎng)絡(luò)核心接口、網(wǎng)絡(luò)協(xié)議棧和網(wǎng)絡(luò)socket接口。前兩個部分是實現(xiàn)網(wǎng)絡(luò)通信的基礎(chǔ),也是和本文介紹的流量分析方法密切相關(guān)的。網(wǎng)絡(luò)設(shè)備接口是實現(xiàn)網(wǎng)絡(luò)通信的最關(guān)鍵的部分之一,可以屏蔽底層不同的物理介質(zhì),提供統(tǒng)一的數(shù)據(jù)包發(fā)送/接收接口,如圖1中所示的網(wǎng)絡(luò)設(shè)備(Network Interface)。網(wǎng)絡(luò)核心接口則負(fù)責(zé)從網(wǎng)絡(luò)設(shè)備獲得相應(yīng)的數(shù)據(jù)包并緩存在內(nèi)核中,根據(jù)用戶或者系統(tǒng)缺省注冊的處理函數(shù)進(jìn)行分發(fā)處理,圖1所示的BPF即屬于網(wǎng)絡(luò)核心接口。BPF是基于內(nèi)核的數(shù)據(jù)包過濾器,是進(jìn)行數(shù)據(jù)包捕獲的重要組件之一。BPF被認(rèn)為是Unix中實現(xiàn)數(shù)據(jù)包過濾組件中最好的一種實現(xiàn)[10]。BPF包括兩個主要部分?jǐn)?shù)據(jù)包復(fù)制器和數(shù)據(jù)包過濾器。數(shù)據(jù)包復(fù)制器負(fù)責(zé)從網(wǎng)絡(luò)設(shè)備驅(qū)動獲得網(wǎng)絡(luò)鏈路中數(shù)據(jù)包的備份,并把該備份傳送給數(shù)據(jù)包過濾器。過濾器則根據(jù)過濾規(guī)則決定數(shù)據(jù)包取舍。非常重要的一點(diǎn),BPF只把符合規(guī)則要求的數(shù)據(jù)包傳遞到用戶空間。同時,BPF也支持只把所需要的部分?jǐn)?shù)據(jù)包,如數(shù)據(jù)包的前64字節(jié),傳遞到用戶空間,以降低數(shù)據(jù)包拷貝開銷。舉例來講,對于以太網(wǎng)數(shù)據(jù)包,前64字節(jié)足以滿足對以太網(wǎng)頭與IP/TCP頭的分析。
發(fā)明內(nèi)容
本發(fā)明是一種基于Linux內(nèi)核的流量分析方法,該方法的關(guān)鍵在于其采用了基于Linux內(nèi)核可裝載模式實現(xiàn),以字符設(shè)備方式供用戶空間程序使用,具體內(nèi)容敘述如下1)基于Linux內(nèi)核的流量分析方法在Linux內(nèi)核空間實現(xiàn),并且集成BPF的數(shù)據(jù)包過濾以及網(wǎng)絡(luò)流量分析功能,能夠支持對2-7層100多種協(xié)議數(shù)據(jù)包的分析。其實現(xiàn)方法能夠有效減少內(nèi)存拷貝及系統(tǒng)調(diào)用時間,降低存儲空間的需求,提高流量監(jiān)測分析的效率。附圖1為該方法設(shè)計的系統(tǒng)結(jié)構(gòu)圖。
2)網(wǎng)絡(luò)數(shù)據(jù)包在Linux系統(tǒng)內(nèi)核中的到達(dá)和處理流程可描述如下網(wǎng)卡收到數(shù)據(jù)包即向CPU發(fā)送硬中斷,CPU將把數(shù)據(jù)包從網(wǎng)卡的緩存中取出并在內(nèi)核的Skbuff鏈表中創(chuàng)建新的結(jié)點(diǎn)存儲接收到的數(shù)據(jù)包等待協(xié)議?;蛘咂渌缘墓δ芎瘮?shù)的處理。由于方法在內(nèi)核中完成所有的流量分析功能,只是把分析結(jié)果通過API方式提供給用戶空間程序。而且,待分析的網(wǎng)絡(luò)數(shù)據(jù)包可以直接從內(nèi)核中的Skbuff鏈表中獲得,大大降低了內(nèi)核到用戶空間的內(nèi)存拷貝和系統(tǒng)調(diào)用開銷。
該方法通過直接獲取Skbuff中數(shù)據(jù)包的內(nèi)容,并在內(nèi)核空間實現(xiàn)所有的流量分析功能,包括數(shù)據(jù)包捕獲功能均在內(nèi)核中實現(xiàn)。
3)本發(fā)明的流量分析方法支持兩種級別的流量分析數(shù)據(jù)包級和流(Flow)級。數(shù)據(jù)包級,缺省情況下能夠完成對所有原始數(shù)據(jù)包的協(xié)議分析,并提供200多種協(xié)議分析結(jié)果。這些結(jié)果可以通過方法本身提供的用戶空間可用的接口獲得,主要的分析指標(biāo)包括流量速率(包速率和字節(jié)速率),鏈路利用率,不同層次的協(xié)議分布,包大小分布、包間隔分布以及不同協(xié)議流量速率等。除此之外,還可以根據(jù)不同的流規(guī)則定義實現(xiàn)指定流的監(jiān)測并提供基于流的分析指標(biāo),其中統(tǒng)計指標(biāo)包括流持續(xù)時間的統(tǒng)計分布,流速率,流大小統(tǒng)計分布,并發(fā)流數(shù)量統(tǒng)計分布等;其他詳細(xì)指標(biāo)根據(jù)流規(guī)則定義不同而有所不同,例如出入境流量區(qū)分、特定端口、特定AS域、特定IP地址段、特定服務(wù)的監(jiān)測分析、流量排名前N的IP主機(jī),IP主機(jī)對及流量排名前N的端口和AS域等。
4)支持原始數(shù)據(jù)包的捕獲也是流量分析工具的一個重要功能,因此本方法提供了對一定數(shù)量的原始數(shù)據(jù)包捕獲的功能支持。方法中能夠提供的配置功能、原始數(shù)據(jù)包以及統(tǒng)計分析數(shù)據(jù)的上傳都可以通過設(shè)計的API接口供用戶空間程序使用。并且鑒于BPF(BerkeleyPacket Filter)是一種比較成熟,且被廣泛使用的過濾器,方法中繼承了對BPF的過濾規(guī)則的語法支持。
圖1是Linux系統(tǒng)下數(shù)據(jù)包接收過程流程圖。
圖2是基于內(nèi)核的流量分析方法的系統(tǒng)結(jié)構(gòu)示意圖。
圖3是基于Linux內(nèi)核的流量分析方法流程圖。
具體實施例方式
圖1Linux系統(tǒng)內(nèi)核中數(shù)據(jù)包接收過程的走向圖,首先網(wǎng)卡收到數(shù)據(jù)包會向CPU發(fā)送中斷請求,CPU根據(jù)中斷請求從網(wǎng)卡緩存中獲得到達(dá)的數(shù)據(jù)包,數(shù)據(jù)包經(jīng)由PCI總線傳到內(nèi)核空間,并在Skbuff中創(chuàng)建對應(yīng)數(shù)據(jù)包的結(jié)點(diǎn),最后交給協(xié)議?;蛘哳愃艬PF的基于內(nèi)核的處理模塊處理。所有的處理以及結(jié)果根據(jù)用戶需求通過系統(tǒng)調(diào)用方式和用戶空間程序互通。
圖2基于內(nèi)核的流量分析方法體系結(jié)構(gòu)設(shè)計圖。該方法的所有分析功能均在內(nèi)核中實現(xiàn),并且提供兩種級別數(shù)據(jù)包級和流級的監(jiān)測分析指標(biāo),并支持一定數(shù)量原始數(shù)據(jù)包的捕獲。分析結(jié)果和原始數(shù)據(jù)包都通過API方式提供給用戶空間程序使用。
圖3的基于Linux內(nèi)核的流量分析方法,其步驟如下首先網(wǎng)卡收到數(shù)據(jù)包會向CPU發(fā)送中斷請求,CPU根據(jù)中斷請求從網(wǎng)卡緩存中獲得到達(dá)的數(shù)據(jù)包,數(shù)據(jù)包經(jīng)由PCI總線傳到內(nèi)核空間,并在Skbuff中創(chuàng)建對應(yīng)數(shù)據(jù)包的結(jié)點(diǎn),最后交給協(xié)議棧以及在內(nèi)核中注冊的其他處理網(wǎng)絡(luò)數(shù)據(jù)包處理函數(shù)進(jìn)行處理。
具體步驟為步驟S1,把網(wǎng)卡設(shè)置為混雜模式以獲得所有網(wǎng)絡(luò)數(shù)據(jù)包;
步驟S2,注冊內(nèi)核級網(wǎng)絡(luò)流量分析函數(shù),用來對分析函數(shù)指定的協(xié)議類型進(jìn)行處理,本方法中的流量分析函數(shù)指定的協(xié)議類型為所有以太網(wǎng)類型;步驟S3,配置流量分析參數(shù),使得流量分析函數(shù)能夠分析根據(jù)用戶自定義規(guī)則進(jìn)行分析;步驟S4,如果內(nèi)核空間中的數(shù)據(jù)包內(nèi)核緩存鏈表不為空,則調(diào)用已注冊的流量分析函數(shù)進(jìn)行分析,結(jié)果放在統(tǒng)計結(jié)果緩存和流記錄緩存中;步驟S5,如果模塊接收到用戶空間卸載模塊請求則取消網(wǎng)卡混雜模式并執(zhí)行S6;步驟S6,取消注冊的內(nèi)核級流量分析函數(shù);步驟S7,如果模塊接收到用戶空間獲取分析結(jié)果的請求,則處理請求并返回相應(yīng)結(jié)果。
具體實施例1.以Linux內(nèi)核下的字符設(shè)備驅(qū)動方式實現(xiàn)方法中提到的流量分析功能、配置功能、結(jié)果獲取API。
2.裝載實現(xiàn)流量分析功能的字符設(shè)備驅(qū)動,并根據(jù)提供的字符設(shè)備操作API對內(nèi)核中的流量分析功能進(jìn)行配置并獲取分析結(jié)果。
權(quán)利要求
1.基于Linux內(nèi)核的流量分析方法,其特征在于,該方法完全在Linux內(nèi)核空間實現(xiàn),降低了系統(tǒng)調(diào)用、內(nèi)存拷貝開銷以及PCI總線帶寬的需求。
2.根據(jù)權(quán)利要求1所述的基于Linux內(nèi)核的流量分析方法,其特征在于,該方法通過直接獲取Skbuff中數(shù)據(jù)包的內(nèi)容,并在內(nèi)核空間實現(xiàn)所有的流量分析,包括數(shù)據(jù)包捕獲均在內(nèi)核中實現(xiàn)。
3.根據(jù)權(quán)利要求1所述的基于Linux內(nèi)核的流量分析方法,其特征在于,該方法通過可裝載內(nèi)核模塊方式,以字符設(shè)備方式供用戶空間程序使用。
4.根據(jù)權(quán)利要求1所述的基于Linux內(nèi)核的流量分析方法,其特征在于,該方法提供兩種不同級別流量分析指標(biāo)數(shù)據(jù)包級及流級。
5.根據(jù)權(quán)利要求4所述的基于Linux內(nèi)核的流量分析方法,其特征在于,方法中數(shù)據(jù)包級指標(biāo)提供200多種協(xié)議分析,主要分析指標(biāo)有流量速率,鏈路利用率,不同層次的協(xié)議分布,包大小分布、包間隔分布以及不同協(xié)議流量速率。
6.根據(jù)權(quán)利要求4所述的基于Linux內(nèi)核的流量分析方法,其特征在于,方法中流級統(tǒng)計指標(biāo)包括流持續(xù)時間的統(tǒng)計分布,流速率,流大小統(tǒng)計分布,并發(fā)流數(shù)量統(tǒng)計分布。
7.一種基于Linux內(nèi)核的流量分析方法,首先網(wǎng)卡收到數(shù)據(jù)包會向CPU發(fā)送中斷請求,CPU根據(jù)中斷請求從網(wǎng)卡緩存中獲得到達(dá)的數(shù)據(jù)包,數(shù)據(jù)包經(jīng)由PCI總線傳到內(nèi)核空間,并在Skbuff中創(chuàng)建對應(yīng)數(shù)據(jù)包的結(jié)點(diǎn),最后交給協(xié)議棧以及在內(nèi)核中注冊的其他處理網(wǎng)絡(luò)數(shù)據(jù)包處理函數(shù)進(jìn)行處理。
8.根據(jù)權(quán)利要求7的基于Linux內(nèi)核的流量分析方法,其具體步驟如下步驟S1,把網(wǎng)卡設(shè)置為混雜模式以獲得所有網(wǎng)絡(luò)數(shù)據(jù)包;步驟S2,注冊內(nèi)核級網(wǎng)絡(luò)流量分析函數(shù),用來對分析函數(shù)指定的協(xié)議類型進(jìn)行處理,本方法中的流量分析函數(shù)指定的協(xié)議類型為所有以太網(wǎng)類型;步驟S3,配置流量分析參數(shù),使得流量分析函數(shù)能夠分析根據(jù)用戶自定義規(guī)則進(jìn)行分析;步驟S4,如果內(nèi)核空間中的數(shù)據(jù)包內(nèi)核緩存鏈表不為空,則調(diào)用已注冊的流量分析函數(shù)進(jìn)行分析,結(jié)果放在統(tǒng)計結(jié)果緩存和流記錄緩存中;步驟S5,如果模塊接收到用戶空間卸載模塊請求則取消網(wǎng)卡混雜模式并執(zhí)行S6;步驟S6,取消注冊的內(nèi)核級流量分析函數(shù);步驟S7,如果模塊接收到用戶空間獲取分析結(jié)果的請求,則處理請求并返回相應(yīng)結(jié)果。
全文摘要
一種基于Linux內(nèi)核的流量分析方法,采用Linux中可裝載內(nèi)核的方式實現(xiàn),可以實現(xiàn)數(shù)據(jù)包級及流級的流量分析。提供的監(jiān)測分析指標(biāo)包括流量速率,鏈路利用率,2-7層協(xié)議分布,不同協(xié)議的流量速率,包大小分布等;還可根據(jù)各種流定義規(guī)則,進(jìn)行特定類型流的監(jiān)測并提供相關(guān)統(tǒng)計結(jié)果。由于采用了可裝載內(nèi)核模塊的方式,降低了系統(tǒng)調(diào)用和內(nèi)存拷貝等開銷,提高了流量分析性能。實驗結(jié)果顯示對于100Mbps和1000Mbps鏈路,采樣該方法可以分別實現(xiàn)對速率為142000pps和405000pps的流量進(jìn)行實時監(jiān)測和分析。比較基于libpcap的用戶空間流量分析方法,該方法可以提高約50%的處理能力。
文檔編號H04L12/56GK1633110SQ20051000424
公開日2005年6月29日 申請日期2005年1月14日 優(yōu)先權(quán)日2005年1月14日
發(fā)明者楊建華, 謝高崗, 李忠誠 申請人:中國科學(xué)院計算技術(shù)研究所