亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種數(shù)據(jù)包遞歸流分類方法

文檔序號:6590119閱讀:242來源:國知局

專利名稱::一種數(shù)據(jù)包遞歸流分類方法
技術(shù)領(lǐng)域
:本發(fā)明涉及IP網(wǎng)絡(luò)中數(shù)據(jù)流的分類方法,具體涉及一種數(shù)據(jù)包的遞歸流分類方法,能夠快速地對數(shù)據(jù)流進(jìn)行分類處理。通常數(shù)據(jù)包流分類是根據(jù)數(shù)據(jù)包頭的幾個不同的域(如源IP地址、目的IP地址等),通過查找規(guī)則庫進(jìn)行的。這里,規(guī)則庫是分類的依據(jù),它由一系列的規(guī)則條目組成,每個規(guī)則條目對應(yīng)一種特定的業(yè)務(wù)類型或處理方法。數(shù)據(jù)包分類的實(shí)質(zhì)是對于特定的數(shù)據(jù)包D,在規(guī)則庫中搜索與之匹配的規(guī)則R,以確定數(shù)據(jù)包D所應(yīng)接受的服務(wù)類型。分類過程是通過數(shù)據(jù)包頭的K個域進(jìn)行的,規(guī)則庫中的任意規(guī)則R中也包含K個域。數(shù)據(jù)包D匹配了規(guī)則R即為對于任意的域F,數(shù)據(jù)包頭的第k個域D(k)都與規(guī)則R中的第k個域R(k)相匹配。一般地,規(guī)則R的任一域都定義了整數(shù)集上的一個范圍或某個確定的整數(shù)值,數(shù)據(jù)包D匹配規(guī)則R,即為對任意的k,有D(k)R(k)。在IP網(wǎng)絡(luò)中,規(guī)則庫中規(guī)則包含的域個數(shù)越來越多,有時多達(dá)8個。而且,不同應(yīng)用的規(guī)則庫規(guī)模差別很大,從數(shù)十條到數(shù)萬條規(guī)則不等。為了保證性能,要求數(shù)據(jù)流分類方法在最壞情況下的最大分組處理速率一般不能低于數(shù)據(jù)包的到達(dá)速率,方法性能不依賴于某一確定的業(yè)務(wù)特征,即方法的性能是與業(yè)務(wù)相分離的。在這種情況下,近年來在國內(nèi)外出現(xiàn)了許多實(shí)用化的快速數(shù)據(jù)流分類方法。近年來在出現(xiàn)的快速數(shù)據(jù)流分類方法包括三重內(nèi)容尋址存儲器方法、基于比特向量的多維范圍匹配方法、GridofTries方法、Tuple空間搜索方法、有向非循環(huán)圖DAG方法、交叉乘積方法、RFC(recursiveflowclassification)遞歸流分類方法等。它們的一個共同特點(diǎn)是,在某些限定的條件下(如規(guī)則包含的域個數(shù)、存儲空間和規(guī)則庫的規(guī)模等)設(shè)計出來的,依賴特定的環(huán)境(如必須用硬件或軟件)實(shí)現(xiàn)的。這其中,三重內(nèi)容尋址存儲器方法必須采用硬件實(shí)現(xiàn),只適于小規(guī)則庫,且不支持范圍匹配;基于比特向量的多維范圍匹配方法也需要硬件的輔助,而且該方法不利于規(guī)則庫的擴(kuò)展;GridofTries方法盡管查找速度挺快,但它只適合于二維前綴匹配查找;Tuple空間搜索方法的實(shí)現(xiàn)中,存在線性搜索問題,這影響了搜索的速度,盡管改進(jìn)方案使方法的效率提高了很多,但搜索時間仍與規(guī)則庫的規(guī)則條目的多少有關(guān);有向非循環(huán)圖DAG方法僅與分類器的維數(shù)K有關(guān),而與規(guī)則條目數(shù)無關(guān),但該方法在最壞情況下的空間復(fù)雜度太大;交叉乘積方法在最壞情況下的搜索時間得不到保證。從上述分析可以看出,絕大多數(shù)方法的性能都依賴于特定的硬件、規(guī)則條目數(shù),或域個數(shù)。RFC分類方法是由StanfordUniversity大學(xué)的PankajGupta與NickMcKeown提出的。參考附圖1所示,RFC分類方法的核心思想是,把數(shù)據(jù)包頭的S比特通過幾個階段的遞歸映射,最后映射成所屬類classID的T比特。每個階段都通過映射,成為相對前一階段更少的比特值。參考附圖2所示,RFC分類方法包括多個遞歸映射階段,每個階段都進(jìn)行一系列的并行內(nèi)存查找,每次查找返回的值都比內(nèi)存查找時輸入的值有更少的比特值。該方法的實(shí)現(xiàn)由預(yù)處理與查找兩部分組成。首先,對用戶配置的一系列規(guī)則進(jìn)行處理,在各個階段,產(chǎn)生一系列預(yù)處理后生成的預(yù)處理向量表(Preprocessedtable),存放在內(nèi)存中;然后,就可以根據(jù)數(shù)據(jù)包頭中多個域的值,在內(nèi)存中進(jìn)行多次并行的哈希運(yùn)算,查找各階段生成的預(yù)處理向量表,最后查到分類結(jié)果(即類的標(biāo)識)。RFC遞歸流分類方法,能夠解決任意多個域條件下的流分類問題,其性能不依賴于規(guī)則條目數(shù),也不依賴于特定的硬件,RFC分類方法的性能由階段個數(shù)和數(shù)的形狀(即各個域的組合情況)決定,這兩個參數(shù)決定了內(nèi)存查找的次數(shù)。當(dāng)階段數(shù)目增加時,所需的總內(nèi)存空間減少,但是在搜索過程中會增加內(nèi)存訪問次數(shù)和時間。但是數(shù)據(jù)包的分類規(guī)則的域一般有兩種某個范圍或某個確定的值,這樣就使得預(yù)處理過程相當(dāng)復(fù)雜。由于針對規(guī)則中的域包括的值是一個確定的值,還是一個范圍,其預(yù)處理應(yīng)該有很大的不同,而現(xiàn)有技術(shù)的RFC分類方法沒有很好的加以區(qū)分處理。而且,現(xiàn)有的RFC分類方法最后只是生成一個預(yù)處理向量表(table表)時,并沒有根據(jù)不同的業(yè)務(wù)特點(diǎn),進(jìn)行區(qū)別處理。本發(fā)明所述的數(shù)據(jù)包遞歸流分類方法,實(shí)現(xiàn)步驟如下一、預(yù)處理階段把規(guī)則庫中規(guī)則包含的字段分成多個域,確定遞歸分類的階段個數(shù)和各個域的組合情況;根據(jù)規(guī)則的域是確定值或范圍分別處理,并生成遞歸分類各階段的預(yù)處理向量表;1)第一階段,對每個域包括的值進(jìn)行分類,計算出各個域的等價類標(biāo)識號及其個數(shù),并把等價類識別號填入與各個域相對應(yīng)的第一階段的預(yù)處理向量表中;當(dāng)域的類型是單一確定值時首先對域內(nèi)的每一個整數(shù)值(0~2n-1,n為域的位數(shù))進(jìn)行循環(huán)取值;在循環(huán)的內(nèi)部,還包括下列處理步驟a.遍歷規(guī)則庫中每條規(guī)則的相對應(yīng)域的值,如果與循環(huán)中域的取值相等,修改類比特位圖對應(yīng)位的值(CBM值),否則,保持類比特位圖值不變;b.如果生成的比特位圖值是第一次出現(xiàn),記錄下該比特位圖值,更新等價類標(biāo)識,等價類標(biāo)識的總個數(shù)加1,并用新的等價類標(biāo)識號填入預(yù)處理向量表;c.否則,用原來的等價類標(biāo)識號填入預(yù)處理向量表;d.最后把類比特位圖值重置為初始值;當(dāng)域的類型是一個范圍時首先對域內(nèi)的每一個整數(shù)值(0~2n-1,n為域的位數(shù))進(jìn)行循環(huán)取值;在循環(huán)的內(nèi)部,還包括下列處理步驟a.遍歷規(guī)則庫中每條規(guī)則的相對應(yīng)域的左區(qū)間值,如果與循環(huán)中域的取值相等,修改類比特位圖對應(yīng)位的值(CBM值),否則,保持類比特位圖值不變;b.如果生成的比特位圖值是第一次出現(xiàn),記錄下該比特位圖值,更新等價類標(biāo)識,等價類標(biāo)識的總個數(shù)加1,并用新的等價類標(biāo)識號填入預(yù)處理向量表;c.否則,用原來的等價類標(biāo)識號填入預(yù)處理向量表;d.再遍歷規(guī)則庫中每條規(guī)則的域的右區(qū)間值,如果與循環(huán)中域的取值相等,把類比特位圖中該規(guī)則號對應(yīng)的位置重新設(shè)為0,并置規(guī)則結(jié)束標(biāo)志位為真;否則,保持類比特位圖值不變,規(guī)則結(jié)束標(biāo)志位為假;e.判斷規(guī)則結(jié)束標(biāo)志位的真假;如果為假,則重新判斷新生成的類比特位圖是否第一次出現(xiàn),如果是,更新等價類標(biāo)識,等價類標(biāo)識的總個數(shù)加1;如果為真,則循環(huán)下一個域的取值;f.如果為真,再判斷規(guī)則庫中是否有規(guī)則的左區(qū)間值等于循環(huán)中域的取值加1;如果是,則循環(huán)下一個域的取值;否則重新判斷新生成的類比特位圖是否第一次出現(xiàn),如果是,更新等價類標(biāo)識,等價類標(biāo)識的總個數(shù)加1;2)根據(jù)前一階段的預(yù)處理向量表,生成其它階段的預(yù)處理向量表;具體包括以下處理步驟a.根據(jù)進(jìn)行組合的域,分別循環(huán)選取每個預(yù)處理向量表中的一個等價類標(biāo)識的類比特位圖,將這些類比特位圖按位與,得到新的類比特位圖;b.根據(jù)所述類比特位圖生成本階段預(yù)處理向量表中所需的等價類標(biāo)識,填入本階段的預(yù)處理向量表中的相應(yīng)位置;3)讀取最后一階段生成的預(yù)處理向量表中的等價類標(biāo)識,找到與之對應(yīng)的類比特位圖,從所述類比特位圖的最低位開始查找,找到第一個為1的位,用該位所在的位置號代替預(yù)處理向量表中的等價類標(biāo)識號,更新最后一個階段的預(yù)處理向量表;二、查找階段將接收到的數(shù)據(jù)包在各階段的預(yù)處理向量表中查找,確定出數(shù)據(jù)包所屬的類標(biāo)識,根據(jù)數(shù)據(jù)包的類標(biāo)識對應(yīng)的服務(wù)類型對數(shù)據(jù)包進(jìn)行區(qū)分處理;具體包括以下處理步驟1)將接收到的數(shù)據(jù)包的包頭對應(yīng)分成多個域,每個域的值做為第一階段索引值在第一階段預(yù)處理向量表中進(jìn)行并行內(nèi)存查找;2)把前一階段的查找結(jié)果按照預(yù)處理階段域的組合情況,進(jìn)行組合,生成一個新的索引值,在下一級的預(yù)處理向量表中遞歸查找;如果為兩個域進(jìn)行組合,組合方式為下一級索引值等于上一級某個域A查找結(jié)果的值乘以與它組合的另一個域B的等價類標(biāo)識的個數(shù),然后加上域B的查找結(jié)果;如果為多域的組合,先以某兩個域組合的索引結(jié)果做為域的查找結(jié)果值再與第3個域進(jìn)行組合,以此類推;3)最后一個階段的查找結(jié)果獲得的值就是數(shù)據(jù)包所屬類的類標(biāo)識,然后根據(jù)數(shù)據(jù)包的類標(biāo)識對應(yīng)的服務(wù)類型對數(shù)據(jù)包進(jìn)行區(qū)分處理。本發(fā)明的方法能夠在多個域條件下,快速地進(jìn)行數(shù)據(jù)包的分類。方法的分類器具有相當(dāng)好的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)冗余性,能夠很好地為分類方法所用。本發(fā)明的方法是基于多階段逐步遞減的分類方法,用硬件實(shí)現(xiàn)時,每秒鐘能夠分類3000萬個數(shù)據(jù)包;用軟件實(shí)現(xiàn)時,每秒鐘能夠分類100萬個數(shù)據(jù)包。圖2為數(shù)據(jù)包遞歸分類示意圖。圖3為數(shù)據(jù)包頭域的劃分示意圖。圖4為本發(fā)明數(shù)據(jù)包遞歸流分類方法實(shí)施例中第一階段的處理流程圖。圖5是本發(fā)明數(shù)據(jù)包遞歸流分類方法實(shí)施例中的數(shù)據(jù)包遞歸分類示意圖。圖2所示的數(shù)據(jù)包遞歸分類示意圖,包括多個遞歸映射階段,每個階段都進(jìn)行一系列的并行內(nèi)存查找,每次查找返回的值都比內(nèi)存查找時輸入的值有更少的比特值。首先,對用戶配置的一系列規(guī)則進(jìn)行處理,在各個階段,產(chǎn)生一系列預(yù)處理后生成的預(yù)處理向量表(Preprocessedtable),存放在內(nèi)存中;然后,就可以根據(jù)數(shù)據(jù)包頭中多個域的值,在內(nèi)存中進(jìn)行多次并行的哈希運(yùn)算,查找各階段生成的預(yù)處理向量表,最后查到分類結(jié)果(即類的標(biāo)識)。數(shù)據(jù)包頭的F個域被分成多個chunk#,這多個chunk#就成為了第一階段并行內(nèi)存時的索引值,例如,圖3所示的源、目的IP地址等幾個域,就被分成8個chunk#。在后續(xù)階段,就把前一階段不同chunk#的內(nèi)存查找結(jié)果(用術(shù)語eqID來表示)按照某種規(guī)則組合在一起,形成一個新的索引值,然后再進(jìn)行內(nèi)存的查找,找到一個新的eqID。這樣遞歸查找,在最后階段,查找結(jié)果獲得一個確定的值,而該確定的值對應(yīng)的就是數(shù)據(jù)包所屬類的classID。根據(jù)該classID,就知道了數(shù)據(jù)包可得到何種服務(wù)類型。以下再具體說明本發(fā)明的數(shù)據(jù)包遞歸流分類方法的具體實(shí)現(xiàn)過程首先,是方法的預(yù)處理階段。對于預(yù)處理階段,其的第一階段與后續(xù)階段的處理方式是不一樣的。在預(yù)處理的第一階段,對規(guī)則庫中的每個chunk#域包括的值進(jìn)行分類,求出各個chunk#域的不同類別號(eqID)及其個數(shù),并把eqID按照一定的填充方式,填入與各個域相對應(yīng)的預(yù)處理向量表中(table表)。根據(jù)chunk#域包括的值是一個的確定的值,還是一個范圍,分別進(jìn)行了處理。當(dāng)是一個確定的值時,生成的類別號eqID對應(yīng)的是一個單個的值;當(dāng)是一個范圍時,生成的類別號eqID對應(yīng)的是一個范圍。圖4是處理的流程圖。圖中,一個CBM與一個類別號eqID相對應(yīng),用于標(biāo)識規(guī)則庫中哪些規(guī)則符合該eqID,如果某條規(guī)則條目符合該eqID,那么就在CBM的該規(guī)則條目位置置為1,形成的CBM如,0000110010010001001000,CBM包括的位數(shù)等于規(guī)則條目數(shù),每一位對應(yīng)一條規(guī)則條目。在預(yù)處理的其余階段,根據(jù)擬定的組合情況,采用與第一階段不同的處理方式。其處理過程如下對組合的每一個chunk#,循環(huán)遍歷每個chunk#的CBM,把要組合的每個chunk#域的CBM值按位與,生成一個CBM值。然后,判斷生成的CBM值是否是第一次出現(xiàn)。如果是,那么說明有一個新的eqID號出現(xiàn),因此eqID的總個數(shù)加1,同時記錄下該CBM值,并用新的eqID號填充table表。否則,用老的eqID號填充table表。通過這樣的循環(huán)遍歷,最后就生成了table表、各個CBM值及eqID的個數(shù)。很明顯的是,一個類比特位圖CBM中,有可能多個位為1,也就是說,根據(jù)與等價類標(biāo)識eqID對應(yīng)的類比特位圖CBM生成的預(yù)處理向量表,有很大的冗余性。因此,可以借助于這種冗余性,把所有的規(guī)則合在一起進(jìn)行處理。已知的是,每個的控制訪問列表號包括許多的規(guī)則條目,這其中最后的規(guī)則是一個默認(rèn)的可以匹配任何數(shù)據(jù)包的規(guī)則。如果用戶配置了多個不同的控制訪問列表號,這樣如果把所有的控制訪問列表號包含的規(guī)則合在一起進(jìn)行處理,生成最后的預(yù)處理向量表時,總是從各個eqID對應(yīng)的CBM的最低位開始查找,那么其結(jié)果肯定是不對的,因?yàn)槊總€控制訪問列表號都有多個可以匹配任何數(shù)據(jù)包的規(guī)則存在,查找CBM時,當(dāng)該數(shù)據(jù)包不匹配第一個控制訪問列表號的除最后一條規(guī)則外的所有規(guī)則時,該數(shù)據(jù)包仍然會匹配第一個控制訪問列表號的最后一條規(guī)則,而不會繼續(xù)往前,去查找第二個控制訪問列表號包括的規(guī)則條目。為此,在生成與各控制訪問列表號對應(yīng)的預(yù)處理向量表時,應(yīng)該從不同的控制訪問列表號包括的規(guī)則所在的起始位置進(jìn)行查找,而不是總是從最低位置開始進(jìn)行查找,這樣找到的第一個為1的bit所在的位置,對應(yīng)的規(guī)則條目一定屬于該控制訪問列表號包括的規(guī)則,然后就可以把該位置的位置號填入相應(yīng)的預(yù)處理向量表內(nèi)。最后,就生成與各個控制訪問列表號對應(yīng)的預(yù)處理向量表了。其次,是方法的查找階段。在其第一個階段,以數(shù)據(jù)包頭的多個chunk#為索引值,并行查找第一階段生成的各個table表,獲得各個eqID。然后,按照預(yù)處理階段設(shè)定的組合情況,把這多個eqID組合,生成一個新的索引值,在各個階段進(jìn)行查找。組合方式為index=eqID_a*sizeB+eqID_b,其中eqID_a、eqID_b為上一級Chunk#查表得到的結(jié)果,sizeB為Chunk#B中類別號的個數(shù)。通過這樣的遞進(jìn)查找,在最后階段的查找結(jié)果獲得了一個確定的值,而該確定的值對應(yīng)的就是數(shù)據(jù)包所屬類的classID(規(guī)則號)。根據(jù)該classID,就知道了數(shù)據(jù)包可以得到何種服務(wù)類型。當(dāng)然,在查找的最后階段也可以針對不同的應(yīng)用,進(jìn)行特定的查找。在上述二個必備條件的基礎(chǔ)上,為了節(jié)省內(nèi)存的使用、提高查找性能,還可以對RFC方法進(jìn)行如下的優(yōu)化處理。RFC方法預(yù)處理的最后一個階段,生成table表時,開始的處理與前面其余階段的處理類似,在table表中存放各個eqID號。接著的處理有所不同在這里,根據(jù)各個eqID對應(yīng)的CBM值,從最低位開始查找,找到第一個為1的位(最先匹配原則,如應(yīng)用在控制訪問列表中),用該位所在的位置號(相對應(yīng)于規(guī)則條目號)代替table表中的eqID號,這樣重新生成各個table表。很明顯的是,一個CBM中,有多個位置的值可能為1,也就是說,根據(jù)與eqID對應(yīng)的CBM值生成的table表,有很大的冗余性。因此,在查找CBM的各個bit位,找到第一個為1的bit時,可以進(jìn)行特殊處理。如果用戶在核心路由器的多個端口配置了不同的控制訪問列表號,已知的是,每個控制訪問列表號都有一個默認(rèn)的匹配任何數(shù)據(jù)包的規(guī)則。這樣,如果把所有的控制訪問列表號包含的規(guī)則合在一起,用RFC方法進(jìn)行處理,按上面的RFC方法生成最后的table表時,總是從各個eqID對應(yīng)的CBM值的最低位開始查找,那么其結(jié)果肯定是不對的,因?yàn)橛卸鄠€可以匹配任何數(shù)據(jù)包的規(guī)則存在,查找CBM時,首先找到的肯定是第一個控制訪問列表號的那個可以匹配任何數(shù)據(jù)包的規(guī)則。為此,在生成與各端口對應(yīng)的table表時,應(yīng)該從該端口包括的規(guī)則所在的起始位置進(jìn)行查找,而不是總是從最低位置開始進(jìn)行查找,這樣找到的第一個為1的bit所在的位置,對應(yīng)的規(guī)則條目一定屬于該端口配置的規(guī)則之一,然后把該位置寫入相應(yīng)的table表內(nèi)。最后,生成的table表就是與各端口對應(yīng)的table表了。上述的特殊處理,可以節(jié)省絕大部分RFC方法預(yù)處理階段需要的內(nèi)存使用。事實(shí)上,通過把各個控制訪問列表號的所有ACL條目混合在一起進(jìn)行預(yù)處理,然后只是在形成最后一個表時生成與各個端口對應(yīng)的預(yù)處理向量表。查找階段,開始的查找與前面必備條件下論述的查找方式基本相同,只是在查找最后一個表時,只查找與本端口對應(yīng)的預(yù)處理向量表,而不是預(yù)處理最后階段原先形成的那個table表,這種處理方式除了最后一個階段生成的多個table表外,只需維護(hù)一份其它階段生成的各個預(yù)處理向量table表,極大的節(jié)省了內(nèi)存的使用量。很明顯,如果不這樣處理,每個控制訪問列表號各自要維護(hù)一份自己的每個階段的各個table表,其占用的內(nèi)存量使用量是驚人的。此外,為了節(jié)省查找次數(shù)與時間,提高查找性能,還可以進(jìn)行如下的技巧性處理。在RFC方法預(yù)處理最后一個階段生成的預(yù)處理向量表中,存放的是數(shù)據(jù)包所屬類的規(guī)則號(classID),根據(jù)該classID,還需查找一次內(nèi)存才能獲得數(shù)據(jù)包可以得到的服務(wù)類型。實(shí)際上,這一次內(nèi)存查找是多余的。在處理時,可以用規(guī)則號對應(yīng)的服務(wù)類型代替規(guī)則號(classID)存放在最后一個階段生成的table表內(nèi),這樣查找最后一個預(yù)處理向量表,得到的直接就是規(guī)則號的服務(wù)類型。對于控制訪問列表來說,可以把服務(wù)類型permit或deny存放在預(yù)處理向量內(nèi)。另外,在查找階段,可以通過判斷預(yù)處理階段生成的各個預(yù)處理向量表的類別號(eqID)的個數(shù)來節(jié)省查找讀內(nèi)存的次數(shù)。當(dāng)知道預(yù)處理向量表的類別號(eqID)只有一類時,就可以不再從內(nèi)存中讀該預(yù)處理向量表,以獲得類別號(eqID),而是直接把該類別號設(shè)為零,因?yàn)楫?dāng)只有一個類別號時,該類別號肯定為零。這樣,也就節(jié)省了許多次的讀內(nèi)存次數(shù),特別當(dāng)有很多table表只有一類時。根據(jù)上述改進(jìn)的RFC方法的思想,把它應(yīng)用于實(shí)現(xiàn)某核心路由器的控制訪問列表(ACL)的快速數(shù)據(jù)包過濾的實(shí)現(xiàn)過程。表1所示,為規(guī)則庫中的規(guī)則條目。其中,前6條規(guī)則屬于標(biāo)準(zhǔn)ACL號1,后6條規(guī)則屬于擴(kuò)展ACL號105,每個ACL號的最后一條規(guī)則是默認(rèn)規(guī)則項(xiàng),它可以匹配任意數(shù)據(jù)包。從表中可以看到,該規(guī)則庫中包括的域有源IP地址、目的IP地址、源端口號、目的端口號、協(xié)議類型、TCP建鏈標(biāo)志ACK_RSTE及ICMP協(xié)議的類型等。其中,源端口與目的端口域都是一個范圍,在規(guī)則庫中,用源端口與目的端口的左端點(diǎn)與右端點(diǎn)來加于標(biāo)識。表1優(yōu)選實(shí)例的規(guī)則庫為了合理使用內(nèi)存,把源IP地址、目的IP地址分成了4個chunk#,這樣共有8個chunk#,這8個chunk#的組合情況如圖5所示??紤]到核心路由器上軟件系統(tǒng)的整個架構(gòu),把RFC方法的兩個部分——預(yù)處理與查找,分別在不同的軟件層進(jìn)行實(shí)現(xiàn)。其中,預(yù)處理部分放在IP層實(shí)現(xiàn),查找部分放在微碼層實(shí)現(xiàn)。由于核心路由器的整個軟件系統(tǒng)已經(jīng)占用了絕大部分內(nèi)存,而且查找所在的微碼層只能訪問到SDRAM內(nèi)存的很少一部分,而RFC方法所消耗的內(nèi)存非常大。核心路由器的接口板最多可以有24個端口,如果按常規(guī)考慮,每個端口各維護(hù)一份RFC方法預(yù)處理后生成的各個階段的多張table表,那么內(nèi)存的消耗肯定是巨大的,初步估算其內(nèi)存消耗可能有幾十兆,這種情況根本無法應(yīng)用于核心路由器的軟件系統(tǒng)中。為此,唯一的可行方法是讓所有端口共享這些table表。這樣,只需維護(hù)一份RFC方法預(yù)處理后生成的table表占用的內(nèi)存空間。但是,由于各個端口的配置的ACL號可能是不一樣的,如果把所有的規(guī)則條目混在一起后,那么最后進(jìn)行查找時,怎么來區(qū)分各個不同端口呢?為此,對最后一個階段生成的table表,根據(jù)前述最后一個階段的優(yōu)化處理方式進(jìn)行了特殊處理,根據(jù)不同端口配置的不同ACL號,從最后一個table表中再生成多份與各自端口對應(yīng)的table表,并根據(jù)規(guī)則條目號,把各自規(guī)則條目的Action(permit或deny)填入對應(yīng)的table表。這樣,按各自端口進(jìn)行查找,進(jìn)行最后一步查找時,查到的就是Action,根據(jù)該Action,就可以允許該數(shù)據(jù)包通過,或拒絕它通過。經(jīng)過這樣處理后,對24個端口的情況,并且每個table表中每個元素占用空間是一個byte時,其總共的內(nèi)存消耗大約為2.4M。最后,仍然需要強(qiáng)調(diào)的是,當(dāng)在預(yù)處理階段,對各個chunk#域的組合方式確定之后(相應(yīng)的其階段數(shù)也就確定了),方法的查找次數(shù)也就固定了。就優(yōu)選實(shí)例來說,按照現(xiàn)在對多個chunk#的組合方式來看,其查找次數(shù)是15次,即要讀15次內(nèi)存。這在規(guī)則條目較少的情況下,該方法的性能與線性查找差不多。但按照統(tǒng)計得來的數(shù)據(jù),一般用戶配置時,每個端口的規(guī)則條目平均為50條,因此用該方法是合適的。權(quán)利要求1.一種數(shù)據(jù)包遞歸流分類方法,其特征在于,實(shí)現(xiàn)所述方法的步驟是一、預(yù)處理階段把規(guī)則庫中規(guī)則包含的字段分成多個域,確定遞歸分類的階段個數(shù)和各個域的組合情況;根據(jù)規(guī)則的域是確定值或范圍分別處理,并生成遞歸分類各階段的預(yù)處理向量表;二、查找階段將接收到的數(shù)據(jù)包在各階段的預(yù)處理向量表中查找,確定出數(shù)據(jù)包所屬的類標(biāo)識,根據(jù)數(shù)據(jù)包的類標(biāo)識對應(yīng)的服務(wù)類型對數(shù)據(jù)包進(jìn)行區(qū)分處理。2.如權(quán)利要求1所述的數(shù)據(jù)包遞歸流分類方法,其特征在于,所述預(yù)處理階段的具體實(shí)現(xiàn)步驟是1)第一階段,對每個域包括的值進(jìn)行分類,計算出各個域的等價類標(biāo)識號及其個數(shù),并把等價類識別號填入與各個域相對應(yīng)的第一階段的預(yù)處理向量表中;2)根據(jù)前一階段的預(yù)處理向量表,生成其它階段的預(yù)處理向量表;3)讀取最后一階段生成的預(yù)處理向量表中的等價類標(biāo)識,找到與之對應(yīng)的類比特位圖,從所述類比特位圖的最低位開始查找,找到第一個為1的位,用該位所在的位置號代替預(yù)處理向量表中的等價類標(biāo)識號,更新最后一個階段的預(yù)處理向量表。3.如權(quán)利要求1或2所述的數(shù)據(jù)包遞歸流分類方法,其特征在于,所述預(yù)處理階段中的步驟2)還包括以下處理步驟a.根據(jù)進(jìn)行組合的域,分別循環(huán)選取每個預(yù)處理向量表中的一個等價類標(biāo)識的類比特位圖,將這些類比特位圖按位與,得到新的類比特位圖;b.根據(jù)所述類比特位圖生成本階段預(yù)處理向量表中所需的等價類標(biāo)識,填入本階段的預(yù)處理向量表中的相應(yīng)位置。4.如權(quán)利要求1或2所述的數(shù)據(jù)包遞歸流分類方法,其特征在于,所述預(yù)處理階段中的步驟1)還包括以下處理步驟當(dāng)域的類型是單一確定值時首先對域內(nèi)的每一個整數(shù)值(0~2n-1,n為域的位數(shù))進(jìn)行循環(huán)取值;在循環(huán)的內(nèi)部,還包括下列處理步驟a.遍歷規(guī)則庫中每條規(guī)則的相對應(yīng)域的值,如果與循環(huán)中域的取值相等,修改類比特位圖對應(yīng)位的值(CBM值),否則,保持類比特位圖值不變;b.如果生成的比特位圖值是第一次出現(xiàn),記錄下該比特位圖值,更新等價類標(biāo)識,等價類標(biāo)識的總個數(shù)加1,并用新的等價類標(biāo)識號填入預(yù)處理向量表;c.否則,用原來的等價類標(biāo)識號填入預(yù)處理向量表;d.最后把類比特位圖值重置為初始值;當(dāng)域的類型是一個范圍時首先對域內(nèi)的每一個整數(shù)值(0~2n-1,n為域的位數(shù))進(jìn)行循環(huán)取值;在循環(huán)的內(nèi)部,還包括下列處理步驟a.遍歷規(guī)則庫中每條規(guī)則的相對應(yīng)域的左區(qū)間值,如果與循環(huán)中域的取值相等,修改類比特位圖對應(yīng)位的值(CBM值),否則,保持類比特位圖值不變;b.如果生成的比特位圖值是第一次出現(xiàn),記錄下該比特位圖值,更新等價類標(biāo)識,等價類標(biāo)識的總個數(shù)加1,并用新的等價類標(biāo)識號填入預(yù)處理向量表;c.否則,用原來的等價類標(biāo)識號填入預(yù)處理向量表;d.再遍歷規(guī)則庫中每條規(guī)則的域的右區(qū)間值,如果與循環(huán)中域的取值相等,把類比特位圖中該規(guī)則號對應(yīng)的位置重新設(shè)為0,并置規(guī)則結(jié)束標(biāo)志位為真;否則,保持類比特位圖值不變,規(guī)則結(jié)束標(biāo)志位為假;e.判斷規(guī)則結(jié)束標(biāo)志位的真假;如果為假,則重新判斷新生成的類比特位圖是否第一次出現(xiàn),如果是,更新等價類標(biāo)識,等價類標(biāo)識的總個數(shù)加1;如果為真,則循環(huán)下一個域的取值;f.如果為真,再判斷規(guī)則庫中是否有規(guī)則的左區(qū)間值等于循環(huán)中域的取值加1;如果是,則循環(huán)下一個域的取值;否則重新判斷新生成的類比特位圖是否第一次出現(xiàn),如果是,更新等價類標(biāo)識,等價類標(biāo)識的總個數(shù)加1;5.如權(quán)利要求1所述的數(shù)據(jù)包遞歸流分類方法,其特征在于,所述查找階段的具體實(shí)現(xiàn)步驟是1)將接收到的數(shù)據(jù)包的包頭對應(yīng)分成多個域,每個域的值做為第一階段索引值在第一階段預(yù)處理向量表中進(jìn)行并行內(nèi)存查找;2)把前一階段的查找結(jié)果按照預(yù)處理階段域的組合情況,進(jìn)行組合,生成一個新的索引值,在下一級的預(yù)處理向量表中遞歸查找;如果為兩個域進(jìn)行組合,組合方式為下一級索引值等于上一級某個域A查找結(jié)果的值乘以與它組合的另一個域B的等價類標(biāo)識的個數(shù),然后加上域B的查找結(jié)果;如果為多域的組合,先以某兩個域組合的索引結(jié)果做為域的查找結(jié)果值再與第3個域進(jìn)行組合,以此類推;3)最后一個階段的查找結(jié)果獲得的值就是數(shù)據(jù)包所屬類的類標(biāo)識,然后根據(jù)數(shù)據(jù)包的類標(biāo)識對應(yīng)的服務(wù)類型對數(shù)據(jù)包進(jìn)行區(qū)分處理。全文摘要本發(fā)明公開了一種數(shù)據(jù)包遞歸流分類方法,包括以下處理步驟預(yù)處理階段,把規(guī)則庫中規(guī)則包含的字段分成多個域,確定遞歸分類的階段個數(shù)和各個域的組合情況;根據(jù)規(guī)則的域是確定值或范圍分別處理,并生成遞歸分類各階段的預(yù)處理向量表;查找階段,將接收到的數(shù)據(jù)包在各階段的預(yù)處理向量表中查找,確定出數(shù)據(jù)包所屬的類標(biāo)識,根據(jù)數(shù)據(jù)包的類標(biāo)識對應(yīng)的服務(wù)類型對數(shù)據(jù)包進(jìn)行區(qū)分處理。本發(fā)明的方法能夠在多個域條件下,快速地進(jìn)行數(shù)據(jù)包的分類。本發(fā)明的數(shù)據(jù)包遞歸流分類方法的分類器具有相當(dāng)好的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)冗余性,能夠很好地為分類方法所用。文檔編號G06F7/06GK1477494SQ0213664公開日2004年2月25日申請日期2002年8月20日優(yōu)先權(quán)日2002年8月20日發(fā)明者阮沈勇,馬彧,鐘衛(wèi)東申請人:深圳市中興通訊股份有限公司上海第二研究所,深圳市中興通訊股份有限公司上海第二
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1