欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種支持多維度聚合分類的網(wǎng)絡(luò)流量統(tǒng)計實現(xiàn)方法與流程

文檔序號:12278224閱讀:887來源:國知局
一種支持多維度聚合分類的網(wǎng)絡(luò)流量統(tǒng)計實現(xiàn)方法與流程

本發(fā)明涉及一種支持多維度聚合分類的網(wǎng)絡(luò)流量統(tǒng)計實現(xiàn)方法。



背景技術(shù):

網(wǎng)絡(luò)流量統(tǒng)計及分析是掌握網(wǎng)絡(luò)行為的基礎(chǔ),是用于分析網(wǎng)絡(luò)狀況、掌握流量特性的有效方法,可以通過收集數(shù)據(jù)或報文蹤跡,定量的分析不同的網(wǎng)絡(luò)應(yīng)用在網(wǎng)絡(luò)中活動規(guī)律,能夠為網(wǎng)絡(luò)運營商提供一個有效控制和區(qū)分網(wǎng)絡(luò)流量的依據(jù);此外,通過統(tǒng)計和分析這些構(gòu)成業(yè)務(wù)流量的時間序列獲得用戶業(yè)務(wù)行為特征,從中抽取能刻畫網(wǎng)絡(luò)流量特征的參數(shù),實現(xiàn)對業(yè)務(wù)流量建模、模擬和性能分析以及對未來用戶業(yè)務(wù)需求的預測。可見,深入了解網(wǎng)絡(luò)流量的組成成分、產(chǎn)生根源以及流行網(wǎng)絡(luò)業(yè)務(wù)的變化趨勢等,對網(wǎng)絡(luò)規(guī)劃、網(wǎng)絡(luò)運維、QoS保障、網(wǎng)絡(luò)安全等都有重要的意義。目前流量統(tǒng)計的設(shè)計大都是基于NetFlow實現(xiàn)的,NetFlow根據(jù)IPv4報文的目的IP地址、源IP地址、目的端口號、源端口號、協(xié)議號、ToS、輸入接口或輸出接口來定義流,相同的七元組標識為同一條流,其特點是流量統(tǒng)計是基于IP流的,根據(jù)這些信息可以對協(xié)議(應(yīng)用)、主機IP(用戶)以及服務(wù)等進行統(tǒng)計和趨勢分析,從而實現(xiàn)網(wǎng)絡(luò)流量監(jiān)測,用戶應(yīng)用監(jiān)控,網(wǎng)絡(luò)安全,網(wǎng)絡(luò)規(guī)劃以及異常流量檢測等功能。但是,NetFlow僅對IP數(shù)據(jù)流的報文數(shù)量、報文總長度等概括的統(tǒng)計,沒有IP數(shù)據(jù)流量中每一個數(shù)據(jù)報文的特征(如:報文長度,報文間隔發(fā)送時間),也就難以獲得細粒度流量特征。并且現(xiàn)有許多業(yè)務(wù)流量單純從七元組標識難以進行區(qū)分,必須基于應(yīng)用層的協(xié)議識別,通過分析應(yīng)用層包頭,來區(qū)分業(yè)務(wù)流量。

網(wǎng)絡(luò)流量統(tǒng)計與分析中的另外一個核心問題就是如何對采集來的數(shù)據(jù)進行歸納整理和存儲,尤其針對高速大流量網(wǎng)絡(luò)環(huán)境所產(chǎn)生的海量數(shù)據(jù)。這些原 始的信息數(shù)據(jù)量不但大而且復雜,這給網(wǎng)絡(luò)流量原始數(shù)據(jù)的處理和存儲組織帶來了一定難度??梢?,有效的原始數(shù)據(jù)整理和存儲是滿足不同粒度的網(wǎng)絡(luò)流量識別和進行全面流量統(tǒng)計分析的基礎(chǔ)。

在網(wǎng)絡(luò)流量統(tǒng)計分析中常常需要根據(jù)用戶分析的需要,為了分析流量走勢,開展各種網(wǎng)絡(luò)流量的查詢,而直接進行數(shù)據(jù)庫的查詢,往往會由于統(tǒng)計數(shù)據(jù)分散存儲于表中,導致查詢時間非常長,系統(tǒng)效率非常低。因而有必要對網(wǎng)絡(luò)流量進行分類聚合。所謂流量聚合,是指根據(jù)一定聚合條件將原始流記錄進行流量合并,實現(xiàn)多條流合并為一條的過程。由于聚合后的流記錄將比原始流記錄數(shù)量大大減少,使得用戶查詢數(shù)據(jù)流量的效率也將明顯提高,可見,建立靈活高效的流量聚合的方法也是提高數(shù)據(jù)查詢即流量分析效率的關(guān)鍵和重要手段。目前,一維、二維的流量聚合分類算法比較多,如果要滿足用戶的多種流量聚合的查詢需求,必須將每一種用戶可能的流量聚合都逐一整理出來,往往導致前期數(shù)據(jù)整理耗費的時間長,其占用的存儲空間就非常大。而目前對高維(指二維以上)聚合分類支持的算法要么要求的內(nèi)存空間過大無法滿足低成本的要求,要么分類查詢的速度較低,無法滿足用戶流量統(tǒng)計分析應(yīng)用需求。

因此有必要尋找一種流量聚合的數(shù)據(jù)處理和組織的方法,既占用較少的存儲空間,同時又能靈活的適應(yīng)用戶各種流量聚合查詢的需要。



技術(shù)實現(xiàn)要素:

為了克服現(xiàn)有技術(shù)的上述缺點,本發(fā)明提供了一種支持多維度聚合分類的網(wǎng)絡(luò)流量統(tǒng)計實現(xiàn)方法,旨在滿足不同協(xié)議層面的網(wǎng)絡(luò)流量識別的需求。本發(fā)明提出了一套可擴展的原始報文信息存儲格式,該數(shù)據(jù)格式不僅包含IP數(shù)據(jù)的七元組信息,而且還存儲了原始報文的應(yīng)用層協(xié)議頭信息,既可以滿足七元組IP數(shù)據(jù)流量識別的需要,還可以滿足應(yīng)用層的DPI流量識別(Deep Packet Inspection,深度報文檢測,一種基于應(yīng)用層的協(xié)議識別技術(shù))的需要。在此基礎(chǔ)上,提出了原始數(shù)據(jù)流量的數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)既存儲了原始流量統(tǒng)計信息,還存儲了原始流量組成的每個報文長度和發(fā)送時間信息,通過獲取流量的時間序列,可以進行數(shù)據(jù)流量的概率特性(如:相關(guān)性分析、聚類分析等)的深度挖掘和特征擬合,滿足了細粒度流量統(tǒng)計分析需要。此外,通過分析目前用戶常見的流量聚合查詢的需要,設(shè)計了一種流量聚合的處理算法,其中三階聚合流量矩陣占用存儲空間少,并且能夠靈活地實現(xiàn)用戶多維流量聚合查詢的要求,查詢高效快捷。

本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:一種支持多維度聚合分類的網(wǎng)絡(luò)流量統(tǒng)計實現(xiàn)方法,包括如下內(nèi)容:

一、采用數(shù)據(jù)庫對原始IP報文信息進行存儲;

二、原始數(shù)據(jù)流的存儲:

1)定義原始流的數(shù)據(jù)結(jié)構(gòu):

采用一個流量記錄節(jié)點記錄一條流量信息,采用鏈表的方式將所有的流量記錄節(jié)點連接起來;一個流量記錄節(jié)點包含流量頭鏈表和與其鏈接的報文鏈表;

2)原始數(shù)據(jù)流量的存儲:

在需要細粒度的流量統(tǒng)計時,將流量頭鏈表和報文鏈表存儲到內(nèi)存中,等待用戶查詢和讀取;在不需要細粒度的流量統(tǒng)計時,將流量頭鏈表信息存儲于文件中;

三、流量聚合:

1)按照時間粒度進行流量聚合:聚合項包括流量值和包個數(shù),生成流量頭鏈表,存儲于內(nèi)存中;

2)按照聚合條件進行流量聚合:根據(jù)用戶查詢條件開展流量聚合,生成三階聚合流量鏈表矩陣;

四、流量查詢:

1)獲得滿足各階條件下的從ts到te時間段中的聚合流量鏈表;

2)參數(shù)初始化;

3)找尋Slink、Dlink、Plink三條聚合流量鏈表中t至t+T時間段的流量節(jié)點;

4)尋找t至t+T時間段中三條聚合流量鏈表的公共節(jié)點;

5)以T為步長進行循環(huán)推進,直至t≥te時查詢結(jié)束,輸出結(jié)果。

與現(xiàn)有技術(shù)相比,本發(fā)明的積極效果是:本發(fā)明采用多級存儲的方式和數(shù)據(jù)格式,使用靈活可擴展性強,占用存儲空間小,可滿足不同應(yīng)用需求。原始報文存儲于數(shù)據(jù)庫,原始流量存儲于二進制文件,保證了大量數(shù)據(jù)存儲和完整性的要求;流量鏈表存儲于內(nèi)存中,提高了用戶訪問數(shù)據(jù)的速度,并支持多粒度的流量統(tǒng)計分析。此外,本發(fā)明定義了一種支持多維度的流量聚合分類算法,可根據(jù)應(yīng)用的各個時間段劃分,開展動態(tài)流量分析,也支持基于原、目的地址的各種應(yīng)用編成編組的變化來分析業(yè)務(wù)流量聚合,實現(xiàn)了五關(guān)鍵字靈活組合的多維流量聚合分類統(tǒng)計分析。該算法引入三階HASH聚合流量鏈表矩陣,提高了流量查詢訪問速度,幫助用戶快捷迅速地找到查詢信息,并且具有很強的靈活性,通過改變聚合分類的維度信息,改變數(shù)據(jù)內(nèi)存中的信息,占用內(nèi)存小,能夠便捷地滿足用戶多種流量分析需求。

附圖說明

本發(fā)明將通過例子并參照附圖的方式說明,其中:

圖1為本發(fā)明的工作流程示意圖;

圖2為數(shù)據(jù)流量記錄節(jié)點鏈表結(jié)構(gòu)示意圖;

圖3為三階聚合流量矩陣示意圖;

圖4為多維聚合流量查詢流程示意圖。

具體實施方式

本發(fā)明的目的就是設(shè)計一套靈活和高效的網(wǎng)絡(luò)流量統(tǒng)計的數(shù)據(jù)存儲和整理的方法,通過制定擴展性高、信息完備的數(shù)據(jù)格式,采用數(shù)據(jù)庫、文件、內(nèi)存多手段和多級的存儲方式,以滿足對網(wǎng)絡(luò)流量的不同協(xié)議層面不同粒度的流量識別和查詢的要求,建立重用性高、擴展性強、檢索速度快的三階聚合流量矩陣,滿足用戶多種數(shù)據(jù)流量聚合的查詢和檢索需要。本發(fā)明方法的空間占用低、執(zhí)行速度快、應(yīng)用靈活高效,非常適合大規(guī)模網(wǎng)絡(luò)和海量數(shù)據(jù)流量統(tǒng)計分析的應(yīng)用場景。

如圖1所示,本發(fā)明采用的技術(shù)方案的工作流程分為四步,具體描述如下:

1、原始IP報文信息的存儲:

從路由器的流量采集端獲得原始的IP報文信息的數(shù)據(jù)量特別巨大,需要對采集的數(shù)據(jù)進行初步的歸類整理才能保存,要求保存內(nèi)容必須完整,便于后期的數(shù)據(jù)統(tǒng)計分析。因此,考慮采用數(shù)據(jù)庫的存儲方式。原始報文信息數(shù)據(jù)庫是信息交換的重要場所,網(wǎng)絡(luò)流量統(tǒng)計分析系統(tǒng)需要訪問數(shù)據(jù)庫得到某次試驗的最原始的流量數(shù)據(jù),根據(jù)用戶的不同需求,進行各種統(tǒng)計分析活動。因此數(shù)據(jù)庫表結(jié)構(gòu)的設(shè)計對于統(tǒng)計分析的性能而言非常重要。

數(shù)據(jù)庫存儲最原始的業(yè)務(wù)流量信息,按時間將每個IP報文的信息和應(yīng)用層信息存儲下來,報文信息存儲格式的定義如下表:

2、原始數(shù)據(jù)流的生成與存儲:

當采集到業(yè)務(wù)報文數(shù)據(jù)并存入數(shù)據(jù)庫后,下面的工作就是根據(jù)原始報文信息進行IP數(shù)據(jù)流量的識別和分類,也就是原始數(shù)據(jù)流的生成過程。一個網(wǎng)絡(luò)中的流通常是指在一個給定的源和目標之間的單向的一組數(shù)據(jù)包序列,廣義的來說,網(wǎng)絡(luò)流量指通過同一路由器的滿足相同特征條件的數(shù)據(jù)包序列,這里的特征條件包含網(wǎng)絡(luò)中各協(xié)議層的屬性特征,比如:端口號、協(xié)議號、應(yīng)用層的協(xié)議特征等??梢愿鶕?jù)數(shù)據(jù)包頭(如協(xié)議類型、tos或目標地址的一部分)、數(shù) 據(jù)包本身(如數(shù)據(jù)包的大小)和數(shù)據(jù)包處理的結(jié)果(如在路由器中數(shù)據(jù)包的輸出端口)來定義一個流。IP數(shù)據(jù)流的分類方法非常多,本發(fā)明不對其做具體研究,這里按照常用的方式,將一個數(shù)據(jù)流的特征按照常規(guī)的七個關(guān)鍵字段進行描述。即所有具有相同的源/目標IP地址、源/目標端口、協(xié)議、服務(wù)類型以及網(wǎng)絡(luò)設(shè)備輸入/輸出的邏輯網(wǎng)絡(luò)端口的數(shù)據(jù)包都被分組在同一個流中,并在此流中對數(shù)據(jù)包和字節(jié)進行統(tǒng)計計數(shù)。

1)原始流的數(shù)據(jù)結(jié)構(gòu)的定義

我們采用一個流量記錄節(jié)點(flow node)記錄一條流量信息,采用鏈表的方式將所有的流記錄節(jié)點(flow node)連接起來。一個流量記錄節(jié)點包含flow_head鏈表和pkt_inf鏈表,如圖2所示。每一個流量頭鏈表(flow_head)包含該流量分類特征和流量統(tǒng)計信息。其鏈接的報文鏈表(pkt_inf)則記錄了該流中,每一個報文的長度、IP標識(通過該標識可以從數(shù)據(jù)庫中找到該報文應(yīng)用層數(shù)據(jù))、報文間隔時間等所有詳細信息,這為原始流量的細粒度的統(tǒng)計分析、業(yè)務(wù)行為分析、業(yè)務(wù)流量仿真擬合提供了良好的支持能力。

flow_head的數(shù)據(jù)結(jié)構(gòu)定義如下:

struct flow_head{

uint srcIP;//流記錄的源IP

uint dstIP;//流記錄的目的IP

ushort srcPort;//流記錄的源端口

ushort dstPort;//流記錄的目的端口

uchar protocol;//流記錄的協(xié)議類型

ushort input;流入接口

ushort output;//流出接口

uchar tos;//服務(wù)類型

uchar appType;//應(yīng)用層業(yè)務(wù)類型,”0”表示不進行應(yīng)用層面的流量識別

/*流量信息*/

struct Time startTime;//流開始時間(系統(tǒng)時間,精確到毫秒)

struct Time endTime;//流結(jié)束時間(系統(tǒng)時間,精確到毫秒)

uint pktsNum;//流包含的數(shù)據(jù)包數(shù)量

uint lengthBytes;//流的總字節(jié)數(shù)

struct pkt_inf*pkt_inf_ptr;

struct flow_head*next;

}

需要說明的是flow_head的數(shù)據(jù)結(jié)構(gòu)中定義了appType變量,當需要從應(yīng)用層進行流量的分類識別的時候,會用到該值。首先用戶需要根據(jù)應(yīng)用層流量識別的協(xié)議特征字來定義不同appType的取值,可通過定義數(shù)組的方式與appType進行一一映射,應(yīng)用層流量識別的過程是從數(shù)據(jù)庫中AppDataLen和AppData字段中需找滿足事先定義的協(xié)議特征字,從而得到appType值并寫入流量鏈表中。

pkt_inf的數(shù)據(jù)結(jié)構(gòu)定義如下:

struct pkt_inf{

ushort pktID;//數(shù)據(jù)包的IP標識

ushort pktSize;//數(shù)據(jù)包字節(jié)數(shù)

double intervalTime;//數(shù)據(jù)包時間間隔,精確到毫秒

struct pkt_inf*next;

}

通過pkt_inf的流量報文鏈表的方式可記錄將流量中的每一個報文都記錄下來,因而能夠獲得流量報文的時間序列和報文長度分布等據(jù)流量的概率特性,可支持更細粒度的流量分析。當需要用戶需要這種細粒度的流量分析時,圖2的原始流量鏈表(包括:flow_head和pkt_inf的所有信息)會存儲到內(nèi)存中,等待用戶查詢和讀取。若沒有此需要,則將內(nèi)存中原始流量鏈表中的flow_head數(shù)據(jù)結(jié)構(gòu)信息存儲于文件中,以備后續(xù)流量聚合分析用。

2)原始數(shù)據(jù)流量生成過程

(1)首先根據(jù)選定的路由器和時間段,從數(shù)據(jù)庫搜索滿足條件的報文,根據(jù)七關(guān)鍵字段進行流量統(tǒng)計,讀取到滿足條件的第一個報文,創(chuàng)建第一個流量頭鏈表節(jié)點(flow_head)。

(2)繼續(xù)搜索數(shù)據(jù)庫,查找滿足時間和路由器ID的報文,找到后,通過七關(guān)鍵字段搜索flow_head鏈表,檢查新到達的數(shù)據(jù)包的屬性是否滿足flow_head中己有流,如果滿足,則對該已有flow_head鏈表節(jié)點中的流統(tǒng)計信息(流結(jié)束時間、報文數(shù)、流的總字節(jié)數(shù))進行更新,創(chuàng)建一個新的報文鏈表節(jié)點(pkt_inf),記錄報文長度、與上一個報文的間隔時間、報文IP標識記錄等信息,插入到pkt_inf鏈表尾部。

(3)如果在flow_head鏈表中沒有找到滿足條件的流量,則創(chuàng)建一個新的流量(flow_head節(jié)點)將該節(jié)點插入到flow_head的尾部。

(4)重復第2步,直到完成對數(shù)據(jù)庫的搜索。

(5)將每個流量記錄節(jié)點按照流量記錄節(jié)點鏈表的順序依次寫入原始流數(shù)據(jù)文件中。

3)原始數(shù)據(jù)流量的存儲

前面提到原始數(shù)據(jù)流量首先生成于內(nèi)存中,當不需要細粒度的流量統(tǒng)計分析時候,可將流量頭鏈表信息(包含flow_head和pkt_inf的鏈表信息)存儲于文件中,這樣做的好處就是不會受內(nèi)存大小的限制而且便于離線統(tǒng)計分析的數(shù)據(jù)重用。因為原始流量數(shù)據(jù)是為后續(xù)的流量聚合提供支撐,會直接面臨用戶查詢,如果按照常規(guī)的數(shù)據(jù)庫存儲方式保存流數(shù)據(jù),數(shù)據(jù)庫的插入效率、文件大小都會成為網(wǎng)絡(luò)流量統(tǒng)計分析的瓶頸。雖然內(nèi)存讀取迅速,但空間大小受限,難以滿足巨大的原始流量信息存儲。最簡單的解決方式就是采用二進制文件的方式保存流數(shù)據(jù),即把每條流的數(shù)據(jù)中有價值的字段以二進制的形式、按照時間順序?qū)懭肓鲾?shù)據(jù)文件中。如果把所有的數(shù)據(jù)保存在一個文件中是不可能的,而且會導致統(tǒng)計分析過程中數(shù)據(jù)檢索效率極度低下。由于對流數(shù)據(jù)的檢索通常情況下都會限定在某段時間內(nèi)某一個路由器的流量數(shù)據(jù),因此最為方便可行的方法就是按照時間段分割流數(shù)據(jù)文件,每個時間段(用戶可根據(jù)網(wǎng)絡(luò)流量分析的數(shù)據(jù)量和網(wǎng)絡(luò)運行時間的具體情況進行設(shè)置)內(nèi)將緩沖區(qū)中的流數(shù)據(jù)保存到物理文件中,物理輸出文件的命名規(guī)則為:DevId_YYYYMMddhhmm.data,其中,DevId為流量所在的的路由器的編號,YYYYMMddhhmm代表文件中流數(shù)據(jù)開始時間,假設(shè)按照1小時進行時間分段,則文件名稱為1001_201501011810.data,表明這個文件中包含了從2015年1月1日18:10到19:10之間,由編號為1001的路由器產(chǎn)生的所有的原始流記錄。需要說明的是,流量文件沒有對流數(shù)據(jù)進行聚合等一系列的操作,只是對從數(shù)據(jù)庫中讀出原始報文數(shù)據(jù),經(jīng)過七關(guān)鍵字過濾規(guī)則或者是應(yīng)用層特征信息生成的原始數(shù)據(jù)流中的flow_head信息進行了存儲,按照每一條流記錄占用一行,保存到文件中。在后續(xù)的流量分析中,需要讀取這些“原始的材料”根據(jù)用戶分析的需要對其進行后繼的流量聚合分類處理。

3、流量多維聚合與存儲

原始數(shù)據(jù)流量的數(shù)據(jù)量非常龐大,用戶直接從每一條流數(shù)據(jù)的原始記錄將會使對數(shù)據(jù)進行查詢和統(tǒng)計分析時,會產(chǎn)生效率低下的問題。流量聚合的過程是將滿足相同聚合條件和時間粒度的多條原始數(shù)據(jù)流進行流量疊加,同時保留聚合項,以實現(xiàn)原始流的壓縮整理。

流量聚合有三個關(guān)鍵要素:聚合條件,聚合項和時間粒度。流量聚合條件是由原始數(shù)據(jù)流量的關(guān)鍵字段組合派生出來的,所謂多維度聚合即指多種不同的聚合條件。流量聚合的目的主要是提高數(shù)據(jù)查詢即流量分析的效率,因而在設(shè)計聚合策略時應(yīng)充分考慮實際需要。以流量分析常用的查詢條件為基礎(chǔ)設(shè)計聚合條件,或?qū)⒉樵儣l件直接作為聚合條件,便于通過流量聚合的過程得到流量分析所需的統(tǒng)計結(jié)果。分析系統(tǒng)直接查詢聚合結(jié)果數(shù)據(jù)表,即可得到統(tǒng)計結(jié)果,避免大量的數(shù)據(jù)表連接和統(tǒng)計運算。目前比較常見的流量聚合有:協(xié)議維度聚合、地址(包括源IP地址、目的IP地址)維度聚合、端口(包括:源端口、目的端口)維度聚合。因此,本發(fā)明考慮以這五維作為最多支持的聚合維度。所謂聚合項是指滿足相同聚合條件的疊加項,如總報文數(shù)、總包長等參數(shù)信息,這些可根據(jù)用戶需要進行設(shè)定。時間粒度,是指流量聚合的時間段(如按照5分鐘、1小時、1天的時間段進行聚合),時間粒度越大,數(shù)據(jù)量的壓縮越大,但是流量的細節(jié)信息丟失就越嚴重,因而時間粒度根據(jù)用戶的流量信息分析粗細粒度的需要來確定。

1)聚合流量的生成

流量聚合問題其實質(zhì)是一個分類的多目標優(yōu)化問題,而不是單目標優(yōu)化問題。不能一味的追求速度,而導致存儲空間的爆炸,必須是在時間、空間、靈活性三者之間尋求一個折中。這樣不僅可以加快流量聚合分類查詢的速度,同 時也可以解決內(nèi)存空間的爆炸問題,滿足用戶各種流量查詢的靈活性需要。由于Hash表具有從key快速映射到value的特點,這種特點對于快速的內(nèi)存級流量聚合非常有效。因此,采用hash表作為聚合流快速匹配的存儲結(jié)構(gòu),設(shè)計了一種基于Hash的三階流量聚合算法(矩陣階數(shù)過多雖然在速度和靈活性上增強了,勢必導致空間占用過高,因此,選擇三階比較合適),其流量聚合過程分兩步:

(1)按照時間粒度進行流量聚合。主要依據(jù)用戶關(guān)心的網(wǎng)絡(luò)路由器和流量起始時間,選定相應(yīng)的原始流量數(shù)據(jù)文件,讀取原始流量數(shù)據(jù)文件中的原始流量信息,按照時間粒度進行流量聚合,聚合項包括流量值和包個數(shù),最后生成flow_head流量鏈表。因為按時間粒度進行流量聚合后不再需要保存流量中每一個報文的信息,所以flow_head的數(shù)據(jù)結(jié)構(gòu)中的pkt_inf_ptr為空,即按時間段的聚合流量鏈表中不存放pkt_inf鏈表?;跁r間粒度的聚合流量鏈表存儲于內(nèi)存中,為基于聚合條件的流量聚合做準備;

(2)按照聚合條件進行流量聚合。按照聚合條件的流量聚合是以時間粒度為基礎(chǔ),根據(jù)用戶查詢條件(如協(xié)議號、源/目的地址、端口號)開展流量聚合,生成如圖3的三階聚合流量鏈表矩陣。圖3中按照聚合條件生成的HASH聚合流量鏈表中,以字母表示的聚合流量節(jié)點的數(shù)據(jù)結(jié)構(gòu)定義如下:

struct flow_Link{

struct flow_head*data;

struct flow_Link*next;

}

數(shù)據(jù)結(jié)構(gòu)中data指針指向基于時間粒度的聚合流量鏈表中滿足聚合條件的flow_head節(jié)點的內(nèi)存地址,next指針指向下一個HASH聚合流量鏈表節(jié)點。 這樣依據(jù)三個HASH函數(shù),生成三條HASH流量鏈表。

2)三階聚合流量鏈表矩陣的設(shè)計

在原始流量生成中已經(jīng)基于7關(guān)鍵字段(或者說7個分類規(guī)則域)進行了流量的分類,但是實際的在流量統(tǒng)計分析過程中,通常基于源/目的IP、源/目的端口和協(xié)議號五個關(guān)鍵字。而通常應(yīng)用業(yè)務(wù)在IP層特征通過協(xié)議以及端口進行定義。通信網(wǎng)絡(luò)業(yè)務(wù)流量聚合分類分析過程中,通常會考慮基于客戶、服務(wù)的關(guān)系進行流量劃分,而應(yīng)用關(guān)系通常是與IP地址相關(guān)的,因而本發(fā)明首先設(shè)計的基于HASH的三階流量鏈表矩陣的分類方法中。如圖3所示,首先以源地址和目的地址進行流量分類的HASH鏈表,并將其作為三階流量鏈表矩陣的X軸和Y軸;而將目的/源端口和協(xié)議的關(guān)鍵字段一起來共同構(gòu)造無沖突HASH鏈表(作為三階矩陣中第Z軸),由于該三關(guān)鍵字段的組合數(shù)目非常少,避免了空間爆炸。這里需要說明的是上述三階流量鏈表矩陣中,三階的關(guān)鍵字是根據(jù)常用的流量聚合需求而選取的,也可以根據(jù)用戶的特定需求進行調(diào)整和變化,流量聚合的方法和三階聚合流量矩陣的結(jié)構(gòu)是不變的。

如圖3所示,本發(fā)明使用了三張Hash表來保存相同srcIP的聚合流信息、相同dst_ip的聚合流信息以及相同的源端口號、目的端口號、協(xié)議號的聚合流信息。圖3中頂側(cè)的hash表存放基于源IP地址的聚合流信息,其表空間最大為Xmax;圖3底側(cè)的hash表存放基于目的IP地址的聚合流信息,其表空間最大為Ymax;圖3中左側(cè)的hash表存放基于源端口、目的端口、協(xié)議號三個關(guān)鍵字的聚合流信息,其表空間最大為Zmax。以源IP地址的Hash表為例,所有具有相同srcIP的流將被映射到同一個表項中,由于Hash沖突的存在,具有不同的srcIP的流也有可能被映射到同一個表項,為了解決這個問題,我們在每個Hash表項中保存一個鏈表,其中包含了所有被映射到此表項的srcIP 鍵值;在圖3中,源IP地址192.168.5.1、10.16.55.7和66.77.88.50的鍵值都映射到了哈希函數(shù)值253的表項上。除此之外,每個源IP地址節(jié)點下都包含另外一個鏈表,存儲了該源地址(srcIP)下所有流信息;目的IP地址Hash表具有類似的結(jié)構(gòu),每個表項包含一個鏈表,包含了所有映射到此表項的destIP,在圖3中,目的IP地址192.0.15.1、210.200.15.7都映射到哈希函數(shù)值為123的表項,同時,每個目的地址節(jié)點都包含一個鏈表,其中包含了該目的地址下的所有流信息;同樣以源端口、目的端口、協(xié)議號為關(guān)鍵字的哈希表,并且構(gòu)造無沖突哈希函數(shù),使得每一個源端口、目的端口、協(xié)議號的鍵字唯一映射一個哈希表項,每一表項以鏈表的形式存放了所有具有相同源端口、目的端口、協(xié)議號的聚合流量信息。如圖3中,哈希函數(shù)值為56的表項中存儲了源端口為21、目的端口為22、協(xié)議號為55的聚合流量信息。

下面分別對三張HASH表的哈希函數(shù)的定義進行說明:

3)基于源端口、目的端口、協(xié)議號的哈希函數(shù)的定義

通常,目的端口和源端口(32位)的取值往往是0-65535中極少的一部分,協(xié)議域(16位)的取值是0-255中很少幾個值。因此實際的過濾規(guī)則端口和協(xié)議域的取值(或取值范圍)的不同情況的組合數(shù)目是非常有限的;并且變化不大,將它們合并成一階,降低階數(shù)后以此三個關(guān)鍵的字段為輸入鍵值,構(gòu)建hash(s,d,p)函數(shù),函數(shù)的輸出值映射到滿足此條件的HASH鏈表流量首地址。該方法仍然支持源/目的端口和協(xié)議號的多個維度的流量聚合分類,因而本發(fā)明定義的基于HASH的三階聚合流量鏈表矩陣,可支持源/目的地址、源/目的端口、協(xié)議號五個維度的流量聚合。hash(s,d,p)哈希函數(shù)定義如下:

hash(s,d,p)=P×S×d+P×s+p

公式中0≤s≤S-1,0≤d≤D-1,0≤p≤P-1

其中s,d,p分別為源端口、目的端口、協(xié)議號,S和D分別為源、目的最大端口號,最大為65535,P為最大協(xié)議號,最大為255。經(jīng)過數(shù)學推導可證明,此函數(shù)為無沖突哈希函數(shù)。所謂無沖突,是指一個確定的源端口號、目的端口號和協(xié)議號的鍵值通過哈希函數(shù)計算出唯一的函數(shù)值,也就唯一映射哈希表的一個表項。

4)基于源IP地址的哈希函數(shù)定義

源IP地址的流量聚合方法仍然采用Hash表來進行存儲,根據(jù)上文HASH查找的性能分析中可知,為了提升查找性能可以適當增加表空間降低散列表的裝填因子合理設(shè)計散列函數(shù)使散列函數(shù)盡可能均勻并選用合適的沖突處理方法。

(1)確定Hash地址空間(表空間)

IP地址的顯示格式為XXX.XXX.XXX.XXX而在網(wǎng)絡(luò)數(shù)據(jù)包中IP地址是以一個32位無符號整數(shù)存儲的,其共有4294967296種可能。考慮到一個大型企業(yè)網(wǎng)絡(luò)的用戶IP數(shù)量通常為數(shù)萬個。為了快速地進行Hash運算并通過適當提高散列值地址范圍來減少上列表的裝填因子,可以將Hash后的散列值定為16位,即將IP地址進行Hash運算后的散列值分布在0-65535之間。因此確定哈希表空間為65535項。

(2)沖突處理方法

由于縮小了哈希表空間,必然會帶來哈希沖突。如圖3所示,本發(fā)明使用鏈地址法進行沖突處理,即每個表項為動態(tài)鏈表,無沖突時只有一個項,當發(fā)生沖突時,動態(tài)為這個散列值地址對應(yīng)的表項增加一個子項。

(3)哈希函數(shù)的定義

為了將4個字節(jié)的IP地址信息Hash到2個字節(jié)的地址空間中,同時達到Hash函數(shù)要求的簡單易用,這里采用折疊法和除留余數(shù)法相結(jié)合來進行IP地 址信息的Hash運算。公式如下:

hash(k1,k2,k3,k4)=((k1+k3)×256+k2+k4)mod65536

公式中k1、k2、k3、k4為源IP地址的四個字段。Mod表示除以65536的余數(shù)。

4、流量查詢

流量查詢就是用戶輸入關(guān)心的流量查詢條件,網(wǎng)絡(luò)流量統(tǒng)計分析系統(tǒng)輸出滿足條件的流量結(jié)果。流量查詢的實質(zhì)就是從海量的流量數(shù)據(jù)中尋找滿足查詢條件的流量數(shù)據(jù)。對原始流量的查詢就是從內(nèi)存中或原始流量文件中搜索滿足條件的流量數(shù)據(jù),其過程就是一個鏈表的搜索和文件的讀取過程,這里不再詳細描述。下面重點對多維度(多關(guān)鍵字段)聚合流量的查詢過程進行說明和描述,本發(fā)明的多維聚合流量分類的聚合條件可以是從源/目的IP、源/目的端口和協(xié)議號五個關(guān)鍵字任意的選取進行組合,對于一維聚合流量查詢的過程就是根據(jù)聚合條件通過哈希表函數(shù)計算獲得key值進行映射和查詢到滿足條件的流量信息。而對于多維的聚合流量的查詢的過程,其實就是首先通過HASH函數(shù)找到滿足各階聚合條件的聚合流量鏈表,然后再從各階聚合條件下聚合流量鏈表中找尋它們的公共節(jié)點,即為滿足多維聚合條件的流量信息。以二維聚合流量鏈表的查詢?yōu)槔?,如圖3所示,所有具有相同srcIP和dstIP的流位于srcIP鏈表和destIP鏈表共同的部分,如所有srcIP為192.168.5.1,dstIP為192.0.15.1,的流公共流量節(jié)點為D和K。如果再增加源端口32、目的端口54、協(xié)議號87的聚合條件,則僅有K流量節(jié)點。

可見,多維聚合流量鏈表的查詢就是多個一維聚合流量鏈表之間進行比較尋找公共節(jié)點的過程,最簡單的辦法就是讀取鏈表中的節(jié)點信息然后逐一比對,尋找相同部分。如果是二維聚合就是兩條聚合流量鏈表進行兩重循環(huán)比對, 公共部分即為滿足二維聚合條件的聚合流量信息;五維聚合就是三條聚合流量鏈表進行三重循環(huán)對比,公共部分即為滿足五維聚合條件的聚合流量信息??紤]到所有聚合流量信息首先基于時間粒度進行了聚合,假設(shè)聚合流量鏈表是按照時間先后順序排列(原始流量信息是根據(jù)采集時間先后順序進行數(shù)據(jù)存放的)因此,我們可以利用這個特點,首先比對時間,然后在相同時間點的流量節(jié)點中進行多重循環(huán)比對,使得查詢循環(huán)次數(shù)大大減少,查詢效率得到提高。該多維聚合流量的查詢流程如圖4所示,假定查詢從ts(開始時間)到te(結(jié)束時間)時間段中,聚合時間粒度為T,基于源、目的地址,源、目的端口號和協(xié)議號多維度的聚合流量,具體描述如下:

1)獲得滿足各階條件下的從ts到te時間段中的聚合流量鏈表;

根據(jù)源地址srcIP計算其鍵值,通過HASH函數(shù)找到其在源IP地址Hash表中的表項,遍歷源IP地址鏈表,找出srcIP對應(yīng)的IP地址節(jié)點,得到所有srcIP的聚合流鏈表指針SLink;

根據(jù)目的地址dstIP計算其鍵值,通過HASH函數(shù)找到其在目的IP地址Hash表中的表項,遍歷目的IP地址鏈表,找出dstIP對應(yīng)的IP地址節(jié)點,得到所有dstIP的聚合流鏈表指針DLink;

根據(jù)目的/源端口和協(xié)議號計算其鍵值,通過HASH函數(shù)獲得其在目的/源端口和協(xié)議號Hash表中的表項,得到滿足該目的/源端口和協(xié)議號條件下的聚合流鏈表指針Plink。

2)參數(shù)初始化,記錄當前查詢的時間起點,并用三組指針分別記錄三條鏈表的查詢位置:t=ts,SptrStart=Slink,SptrEnd=SptrStart,DptrStart=Dlink,DptrEnd=DptrStart,PptrStart=Plink,PptrEnd=PptrStart;

3)找尋Slink聚合流量鏈表中t至t+T時間段中的流量節(jié)點,步驟如下:

3-1)流量節(jié)點計數(shù)器Scount=0;

3-2)以SptrEnd指針指向的鏈表節(jié)點(flow_Link數(shù)據(jù)結(jié)構(gòu))中取出data字段,將SptrEnd->data->startTime與t相比較;

3-3)如果SptrEnd->data->startTime小于t,則SptrStart=SptrStart->next,SptrEnd=SptrStart,重新執(zhí)行第3-2)步;

3-4)如果SptrEnd->data->startTime大于等于t,并且小于t+T,則該節(jié)點是t時間點上的流量節(jié)點,Scount++,同時SptrEnd=SptrEnd->next,繼續(xù)執(zhí)行3-4)步驟;否則執(zhí)行3-5)步驟;

3-5)如果SptrEnd->data->startTime大于等于t+T,判斷Scount,如果等于零,執(zhí)行7)步驟,如果大于零,執(zhí)行4)步驟;

4)找尋Dlink聚合流量鏈表中t至t+T時間段中的流量節(jié)點,步驟如下:

4-1)流量節(jié)點計數(shù)器Dcount=0;

4-2)以DptrEnd指針指向的鏈表節(jié)點(flow_Link數(shù)據(jù)結(jié)構(gòu))中取出data字段,將DptrEnd->data->startTime與t相比較;

4-3)如果DptrEnd->data->startTime小于t,則DptrStart=DptrStart->next,DptrEnd=DptrStart,重新執(zhí)行第4-2)步;

4-4)如果DptrEnd->data->startTime大于等于t,并且小于t+T,則該節(jié)點是t時間點上的流量節(jié)點,Dcount++,同時DptrEnd=DptrEnd->next,繼續(xù)執(zhí)行4-4)步驟;否則執(zhí)行4-5)步驟;

4-5)如果DptrEnd->data->startTime大于等于t+T,判斷Dcount,如果等于零,執(zhí)行7)步驟,如果大于零,執(zhí)行5)步驟;

5)找尋Plink聚合流量鏈表中t至t+T時間段中的流量節(jié)點,步驟如下:

5-1)流量節(jié)點計數(shù)器Pcount=0;

5-2)以PptrEnd指針指向的鏈表節(jié)點(flow_Link數(shù)據(jù)結(jié)構(gòu))中取出data字段,將PptrEnd->data->startTime與t相比較;

5-3)如果PptrEnd->data->startTime小于t,則PptrStart=PptrStart->next,PptrEnd=PptrStart,重新執(zhí)行第5-2)步;

5-4)如果PptrEnd->data->startTime大于等于t,并且小于t+T,則該節(jié)點是t時間點上的流量節(jié)點,Pcount++,同時PptrEnd=PptrEnd->next,繼續(xù)執(zhí)行5-4)步驟;否則執(zhí)行5-5)步驟;

5-5)如果PptrEnd->data->startTime大于等于t+T,判斷Pcount,如果等于零,執(zhí)行7)步驟,如果大于零,執(zhí)行6)步驟;

6)尋找t至t+T時間段中的三條流量鏈表的公共節(jié)點;

通過時間比對進行過濾,獲得在t至t+T時間段中的三條流量鏈表,分別是以SptrStart為起點,SptrEnd為終點的鏈表;以DptrStart為起點,DptrEnd為終點的鏈表;以PptrStart為起點,PptrEnd為終點的鏈表。這三條鏈表的節(jié)點數(shù)相比原聚合流量鏈表(Slink、DLink和Plink)大大減少,在進行多重循環(huán)比對時,循環(huán)次數(shù)極大減少,提高了查詢效率和速度。在尋找這三條鏈表中相同節(jié)點時,由于鏈表的數(shù)據(jù)節(jié)點的data都是指向相同的存儲空間,只要它們的data地址相同,就表明是同一個節(jié)點,因此通過地址比對就能查找到流量數(shù)據(jù)信息,減少了訪問內(nèi)存的消耗。

7)以T為步長進行循環(huán)推進:t=t+T,SptrStart=SptrEnd,DptrStart=DptrEnd,,PptrStart=PptrEnd,當t≥te時執(zhí)行8)步驟,否則執(zhí)行3)步驟;

8)查詢結(jié)束,輸出結(jié)果。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
达日县| 长丰县| 宜宾县| 灵石县| 潍坊市| 金坛市| 汝城县| 藁城市| 仙游县| 武山县| 兴仁县| 呼图壁县| 孝昌县| 洪江市| 张家港市| 黄浦区| 大理市| 徐闻县| 巢湖市| 图木舒克市| 罗平县| 石家庄市| 新宾| 桦南县| 三台县| 汾阳市| 濮阳县| 西昌市| 宁强县| 体育| 岳阳市| 云南省| 绥宁县| 青阳县| 九龙城区| 镇康县| 开封市| 山丹县| 宾川县| 乌兰浩特市| 若羌县|