專利名稱::一種實(shí)現(xiàn)多元數(shù)據(jù)包分類的方法及設(shè)備的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及網(wǎng)絡(luò)通信
技術(shù)領(lǐng)域:
,尤其涉及一種網(wǎng)絡(luò)中實(shí)現(xiàn)多元數(shù)據(jù)包分類的方法及裝置。
背景技術(shù):
:數(shù)據(jù)包分類技術(shù)是網(wǎng)絡(luò)提供更優(yōu)質(zhì)、更安全服務(wù)的基礎(chǔ)。其中的快速包分類技術(shù)則是實(shí)現(xiàn)高速路由器的關(guān)鍵技術(shù)之一?,F(xiàn)有技術(shù)中的包分類方法中,一種稱為RFC(RecursiveFlowClassification遞歸流分類)的包分類方法是目前已知的軟件算法中速度最快的包分類方法。所述的遞歸流分類RFC方法的工作原理是通過構(gòu)建RFC縮減樹,將包頭中參與分類的S長度比特?cái)?shù)據(jù)映射到相應(yīng)的多個(gè)階段的等價(jià)類上,其中每個(gè)映射稱為一次縮減,以達(dá)到加快分類速度的目的。下面將結(jié)合附圖1對(duì)上述RFC算法進(jìn)行詳細(xì)描述。在描述過程中假設(shè)采用的規(guī)則集包含有4條MJH,具體如表1所示表1<table>tableseeoriginaldocumentpage4</column></row><table>.首先,根據(jù)表1給定的規(guī)則集構(gòu)建一顆二階段RFC縮減樹,其中,規(guī)則集的每條規(guī)則中包含3個(gè)域,每個(gè)域值長度為3比特。則,二階段RFC縮減樹的構(gòu)建過程如下Phase0階段,將規(guī)則集的3個(gè)域(F1-F3)分別映射到圖1中對(duì)應(yīng)的3個(gè)預(yù)處理表(Chunk0-Chunk2)中。其中,每張預(yù)處理表的表項(xiàng)序號(hào)表示與該預(yù)處理表對(duì)應(yīng)的域的一種可能取值,例如ChunkO的表項(xiàng)表項(xiàng)序號(hào)"0"表示域F1的取值為'000,。而每張預(yù)處理表的表項(xiàng)內(nèi)容則為一個(gè)eqlD號(hào),所述的eqlD號(hào)存儲(chǔ)在與該預(yù)處理表相關(guān)聯(lián)的eqlD表中,根據(jù)相應(yīng)的CBM位串確定。所述的CBM位串長度與規(guī)則集中的規(guī)則數(shù)相同,且CBM位串由高到低的每一位順序?qū)?yīng)一個(gè)規(guī)則號(hào)。以ChunkO中的eqlD號(hào)的確定為例表項(xiàng)序號(hào)"0"對(duì)應(yīng)的域F1取值為'000,,檢查每條規(guī)則,只有R4的F1域取值與'000,匹配,則CBM位串中與R4對(duì)應(yīng)的位置'1,(表示匹配表項(xiàng)序號(hào)"0"對(duì)應(yīng)的域F1的取值'000,),其余位置'0,,即表項(xiàng)序號(hào)"0"對(duì)應(yīng)的CBM位串為'0001,。該位串第一次出現(xiàn),因此將其填入ChunkO對(duì)應(yīng)的eqlD表的首位,并分配eqlD號(hào)為'0'。同理,表項(xiàng)序號(hào)"1"對(duì)應(yīng)的域F1的取值為'001,,相應(yīng)的CBM位串為'1101,,將該CBM位串填入eqlD表的第二位,并分配eqlD號(hào)為'1,。按照同樣的方法,依次各表項(xiàng)序號(hào)對(duì)應(yīng)的eqID號(hào)。Phase1階段,計(jì)算Phase0階段中各eqlD表的交叉乘積表(Cross-ProductingTable,CPT).。其中,所述的交叉乘積表的每個(gè)表項(xiàng)序號(hào)代表了eqlD0-eqlD2的一種組合(eqlD0eqlD1eqlD2),例如表A的表項(xiàng)序號(hào)"0"代表(eqlD0eqlD1eqlD2)的組合'000,。而所述的交叉乘積表的表項(xiàng)內(nèi)容為一個(gè)新的eqlD號(hào),所述的新的eqlD號(hào)存儲(chǔ)在與交叉乘積表對(duì)應(yīng)的eqlD表中,交叉乘積表中的eqlD號(hào)通過以下方法獲得對(duì)于每一個(gè)表項(xiàng)序號(hào),將該表項(xiàng)序號(hào)所代表的eqlD組合中各eqlD號(hào)對(duì)應(yīng)的CBM位串按位相與,得到一個(gè)新的CBM位串;若該CBM位串在eqlD表中已出現(xiàn)過,則將其對(duì)應(yīng)的eqlD號(hào)填入表項(xiàng),否則分配一個(gè)新的eqlD號(hào),并在eqlD表中添加一條新的紀(jì)錄。例如,表A的表項(xiàng)"0"代表(eqlD0eqlD1eqlD2)='000,,對(duì)應(yīng)的3個(gè)CBM位串分別為'0001,,'0001,和'0011,,按位相"與"得到新的CBM位串為'0001,,分配eqlD為'0,。完成上述二階段縮減樹的構(gòu)建,即可根據(jù)該二階段縮減樹對(duì)數(shù)據(jù)包進(jìn)行分類,以數(shù)據(jù)包頭P(010,100,011)的查找過程為例,包括Phase0階段,用P1=010,P2=100和P3=011分別索引Chunk0-Chunk2,查找匹配的eqlD號(hào),得到(eqlD0eqlD1eqlD2)-221。Phase1階段,按照lndex=eqlD0*3*2+eqlD1*2+eqlD2查找交叉乘積表A,匹配表項(xiàng)序號(hào)"17",查表A得到eqlD號(hào)-3,其對(duì)應(yīng)的CBM位串為'0011,,表示規(guī)則R3和R4均匹配,但按照最佳匹配原則,數(shù)據(jù)包匹配規(guī)則R3。在實(shí)現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題1)RFC算法對(duì)內(nèi)存的需求隨著規(guī)則集的規(guī)模及要匹配的包頭域的數(shù)量急劇增大。針對(duì)多元數(shù)據(jù)包如果采用RFC方法進(jìn)行分類,將占用過多的內(nèi)存資源,影響系統(tǒng)性能。2)多核處理器構(gòu)架是未來處理器技術(shù)的發(fā)展方向,但現(xiàn)有技術(shù)中的數(shù)據(jù)包分類方法都是基于通用處理器實(shí)現(xiàn)的,還沒有基于多核處理器構(gòu)架設(shè)計(jì)的數(shù)據(jù)包分類方法。
發(fā)明內(nèi)容本發(fā)明的實(shí)施例提供了一種實(shí)現(xiàn)多元數(shù)據(jù)包分類的方法及設(shè)備,使得多元數(shù)據(jù)包的分類過程中降低了對(duì)內(nèi)存空間的需求,并保證較快的包分類速度。為解決上述技術(shù)問題,本發(fā)明實(shí)施例首先通過構(gòu)建基于二維包分類算法的數(shù)據(jù)結(jié)構(gòu)找到所有可能匹配源地址和目的地址的規(guī)則組,對(duì)所述的各組規(guī)則分別編碼并生成對(duì)應(yīng)的代碼塊,通過所述代碼塊描述規(guī)則中除所述源地址和目的地址外的其他字段,完成對(duì)數(shù)據(jù)的預(yù)處理過程;然后,采用所述的二維包分類的源地址和目的地址匹配的一組規(guī)則所對(duì)應(yīng)的代碼塊;最后,采用解釋器解釋執(zhí)行所述代碼塊,對(duì)待分類數(shù)據(jù)包中除所述源地址和目的地址外的其他字段進(jìn)行匹配,獲得最終的凄t據(jù)包分類結(jié)果。由上述本發(fā)明的實(shí)施例提供的技術(shù)方案可以看出,由于采用基于二維包分類算法數(shù)據(jù)結(jié)構(gòu)和執(zhí)行代碼塊尋找匹配規(guī)則的數(shù)據(jù)包分類方法,因此,本發(fā)明實(shí)施例大大降低了對(duì)內(nèi)存空間的需求,并提高了多元數(shù)據(jù)包分類的速度。圖1為現(xiàn)有技術(shù)中RFC包分類方法的示意圖2為本發(fā)明實(shí)施例提供的處理過程示意圖3為本發(fā)明實(shí)施例提供的多元數(shù)據(jù)包分類過程的示意圖4為本發(fā)明實(shí)施例構(gòu)造縮減樹的過程示意圖5為本發(fā)明實(shí)施例中對(duì)規(guī)則進(jìn)行編碼的過程示意圖6為本發(fā)明實(shí)施例中的指令格式的結(jié)構(gòu)示意圖7為本發(fā)明實(shí)施例提供的多元數(shù)據(jù)包分類設(shè)備的結(jié)構(gòu)示意圖。具體實(shí)施例方式在本發(fā)明實(shí)施例中,為了降低多元數(shù)據(jù)包分類過程中對(duì)內(nèi)存空間的需求,并保證較快的包分類速度,提供了一種實(shí)現(xiàn)多元數(shù)據(jù)包分類的技術(shù)方案,通過分析實(shí)際的包分類規(guī)則集,發(fā)現(xiàn)匹配一對(duì)給定的〈源IP地址,目的IP地址〉的規(guī)則數(shù),在絕大多數(shù)情況下(99%)不多于5個(gè),因此,本發(fā)明實(shí)施例中提出可將多元數(shù)據(jù)包分類問題劃分為兩個(gè)子問題,即1)用數(shù)據(jù)包的源IP地址和目的IP地址找到所有匹配的規(guī)則;2)在匹配的規(guī)則中進(jìn)一步匹配其它字段,最終找到優(yōu)先級(jí)最高的分類規(guī)則。本發(fā)明實(shí)施例提供的針對(duì)多元數(shù)據(jù)包分類的處理方案如圖2所示,具體可以包括以下步驟步驟1,通過基于二維包分類算法構(gòu)建數(shù)據(jù)結(jié)構(gòu)找到所有可能匹配源地址和目的地址的身見則組,對(duì)所述的MJ'J組分別編碼并生成對(duì)應(yīng)的代碼塊,通過該代碼塊描述規(guī)則中除所述源地址和目的地址外的其他字段;該步驟為本發(fā)明實(shí)施例的預(yù)處理過程,其中,生成對(duì)應(yīng)的代碼塊的處理具體可以包括首先,對(duì)各組規(guī)則中的每條規(guī)則編碼為一條指令,生成每組規(guī)則對(duì)應(yīng)的代碼塊,并為所述代碼塊分配相應(yīng)的存儲(chǔ)空間;之后,將各代碼塊存儲(chǔ)空間首地址存放到所述數(shù)據(jù)結(jié)構(gòu)中對(duì)應(yīng)的各組規(guī)則指向的位置;步驟2,采用二維包分類算法對(duì)待分類數(shù)據(jù)包的源地址和目的地址進(jìn)行匹配獲得與所述待分類數(shù)據(jù)包的源地址和目的地址匹配的一組規(guī)則所對(duì)應(yīng)代碼塊;步驟3,釆用解釋器解釋執(zhí)行所述代碼塊,對(duì)待分類數(shù)據(jù)包中除所述源地址和目的地址外的其他字段進(jìn)行匹配,獲得數(shù)據(jù)包分類結(jié)果。該步驟中具體可以包括解釋器首先獲得所述數(shù)據(jù)結(jié)構(gòu)中的存儲(chǔ)空間首地址;之后,根據(jù)所述存儲(chǔ)空間首地址載入對(duì)應(yīng)存儲(chǔ)空間中的代碼塊,并執(zhí)行該代碼塊,以獲得匹配的規(guī)則號(hào)。為提高多元數(shù)據(jù)包的分類速度,在上述本發(fā)明實(shí)施例中,所述的二維包分類算法可以但不僅限于應(yīng)用遞歸流分類RFC算法。其中,在采用所述的RFC算法的本發(fā)明應(yīng)用實(shí)施例中,其運(yùn)行速度與RFC算法相當(dāng),但大大降低了對(duì)內(nèi)存空間的需求。以采用RFC算法及解釋器執(zhí)行對(duì)IP數(shù)據(jù)包進(jìn)行處理為例,本發(fā)明實(shí)施例在實(shí)現(xiàn)過程中具體可以包括以下的預(yù)處理過程和兩個(gè)階段查找過程預(yù)處理過程,如圖4、5所示,首先生成RFC縮減樹數(shù)據(jù)結(jié)構(gòu),在完成了基于源/目的IP地址構(gòu)造縮減樹的操作后,還需要將通過RFC縮減樹匹配獲得的所有可能的規(guī)則列表進(jìn)行編碼,以生成對(duì)應(yīng)的代碼塊。其中,每一規(guī)則列表被編碼成特定的指令,如CISC指令等,通過相應(yīng)的指令描述規(guī)則中除源IP地址和目的IP地址以外的其它字段;即在構(gòu)造RFC縮減樹后,需要對(duì)得到所有規(guī)則列表中的規(guī)則進(jìn)行編碼,并組織為相應(yīng)的代碼塊,如空間連續(xù)的代碼塊等;在該過程中生成RFC縮減樹數(shù)據(jù)結(jié)構(gòu)與現(xiàn)有技術(shù)中的RFC算法不同的是在最后一個(gè)交叉乘積表中,并未保存最后匹配的規(guī)則號(hào),而是保存將在第二階段查找過程被執(zhí)行的代碼塊的存儲(chǔ)空間首地址;第一階段查找過程,如圖3所示,使用與RFC算法相似的縮減樹處理源/目的IP地址,即利用RFC算法進(jìn)行源/目的IP地址的匹配處理,從而獲得匹配的規(guī)則列表所對(duì)應(yīng)的代碼塊存儲(chǔ)空間首地址,該匹配的規(guī)則列表中包含一個(gè)或多個(gè)規(guī)則,即采用RFC縮減樹對(duì)待分類數(shù)據(jù)包的〈源IP地址,目的IP地址〉進(jìn)行匹配,找到匹配這一對(duì)地址的所有規(guī)則;第二階段查找過程,從第一階段查找過程獲得的匹配的規(guī)則列表中找到最后匹配的規(guī)則,即執(zhí)行第一階段查找過程得到的相應(yīng)代碼塊獲得匹配結(jié)果,具體可以利用從RFC縮減樹查到的首地址裝載目標(biāo)代碼塊,并由解釋器執(zhí)行該代碼塊,以對(duì)待分類數(shù)據(jù)包中除所述源地址和目的地址外的其他字段進(jìn)行匹配,返回與輸入數(shù)據(jù)包匹配的規(guī)則號(hào)(RuleID)作為最后的匹配結(jié)果。上處理過程算法可以簡稱為TIC(Two-stageInterpretingbasedClassification,基于解釋的二階段包分類算法),采用TIC實(shí)施包分類查找過程前,須完成預(yù)處理過程。參照?qǐng)D4和圖5所示,上述本發(fā)明實(shí)施例中預(yù)處理處理過程具體可以包括以下處理過程(1)在縮減樹phase2交叉乘積表(CPT10)中表項(xiàng)設(shè)置為指向其位串表(eqlD20)中相應(yīng)表項(xiàng)入口;為每個(gè)位串分配一塊存儲(chǔ)空間,為提高訪問效率,相應(yīng)的存儲(chǔ)空間可以與cacheline(高速緩沖存儲(chǔ)器存儲(chǔ)界)空間大小相同并保持?jǐn)?shù)據(jù)對(duì)齊,將各個(gè)位串對(duì)應(yīng)的存儲(chǔ)空間的首地址填入所有指向該位串的交叉乘積表的表項(xiàng)中;(2)完成相應(yīng)的存儲(chǔ)空間的分配后,則對(duì)位串表示的待處理規(guī)則進(jìn)行編碼,相應(yīng)的編碼過程可以包括從位串的最高位(表示最高優(yōu)先級(jí)的規(guī)則,然后優(yōu)先級(jí)遞減)開始依次尋找第一階段匹配的規(guī)則,根據(jù)規(guī)則的匹配模式和指令規(guī)范進(jìn)行編碼,之后將指令字節(jié)碼依次壓入分配到的代碼塊空間中;代碼塊的空間大小為一個(gè)cacheline(如64bytes或32bytes),當(dāng)壓入一定數(shù)量的指令后代碼塊空間可能會(huì)出現(xiàn)溢出,若出現(xiàn)溢出,則需要分配一個(gè)新的代碼塊空間,并將新代碼塊空間的首地址作為'GOTO'指令的操作數(shù),將GOTO指令放到上一代碼塊最后4bytes,并用NOP指令填滿GOTO指令和上一代碼塊最后一條指令之間的空隙;繼續(xù)在新代碼塊空間中壓入指令,重復(fù)以上過程直到位串表示的所有規(guī)則都被編碼且壓入代碼塊。當(dāng)eqlD20中所有的位串都被處理后,如圖3所示,CPT10中的所有表項(xiàng)也均被填入對(duì)應(yīng)的代碼塊首地址,此時(shí),便可以釋放eqlD20的存儲(chǔ)空間,本發(fā)明實(shí)施例的預(yù)處理過程結(jié)束。在上述預(yù)處理過程中,需要使用相應(yīng)的指令規(guī)范進(jìn)行編碼,該指令規(guī)范具體可以但不限于如表2和表3所示表2.TIC算法中指令規(guī)范說明<table>tableseeoriginaldocumentpage10</column></row><table><table>tableseeoriginaldocumentpage11</column></row><table>表3.TIC|二法中指令規(guī)范說明(續(xù))<table>tableseeoriginaldocumentpage11</column></row><table>上標(biāo)序號(hào)^L明1:匹配范圍的上界值2:匹配范圍的下界值3:低16bits為下一個(gè)相關(guān)代碼塊的首地址基于該表2和表3,根據(jù)規(guī)則的匹配模式和指令規(guī)范進(jìn)行編碼的過程如圖5所示,在該過程中,相應(yīng)的規(guī)則的匹配模式可以為通配、高段端口、低段端口、任意范圍匹配或精確匹配等。本發(fā)明實(shí)施例中,為盡量壓縮存儲(chǔ)空間并提高指令執(zhí)行效率,在第一階段具體可以采用CISC指令格式中包含一個(gè)8比特的操作符和一個(gè)16比特的規(guī)則號(hào),其中操作符用于指示該指令的具體操作類型,規(guī)則號(hào)則用于標(biāo)識(shí)該指令所對(duì)應(yīng)的規(guī)則(在規(guī)則成功匹配后將會(huì)被指令返回)。另外,本發(fā)明實(shí)施例中提供了3種類型的CISC指令格式,如圖6所示,這3種類型的CISC指令格式的長度分別為4字節(jié)、8字節(jié)和16字節(jié),其中,4字節(jié)的CISC指令格式中還包括一個(gè)8比特的operand0;8字節(jié)的CISC指令格式中還包括一個(gè)8比特的operandO,可選的包括一個(gè)16比特的operand1;16字節(jié)的CISC指令格式中還包括一個(gè)8比4爭的operand0,一個(gè)16比凈寺的operand1和一個(gè)16比凈爭的operand3,可選的包4舌一個(gè)16t匕凈爭^ioperand2,和/或一個(gè)16t匕凈爭^;operand4。其中,operand0用于協(xié)議號(hào)的匹配計(jì)算,operand1-operand4用于源/目的端口號(hào)的匹配計(jì)算。進(jìn)一步的,在本發(fā)明實(shí)施例中,將規(guī)則集中端口號(hào)的匹配模式可以劃分為5類,包括WC(Wildcard通配),HI([1024:65535]高段端口)LO(低段端口),AR(ArbitraryRange任意范圍匹配)和EM(ExactMatch精確匹配);將協(xié)議號(hào)的匹配模式分為兩類,分別為WC和EM。同時(shí),本發(fā)明實(shí)施例為規(guī)則的每一種匹配模式分配相應(yīng)的操作符。具體的每種匹配模式對(duì)應(yīng)的操作符可查閱表2、表3得到。下面對(duì)上述本發(fā)明實(shí)施例中第一階^R查找的處理過程進(jìn)行說明,在第一階段查找過程可以采用的處理過程具體可以包括如圖3所示,使用與RFC算法相似的縮減樹處理源/目的IP地址,即利用RFC算法進(jìn)行源/目的IP地址的匹配處理,從而獲得匹配的規(guī)則列表所對(duì)應(yīng)的代碼塊地址,該匹配的規(guī)則列表中包含一個(gè)或多個(gè)規(guī)則,即采用RFC縮減樹對(duì)數(shù)據(jù)包的〈源IP地址,目的IP地址〉進(jìn)行匹配,找到匹配這一對(duì)地址的所有規(guī)則。下面再對(duì)上述本發(fā)明實(shí)施例中第二階段查找的處理過程進(jìn)行說明,在第二階段查找過程可以采用的處理過程具體可以包括在第一階段查找結(jié)束后,解釋器程序?qū)⒖梢缘玫酱龍?zhí)行的代碼塊首地址,此時(shí),解釋器將載入以該首地址開始的代碼塊;載入代碼塊后,解釋器開始解釋并執(zhí)行當(dāng)前指令字節(jié)碼,若輸入的網(wǎng)絡(luò)包頭中協(xié)議號(hào)、源和目的端口號(hào)皆在指令執(zhí)行過程中符合操作符和相應(yīng)操作數(shù)所定義的匹配語義,則執(zhí)行結(jié)果返回true,即表示查找過程搜索到最佳匹配規(guī)則,解釋器返回該規(guī)則的ID;否則,解釋器繼續(xù)解釋執(zhí)行下一條指令;若當(dāng)前代碼塊中所有指令的執(zhí)行結(jié)果均沒有返回true(即均返回false),則相應(yīng)的GOTO指令將被執(zhí)行,返回附加代碼塊首地址。根據(jù)該地址,解釋器載入新的代碼塊并依次執(zhí)行該代碼塊中指令直到查找到最佳匹配規(guī)則。Input:Ei〃addressofthefirstencodedblock(輸入代碼塊首地址Ei)Output:ID〃idofthebestmatchingrule(輸出最匹配的規(guī)則ID)1:entry=Ei;(輸入Ei)2:fetch(entry);〃readtheblock(i賣代碼塊)3:while(getlnstruction()〃getaninstructionoftheblock(從代碼塊中順序取出一條指令)4:result=decode—execute();(執(zhí)行當(dāng)前指令字節(jié)碼)5:if(result)6:returnID;(返回規(guī)則ID)7:ds68:continue;(執(zhí)行下一條指令)9:}10:entry=Ei+1;〃anotherblockmustbefetched(返回代碼塊首地址)11:goto2;(返回第2步)在上述處理過程中,對(duì)于不同的存儲(chǔ)架構(gòu),相應(yīng)的載入代碼塊具有不同的含義在具備cache存儲(chǔ)架構(gòu)中,需要將代碼塊讀入到cache;當(dāng)不具備cache時(shí),則可以將代碼塊讀入片內(nèi)存儲(chǔ)器,如對(duì)于lntelIXP2800NetworkProcessor(網(wǎng)絡(luò)處理器),可以將代碼塊讀入LocalMemory(本地存儲(chǔ)器)。為便于對(duì)本發(fā)明實(shí)施例的理解,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施例的具體實(shí)現(xiàn)方案進(jìn)行詳細(xì)描述。本實(shí)現(xiàn)方案以基于5元組〈源IP地址,目的IP地址,協(xié)議,源端口,目的端口〉的IP數(shù)據(jù)包的分類過程為例,設(shè)定規(guī)則集如表4所示,為便于描述,不妨將所述的分類過程分為如圖2所示的數(shù)據(jù)預(yù)處理階段及規(guī)則匹配階段,其中表4.一個(gè)含有5條規(guī)則的5域規(guī)則集<table>tableseeoriginaldocumentpage14</column></row><table>數(shù)據(jù)預(yù)處理階段首先根據(jù)表4提供的規(guī)則集構(gòu)建如圖4所示的RFC縮減樹Phase0階段,將源IP地址(Src.lP)的第1、2字節(jié)和源IP地址的第3、4字節(jié),目的IP地址(Des.lP)的第1、2字節(jié)和目的IP地址的第3、4字節(jié)分別映射到預(yù)處理表ChunkO-Chunk3中。其中,每張預(yù)處理表的表項(xiàng)序號(hào)表示與該預(yù)處理表對(duì)應(yīng)的地址字節(jié)的一種可能取值,而每張預(yù)處理表的表項(xiàng)內(nèi)容則為一個(gè)eqlD號(hào)。Phase1階段,計(jì)算PhaseO階段得到的eqlD01表和eqlD02表的交叉成績表CPT00,及eqlD03表和eqlD04表的交叉乘積表CPT01,并分別生成對(duì)應(yīng)的eqlD10表和eqlD11表。Phase2階段,計(jì)算Phase1階段得到的交叉乘積表CPT00和CPT01的交叉乘積表CPT10,并生成對(duì)應(yīng)的eqlD20表。生成關(guān)于〈源IP地址,目的IP地址〉的RFC縮減樹。如圖4所示,在eqlD20構(gòu)造完成之后,得到4個(gè)不同的CBM位串'00001,,'00101,,'10101,和'01011',為所述的4個(gè)CBM位串分別分配存儲(chǔ)空間,并將存儲(chǔ)空間的首地址填入表CPT10中對(duì)應(yīng)的表項(xiàng)中。另外,所述的4個(gè)CBM位串分別表示4個(gè)規(guī)則列表[R4],[R2,R4],[R0,R2,R4]和[R1,R3,R4],然后對(duì)4個(gè)規(guī)則列表分別編碼。以CBM位串'01011,為例,即對(duì)規(guī)則列表[R1,R3,R4]的規(guī)則R1、R3、R4順序編碼,并依次壓入CBM位串'01011,對(duì)應(yīng)的存儲(chǔ)空間,其具體編碼過程如下查表2、表4可知R1規(guī)則中的協(xié)議號(hào)(Protocol)'17,為精確匹配,源端口號(hào)(Src.Port)'*,為通配,目的端口號(hào)(Des.Port)'>,為高段端口,故R1的指令操作符為'EM_WC—Hl,,得到具體編碼指令'00000100000100010000000000000001,(即0x04),并將該指令壓入CBM位串'01011,對(duì)應(yīng)的存儲(chǔ)空間中,然后,將R3和R4按照同樣的方法進(jìn)行編碼并依次壓入代碼塊。其中,R3的指令搡作符為'EM—WC—AR,,對(duì)應(yīng)的編碼指令為'0000001100010001000000000000001100000000000111100000000000010100,(即0x03),R4的指令操作符為'WC_WC—WC,,對(duì)應(yīng)的編碼指令為'00001010000000000000000000000100,(即0x0A)。另外,查表2可知R1,R3和R4編碼后的指令長度分別為4字節(jié),8字節(jié)和4字節(jié),在代碼塊中共占用16bytes空間。由于16bytes小于代碼塊的64bytes空間大小,因此不需要申請(qǐng)新的存儲(chǔ)空間,并且用操作符'NOP,對(duì)應(yīng)的指令將存儲(chǔ)空間填滿。完成對(duì)所述的RFC縮減樹中表eqlD20中各CBM位串表示的規(guī)則列表的編碼后,釋方丈表eqlD20的存儲(chǔ)空間。在上述應(yīng)用實(shí)施例中,可以但不僅限于通過下述代碼段對(duì)所述的規(guī)則列表進(jìn)行編碼TIC一Preprocessor(ClassifierC){1:5—IP—Ad—Pair=getIPAdPair(C);〃從規(guī)則集中取出源/目的IP地址域2:C_Port_Protocol=getPortProtocol(C);〃從規(guī)則集中取出協(xié)議和源/目的端口號(hào)域3:Code—Port—Protocol=encode(C—Port—Protocol);〃對(duì)每個(gè)規(guī)則中的協(xié)議和源/目的端i5號(hào)i進(jìn)行編碼——4:setPhaseOChunks(C—IP—Ad—Pair);〃將源/目的IP地址映射到縮減樹的Chunk0Chunk3中5:setPhaselChunks();〃通過ChunkOChunkl計(jì)算得到CPTOO和CPTOl6:setPhase2Chunk();〃通過CPT00和CPT01計(jì)算得到CPTIO,并保留eqlD20表中的位串信息7:while(currentBS=getBitStr(eqlD20)){〃依次從eqlD20表中取出位串8:address=initCodeBlock();//初始化一個(gè)新的代碼塊空間9:setAddress(CPT10,currentBS,address);〃將CPT10表中對(duì)應(yīng)當(dāng)前位串的所有表項(xiàng)設(shè)置為代碼塊首地址10:while(currentRule=getRule(currentBS)){〃從當(dāng)前位串中依次得到待匹配的規(guī)則號(hào)11:flag=addCode(currentRule,Code_Port—Protocol);〃將規(guī)則號(hào)在Code_Port_Protocol中對(duì)應(yīng)的編碼指令加入當(dāng)前代碼塊中12'if(flag==false){〃如果當(dāng)前代碼塊己經(jīng)沒有足夠的空間13'temple=initCodeBlock();〃初始化一個(gè)新的附加代碼塊空間14setGoto(temple);〃在當(dāng)前代碼塊中設(shè)置指針指向附加代碼塊15address=temple;16addCode(currentRule,Code_Port—Protocol);〃將規(guī)則號(hào)在Code—Port_Protocol中對(duì)應(yīng)的編碼指令加入附加代碼塊中17J〃if18}〃while19}〃while20}〃TIC—Preprocessor規(guī)則匹配階段在本階段中首先提取待分類數(shù)據(jù)包的包頭信息,并用其中的<源IP地址,目的IP地址〉字段在上述的RFC縮減樹上進(jìn)行查找,找出匹配該對(duì)地址字段的規(guī)則所在的代碼塊存儲(chǔ)空間首地址,然后執(zhí)行該代碼塊中的指令,并最終返回匹配的規(guī)則號(hào)。下面以數(shù)據(jù)包頭P〈0.83.1.32,0.0.4.6,17,23,22>為例詳細(xì)說明所述的規(guī)則匹配過程步驟1)根據(jù)數(shù)據(jù)包頭P中的相應(yīng)字段83,288,0和1030分別索引表Chunk0國Chunk3,得到(691000691001691002691003)=1201,其中'83,、'288,、'0,和'1030,分別是地址字段'0.83,、'1.32,,'0.0,和'4.6,對(duì)應(yīng)的十進(jìn)制字段;步驟2)按照lndex00=eqlD00*3+eqlD01和Index01=eqlD02*2+eqlD03分別檢索到交叉乘積表CPT01和CPT01的相應(yīng)表項(xiàng)內(nèi)容為'2,和'1,;步驟3)按照lndex10=eqlD10*2+eqlD11檢索到交叉乘積表CPT10的表項(xiàng)序號(hào)'5,,并讀出該表項(xiàng)內(nèi)的代碼塊存儲(chǔ)空間的首地址;步驟4)根據(jù)步驟3)中得到的首地址,將相應(yīng)存儲(chǔ)空間中的代碼塊載入到高速緩存器或其它片內(nèi)儲(chǔ)存器,并依次執(zhí)行上述代碼塊中的指令,并返回匹配規(guī)則號(hào)R3,具體可以包括首先執(zhí)行第一條指令'000。0100000100010000000000000001,,其中,第0-7位'00000100,為操作符,表示該規(guī)則的協(xié)議匹配模式為精確匹配,源端口匹配規(guī)則為通配,目的端口匹配^見則為>1024;第815位'00010001,為操作數(shù),表示協(xié)議精確匹配17;第16~31位'0000000000000001'為該指令所對(duì)應(yīng)的規(guī)則號(hào)1。執(zhí)行過程為"7==77y>&<&("22>=7024J不4'i,廠ef〃/fe/se,即協(xié)議號(hào)匹配,但目的端口不匹配,故返回'false,。繼續(xù)執(zhí)行下一條指令"000000110001000100000000000000"00000000000111100000000000010100",其中,第07位'00000011,為操作符,表示該規(guī)則的協(xié)議匹配模式為精確匹配,源端口匹.配規(guī)則為通配,目的端口匹配規(guī)則為范圍匹配;第815位'00010001,為搡作數(shù),表示協(xié)議精確匹配17;第16-31位'0000000000000011,為該指令對(duì)應(yīng)的規(guī)則號(hào)3;第3263位'00000000000111100000000000010100,為操作數(shù),表示目的端口號(hào)大于等于20且小于等于30。執(zhí)行過程為〃7=="/7y>&&("30>=22>=20>ti,refwAT7rtv/e/D,即協(xié)議號(hào)與目的端口均匹配,返回'3,,表示數(shù)據(jù)包匹配規(guī)則R3,查找結(jié)束。還適用于其他多元數(shù)據(jù)包的分類。對(duì)于實(shí)現(xiàn)其他多元數(shù)據(jù)包分類的具體實(shí)現(xiàn)方案,本領(lǐng)域的技術(shù)人員可以依據(jù)上述應(yīng)用實(shí)施例的描述并結(jié)合現(xiàn)有技術(shù)輕易聯(lián)想到,因此不再詳細(xì)描述。本發(fā)明實(shí)施例還提供一種多元數(shù)據(jù)包分類的設(shè)備,其結(jié)構(gòu)如圖7所示,具體實(shí)現(xiàn)結(jié)構(gòu)可以包括預(yù)處理模塊,用于生成基于二維包分類算法查找源地址和目的地址的數(shù)據(jù)結(jié)構(gòu),并對(duì)由所述數(shù)據(jù)結(jié)構(gòu)獲得的所有可能的規(guī)則組進(jìn)行編碼,以生成各組規(guī)則對(duì)應(yīng)的代碼塊,通過所述代碼塊描述規(guī)則中除所述源地址和目的地址外的其他字段;包頭信息提取模塊,用于提取待分類的數(shù)據(jù)包的包頭信息;二維包分類算法匹配模塊,用于通過所述二維包分類算法數(shù)據(jù)結(jié)構(gòu)對(duì)所述包頭信息提取模塊獲得的數(shù)據(jù)包中的源地址和目的地址進(jìn)行匹配,獲得與所述數(shù)據(jù)包的源地址和目的地址匹配的一組規(guī)則所對(duì)應(yīng)代碼塊的存儲(chǔ)空間首地址;解釋器,用于根據(jù)所述的存儲(chǔ)空間首地址載入所述預(yù)處理模塊獲得的代碼塊,執(zhí)行該代碼塊中的指令,對(duì)待分類數(shù)據(jù)包中除所述源地址和目的地址外的其他字段進(jìn)行匹配,獲得匹配的規(guī)則號(hào)作為包分類的結(jié)果。為適應(yīng)不同的存儲(chǔ)架構(gòu),基于多核多線程處理器體系結(jié)構(gòu)實(shí)現(xiàn)的該多元數(shù)據(jù)包分類設(shè)備中解釋器在載入所述預(yù)處理模塊獲得的代碼塊的過程中具體可以將代碼塊載入到高速緩存器或片內(nèi)存儲(chǔ)器,例如,在具備高速緩存器的情況下,將代碼塊載入高速緩存器;否則,將代碼塊載入片內(nèi)存儲(chǔ)器。本發(fā)明實(shí)施例的設(shè)備還可以包括首地址存儲(chǔ)模塊,用于保存所述預(yù)處理模塊獲得的代碼塊所在的存儲(chǔ)空間的首地址,并提供給所述解釋器。上述本發(fā)明具體應(yīng)用實(shí)施例與RFC算法相比具有的有益效果包括(1)運(yùn)行速度與RFC相當(dāng),但內(nèi)存需求小得多這是因?yàn)镽FC算法對(duì)規(guī)則集中所有域的匹配均使用縮減樹,而縮減樹占用內(nèi)存空間大小隨著規(guī)則中域的數(shù)量增加呈現(xiàn)非線性增長;TIC則僅使用縮減樹匹配源/目的IP地址域,其它域的匹配利用解釋器進(jìn)行,從而避免了縮減樹占用過多內(nèi)存空間。實(shí)驗(yàn)數(shù)據(jù)表明,TIC比RFC減少27。/o-97o/。的內(nèi)存需求,平均減少66%。(2)更新性能好實(shí)驗(yàn)數(shù)據(jù)表明,TIC比RFC減少50。/o-97。/。的規(guī)則集更新處理時(shí)間,平均減少80%。(3)適用于不同存儲(chǔ)結(jié)構(gòu)的多核多線程架構(gòu)這是因?yàn)門IC算法充分利用了并行多核體系結(jié)構(gòu)的特點(diǎn),在提高對(duì)CPU計(jì)算能力的依賴的同時(shí)減少了算法對(duì)外部存儲(chǔ)器的訪問次數(shù),從而合理利用了多核結(jié)構(gòu)中強(qiáng)大的CPU計(jì)算能力,避免了存儲(chǔ)訪問瓶頸。另一方面,解釋器能夠高效地運(yùn)行在具備cache或不具備cache的體系結(jié)構(gòu)中,對(duì)規(guī)則進(jìn)行編碼并分塊組織保證了解釋器最大限度地訪問cache數(shù)據(jù),在不具備cache的情況下,算法顯式地將指令塊讀入片內(nèi)存儲(chǔ)器同樣可以保證解釋器在執(zhí)行指令期間最大限度訪問片內(nèi)存儲(chǔ)器上的數(shù)據(jù)。TIC算法在lntelCore2DuoX86和lntelIXP2800網(wǎng)絡(luò)處理器上分別使用4線程和32線程時(shí)均獲得了10Gbps的分類速度,而且實(shí)驗(yàn)數(shù)據(jù)表明算法具有幾乎線性的加速比,這意味著當(dāng)有更多可用的計(jì)算核時(shí),還可以獲得更高的分類速度。以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本
技術(shù)領(lǐng)域:
的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。權(quán)利要求1、一種實(shí)現(xiàn)多元數(shù)據(jù)包分類的方法,其特征在于,包括通過構(gòu)建基于二維包分類算法的數(shù)據(jù)結(jié)構(gòu)找到所有可能匹配源地址和目的地址的規(guī)則組,對(duì)所述的各組規(guī)則分別編碼并生成對(duì)應(yīng)的代碼塊,通過所述代碼塊描述規(guī)則中除所述源地址和目的地址外的其他字段;采用所述的二維包分類算法對(duì)待分類數(shù)據(jù)包的源地址和目的地址進(jìn)行匹配獲得與所述待分類數(shù)據(jù)包的源地址和目的地址匹配的一組規(guī)則所對(duì)應(yīng)的代碼塊;采用解釋器解釋執(zhí)行所述代碼塊,對(duì)待分類數(shù)據(jù)包中除所述源地址和目的地址外的其他字段進(jìn)行匹配,獲得數(shù)據(jù)包分類結(jié)果。2、根據(jù)權(quán)利要求1所述的方法,其特征在于,所述的生成對(duì)應(yīng)的代碼塊的處理具體包括對(duì)各組規(guī)則中的每條規(guī)則編碼為一條指令,生成每組規(guī)則對(duì)應(yīng)的代碼塊,并為所述代碼塊分配相應(yīng)的存儲(chǔ)空間;將各代碼塊存儲(chǔ)空間首地址存放到所述數(shù)據(jù)結(jié)構(gòu)中與其對(duì)應(yīng)的一組規(guī)則指向的位置。3、根據(jù)權(quán)利要求2所述的方法,其特征在于,解釋器解釋執(zhí)行所述代碼塊的過程具體包括獲得所述數(shù)據(jù)結(jié)構(gòu)中的存儲(chǔ)空間首地址;根據(jù)所述存儲(chǔ)空間首地址載入對(duì)應(yīng)存儲(chǔ)空間中的代碼塊,并執(zhí)行該代碼塊。4、根據(jù)權(quán)利要求3所述的方法,其特征在于,該方法還包括在具備高速緩存器的處理器結(jié)構(gòu)中,將所述的代碼塊載入高速緩存器;或者,在不具備高速緩存器的處理器結(jié)構(gòu)中,將所述的代碼塊載入片內(nèi)存儲(chǔ)器。5、根據(jù)權(quán)利要求1至4任一項(xiàng)所述的方法,其特征在于,所述的編碼的處理過程包括按照預(yù)定的指令格式對(duì)所述各組規(guī)則進(jìn)行編碼,所述的指令格式包含操作符、操作數(shù)和規(guī)則號(hào),其中,所述的操作符用于指示指令的具體操作類型,所述的規(guī)則號(hào)用于標(biāo)識(shí)指令所對(duì)應(yīng)的規(guī)則,所述操作數(shù)用于進(jìn)行協(xié)議號(hào)、源端口或目的端口的匹配計(jì)算。6、根據(jù)權(quán)利要求2、3或4所述的方法,其特征在于,為所述代碼塊分配相應(yīng)的存儲(chǔ)空間的處理包括當(dāng)針對(duì)一組規(guī)則的編碼獲得的代碼塊需要多個(gè)存儲(chǔ)空間時(shí),則采用操作符'GOTO,作為從一個(gè)存儲(chǔ)空間跳轉(zhuǎn)到另一個(gè)存儲(chǔ)控制的指令。7、一種實(shí)現(xiàn)多元數(shù)據(jù)包分類的設(shè)備,其特征在于,包括預(yù)處理模塊,用于生成基于二維包分類算法查找源地址和目的地址的數(shù)據(jù)結(jié)構(gòu),并對(duì)由所述數(shù)據(jù)結(jié)構(gòu)獲得的所有可能的MJ'J組進(jìn)行編碼,以生成對(duì)應(yīng)的代碼塊,通過所述代碼塊描述規(guī)則中除所述源地址和目的地址外的其他字段;包頭信息提取模塊,用于提取待分類的數(shù)據(jù)包的包頭信息;二維包分類算法匹配模塊,用于通過所述二維包分類算法數(shù)據(jù)結(jié)構(gòu)對(duì)所述包頭信息提取模塊獲得的數(shù)據(jù)包中的源地址和目的地址進(jìn)行匹配,獲得與所述數(shù)據(jù)包的源地址和目的地址匹配的一組規(guī)則所對(duì)應(yīng)的代碼塊;解釋器,用于載入所述預(yù)處理模塊獲得的代碼塊,執(zhí)行該代碼塊中的指令,的規(guī)則號(hào)作為包分類的結(jié)果。8、根據(jù)權(quán)利要求7所述的設(shè)備,其特征在于,該設(shè)備還包括首地址存儲(chǔ)模塊,用于保存所述預(yù)處理模塊獲得的代碼塊所在的存儲(chǔ)空間的首地址,并提供給所述解釋器。全文摘要一種實(shí)現(xiàn)多元數(shù)據(jù)包分類的方法及設(shè)備,具體包括基于二維包分類算法構(gòu)建匹配源/目的地址的數(shù)據(jù)結(jié)構(gòu),獲得所有匹配的規(guī)則組并分別編碼,以生成對(duì)應(yīng)的代碼塊,通過該代碼塊描述規(guī)則中除所述源地址和目的地址外的其他字段;采用所述的二維包分類算法對(duì)數(shù)據(jù)包的源地址和目的地址進(jìn)行匹配獲得與所述數(shù)據(jù)包的源地址和目的地址匹配的一組規(guī)則所對(duì)應(yīng)的代碼塊;之后,采用解釋器解釋執(zhí)行所述代碼塊,獲得數(shù)據(jù)包分類結(jié)果。本發(fā)明實(shí)施例的實(shí)現(xiàn)降低了多元數(shù)據(jù)包分類過程中對(duì)內(nèi)存空間的需求,并提高了包分類速度。文檔編號(hào)H04L12/56GK101340363SQ20071016106公開日2009年1月7日申請(qǐng)日期2007年12月24日優(yōu)先權(quán)日2007年12月24日發(fā)明者蓓華,唐錫南,程海鵬申請(qǐng)人:中國科學(xué)技術(shù)大學(xué)