線速軟多元組報(bào)文分類方法
【專利摘要】本發(fā)明公開了一種線速軟多元組報(bào)文分類方法,其步驟為:(1)將規(guī)則中的端口字段轉(zhuǎn)換為對(duì)應(yīng)的前綴閉包,得到一個(gè)不連續(xù)掩碼前綴集;首先將端口字段轉(zhuǎn)為對(duì)應(yīng)的前綴閉包,即形成一個(gè)覆蓋其區(qū)間且可以表示為前綴形式的最短的區(qū)間;然后將五維前綴集的各個(gè)維度連接起來,得到一個(gè)不連續(xù)掩碼的前綴集;(2)通過上述不連續(xù)掩碼前綴集構(gòu)造CMT數(shù)據(jù)結(jié)構(gòu);(3)使用CMT結(jié)構(gòu)查找算法實(shí)現(xiàn)高速報(bào)文分類。本發(fā)明具有查找速度快、硬件開銷小、能耗低等優(yōu)點(diǎn)。
【專利說明】線速軟多元組報(bào)文分類方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明主要涉及到網(wǎng)絡(luò)技術(shù)中報(bào)文轉(zhuǎn)發(fā)領(lǐng)域,特指一種線速軟多元組報(bào)文分類方法。
【背景技術(shù)】
[0002]數(shù)據(jù)包分類(Packet Classificat1n)是實(shí)現(xiàn)報(bào)文轉(zhuǎn)發(fā)的一項(xiàng)關(guān)鍵步驟,也是完成報(bào)文轉(zhuǎn)發(fā)的關(guān)鍵技術(shù)。數(shù)據(jù)包分類可描述為:針對(duì)IP數(shù)據(jù)包頭內(nèi)的五元組信息(源目IP,源目端口,協(xié)議號(hào)),找出匹配該數(shù)據(jù)包頭的最佳規(guī)則。其中,每一條規(guī)則由五段范圍組成(源目IP,源目端口,協(xié)議號(hào)),源目IP以前綴形式表示,源目端口以區(qū)間形式表示,協(xié)議號(hào)一般為精確值。這里“最佳規(guī)則”是指所有匹配規(guī)則中掩碼最精確,區(qū)間最短的規(guī)則。
[0003]目前,大部分高端路由器的數(shù)據(jù)包分類算法都由TCAM實(shí)現(xiàn)。TCAM采用了線性查找的方式逐條判斷每一條規(guī)則是否匹配,并通過并行化、流水線等硬件技術(shù)獲得了接近一次訪存的查找效率。TCAM有著很高的能耗和價(jià)格,而且規(guī)則數(shù)不能太大(當(dāng)前主流的TCAM容量一般為512K條規(guī)則)。此外,一些網(wǎng)絡(luò)設(shè)備在設(shè)計(jì)時(shí)沒有提供TCAM硬件,進(jìn)一步限制了該算法的應(yīng)用場(chǎng)景。
[0004]另外,相應(yīng)的軟件分類方法也有很多,大概可分為基于叉乘(Cross Producting)、組空間(Tuple Space)、決策樹(Decis1n Tree)的三種。基于叉乘的方法(如RFC)有著極高的內(nèi)存開銷,基于組空間的方法(Tuple Space Search)只適用于掩碼種類不大的規(guī)則集,基于決策樹的方法(如EGT-PC)則有著很慢的規(guī)則更新速度。
【發(fā)明內(nèi)容】
[0005]本發(fā)明要解決的技術(shù)問題就在于:針對(duì)現(xiàn)有技術(shù)存在的技術(shù)問題,本發(fā)明提供一種查找速度快、硬件開銷小、能耗低的線速軟多元組報(bào)文分類方法。
[0006]為解決上述技術(shù)問題,本發(fā)明采用以下技術(shù)方案:
[0007]—種線速軟多元組報(bào)文分類方法,其步驟為:
[0008](I)將規(guī)則中的端口字段轉(zhuǎn)換為對(duì)應(yīng)的前綴閉包,得到一個(gè)不連續(xù)掩碼前綴集;首先將端口字段轉(zhuǎn)為對(duì)應(yīng)的前綴閉包,即形成一個(gè)覆蓋其區(qū)間且可以表示為前綴形式的最短的區(qū)間;然后將五維前綴集的各個(gè)維度連接起來,得到一個(gè)不連續(xù)掩碼的前綴集;
[0009](2)通過上述不連續(xù)掩碼前綴集構(gòu)造CMT數(shù)據(jù)結(jié)構(gòu);
[0010](3)使用CMT結(jié)構(gòu)查找算法實(shí)現(xiàn)高速報(bào)文分類。
[0011]作為本發(fā)明的進(jìn)一步改進(jìn):所述步驟(2)的具體步驟為:
[0012](2.a)將整個(gè)前綴集作為CMT結(jié)構(gòu)的根節(jié)點(diǎn);
[0013](2.b)使用根節(jié)點(diǎn)的公共掩碼修剪前綴集中的每一項(xiàng),如果修剪后的前綴集和之前不一致,該前綴將被移入該項(xiàng)的子節(jié)點(diǎn)中;
[0014](2.c)對(duì)節(jié)點(diǎn)中的所有項(xiàng)進(jìn)行排序,使前綴相同的項(xiàng)位于相鄰的位置;
[0015](2.d)合并前綴相同的項(xiàng),將這些項(xiàng)的子節(jié)點(diǎn)合并成一個(gè)大的子節(jié)點(diǎn),并更新該子節(jié)點(diǎn)的公共掩碼。
[0016]作為本發(fā)明的進(jìn)一步改進(jìn):所述步驟(2)還包括:步驟(2.e):若子節(jié)點(diǎn)出現(xiàn)沖突,即子節(jié)點(diǎn)掩碼與父節(jié)點(diǎn)相等,則進(jìn)行分表操作,否則對(duì)所有新生成的子節(jié)點(diǎn)遞歸的執(zhí)行組織算法。
[0017]作為本發(fā)明的進(jìn)一步改進(jìn):在進(jìn)行分表算法時(shí),將整個(gè)節(jié)點(diǎn)分為多個(gè)次級(jí)節(jié)點(diǎn);即:針對(duì)節(jié)點(diǎn)N,取一個(gè)表項(xiàng)集合X,從N中第一項(xiàng)開始,若當(dāng)前前綴加入X后,X的公共掩碼將與N的父節(jié)點(diǎn)掩碼相等,則將該前綴移入一個(gè)新的次級(jí)節(jié)點(diǎn)N’,否則將其加入X中;若之后N’仍處于沖突狀態(tài),則遞歸的對(duì)N’進(jìn)行分表操作。
[0018]作為本發(fā)明的進(jìn)一步改進(jìn):所述步驟(I)的具體步驟為:
[0019](1.1)將端口范圍轉(zhuǎn)化為二進(jìn)制表示;
[0020](1.2)對(duì)于上下界的二進(jìn)制表示,從最高位開始,如果上界和下界相等,則前綴閉包在該位上取相應(yīng)的值,否則之后無論上下界是否相等都取*。
[0021]作為本發(fā)明的進(jìn)一步改進(jìn):所述步驟(3)的具體步驟為:搜索時(shí),首先在CMT的根節(jié)點(diǎn)中根據(jù)第一次劃分的公共掩碼對(duì)五元組數(shù)據(jù)進(jìn)行修剪,找到根節(jié)點(diǎn)中隊(duì)?wèi)?yīng)的等價(jià)類;之后,使用該子節(jié)點(diǎn)的公共掩碼遞歸的對(duì)五元組數(shù)據(jù)進(jìn)行后續(xù)的查找,直到不存在額外的子節(jié)點(diǎn)為止。
[0022]作為本發(fā)明的進(jìn)一步改進(jìn):還包括步驟(4):更新步驟,使用CMT插入、刪除和重構(gòu)方法實(shí)現(xiàn)規(guī)則集更新操作。
[0023]作為本發(fā)明的進(jìn)一步改進(jìn):所述插入操作是根據(jù)CMT的結(jié)構(gòu)將新規(guī)則置入相應(yīng)的節(jié)點(diǎn)中,若新規(guī)則不適應(yīng)CMT已有的結(jié)構(gòu),則在其最后一次可置入的節(jié)點(diǎn)中新加一個(gè)線性表,將規(guī)則置于其中,并在每次查找到該節(jié)點(diǎn)時(shí)檢查這個(gè)線性表;在新規(guī)則數(shù)達(dá)到一定規(guī)模的時(shí)候可對(duì)CMT進(jìn)行重構(gòu)操作,即將每一個(gè)存在線性表的節(jié)點(diǎn)中的所有規(guī)則提出,將這些規(guī)則重新組織為一個(gè)新的節(jié)點(diǎn),并替換原來的節(jié)點(diǎn)。
[0024]作為本發(fā)明的進(jìn)一步改進(jìn):所述刪除操作是在每個(gè)節(jié)點(diǎn)中記錄此節(jié)點(diǎn)所有后裔中所包含的規(guī)則數(shù)量,刪除規(guī)則時(shí)將此規(guī)則所在的節(jié)點(diǎn),及該節(jié)點(diǎn)所有祖先的計(jì)數(shù)減1,同時(shí)刪掉計(jì)數(shù)為O的節(jié)點(diǎn)。
[0025]作為本發(fā)明的進(jìn)一步改進(jìn):所述重構(gòu)方法是從根節(jié)點(diǎn)開始搜索含有線性表的節(jié)點(diǎn),如果發(fā)現(xiàn)了這樣的節(jié)點(diǎn),重構(gòu)方法會(huì)將此節(jié)點(diǎn)及其所有子孫中所包含的前綴集合成一個(gè)額外的節(jié)點(diǎn),并針對(duì)此節(jié)點(diǎn)執(zhí)行構(gòu)造方法,最后用此不包含線性表的節(jié)點(diǎn)替換原節(jié)點(diǎn)。
[0026]與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
[0027]1、本發(fā)明的線速軟多元組報(bào)文分類方法,具有極快的查找速度,極快的規(guī)則更新速度,且內(nèi)存占用開銷小、能耗低,能夠支持IP字段前綴掩碼不連續(xù)的規(guī)則,支持任意維度的多元組規(guī)則,且維度的增加不會(huì)對(duì)性能造成明顯的影響。
[0028]2、本發(fā)明的線速軟多元組報(bào)文分類方法,應(yīng)用場(chǎng)景廣泛,成本低廉,能耗節(jié)約的數(shù)據(jù)包分類方法;其基本方法為將規(guī)則集中的每一條規(guī)則轉(zhuǎn)換為相應(yīng)的多維前綴,并利用這些前綴的公共掩碼將傳統(tǒng)前綴匹配問題轉(zhuǎn)化為多級(jí)精確匹配問題,后者可用哈希表達(dá)到接近0(1)的查找速率。同時(shí),利用CPU提供的原子操作實(shí)現(xiàn)了一套多核環(huán)境中的快速規(guī)則更新算法。
【專利附圖】
【附圖說明】
[0029]圖1是本發(fā)明在具體應(yīng)用實(shí)例中規(guī)則集及轉(zhuǎn)換后的前綴集示意圖。
[0030]圖2是本發(fā)明在具體應(yīng)用實(shí)例中前綴集及對(duì)應(yīng)的CMT數(shù)據(jù)結(jié)構(gòu)示意圖。
[0031]圖3是本發(fā)明在具體應(yīng)用實(shí)例中由示例前綴集構(gòu)造CMT的構(gòu)造方法的示意圖。
[0032]圖4是本發(fā)明在具體應(yīng)用實(shí)例中構(gòu)造過程出現(xiàn)沖突情況的示意圖。
[0033]圖5是本發(fā)明在具體應(yīng)用實(shí)例中為解決沖突所采用的分表算法偽代碼。
[0034]圖6是本發(fā)明在具體應(yīng)用實(shí)例中CMT的插入規(guī)則算法偽代碼。
[0035]圖7是本發(fā)明在具體應(yīng)用實(shí)例中CMT的重構(gòu)算法偽代碼。
[0036]圖8是本發(fā)明在具體應(yīng)用實(shí)例中CMT的刪除規(guī)則算法偽代碼。
[0037]圖9是本發(fā)明在具體應(yīng)用實(shí)例中CMT的查找算法偽代碼。
[0038]圖10是本發(fā)明的流程示意圖。
【具體實(shí)施方式】
[0039]以下將結(jié)合說明書附圖和具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步詳細(xì)說明。為清晰表述本發(fā)明的方法,以下假設(shè)規(guī)則的IP,端口字段皆為4個(gè)位寬,協(xié)議號(hào)字段為2個(gè)位寬,不連續(xù)掩碼前綴為4個(gè)位寬。
[0040]本發(fā)明的線速軟多元組報(bào)文分類方法,為:將規(guī)則集中的每一條規(guī)則轉(zhuǎn)換為相應(yīng)的多維前綴,并利用這些前綴的公共掩碼將傳統(tǒng)前綴匹配問題轉(zhuǎn)化為多級(jí)精確匹配問題;多級(jí)精確匹配問題用哈希表達(dá)到接近0(1)的查找速率。進(jìn)一步,還可以在上述方法的基礎(chǔ)上,利用CPU提供的原子操作實(shí)現(xiàn)了一套多核環(huán)境中的快速規(guī)則更新方法。
[0041]如圖10所示,本發(fā)明的線速軟多元組報(bào)文分類方法,其具體步驟為:
[0042](I)將規(guī)則中的端口字段轉(zhuǎn)換為對(duì)應(yīng)的前綴閉包,從而得到一個(gè)不連續(xù)掩碼前綴集。
[0043]如圖1所示,任何一個(gè)五元組規(guī)則都可以轉(zhuǎn)化為一個(gè)掩碼不連續(xù)的前綴集。由于五元組規(guī)則中的端口字段不是前綴,所以首先將端口字段轉(zhuǎn)為對(duì)應(yīng)的前綴閉包,即,形成一個(gè)覆蓋其區(qū)間且可以表示為前綴形式的最短的區(qū)間。然后,將五維前綴集的各個(gè)維度連接起來,得到一個(gè)不連續(xù)掩碼的前綴集。
[0044]例如,針對(duì)一個(gè)4位的機(jī)器,[5,6]的前綴閉包為01**即[4,7],這樣即可將五元組規(guī)則集轉(zhuǎn)化為一個(gè)五維的前綴集,將這五個(gè)維度合起來就成了一個(gè)不連續(xù)掩碼前綴集(為表述方便,下文中的規(guī)則集特指此轉(zhuǎn)化后的不連續(xù)掩碼前綴集)。
[0045]在具體應(yīng)用實(shí)例中,步驟(I)的具體步驟為:
[0046](1.1)將端口范圍轉(zhuǎn)化為二進(jìn)制表示,如:[5,6]可表示為[1001, 1010];
[0047](1.2)對(duì)于上下界的二進(jìn)制表示,從最高位開始,如果上界和下界相等,則前綴閉包在該位上取相應(yīng)的值,否則之后無論上下界是否相等都取*。如:[1001,1010]的前綴閉包為 10**,即[4,7] O
[0048](2)通過上述不連續(xù)掩碼前綴集構(gòu)造CMT數(shù)據(jù)結(jié)構(gòu)。
[0049]通過步驟⑴獲取了整個(gè)規(guī)則集的公共掩碼,即所有規(guī)則掩碼的與⑷操作結(jié)果,并根據(jù)每一條規(guī)則被公共掩碼修剪后的值對(duì)整個(gè)規(guī)則集做一個(gè)劃分。針對(duì)被劃分到同一個(gè)等價(jià)類中的多條規(guī)則,采用遞歸的方法,通過這個(gè)等價(jià)類的公共掩碼繼續(xù)對(duì)這個(gè)子集進(jìn)行劃分,直到每個(gè)等價(jià)類中的所有規(guī)則掩碼都相等。由于一次劃分可能產(chǎn)生多個(gè)等價(jià)類,這樣就用多叉樹來表示這些等價(jià)類之間的關(guān)系,每一個(gè)等價(jià)類對(duì)應(yīng)于CMT中的一個(gè)節(jié)點(diǎn),將這樣的數(shù)據(jù)結(jié)構(gòu)稱為公共掩碼樹(Common Mask Tree, CMT)。
[0050]如圖2所示,CMT數(shù)據(jù)結(jié)構(gòu)為一個(gè)多叉樹,其中每一個(gè)節(jié)點(diǎn)由以下幾個(gè)部分組成:1、一組以哈希表形式存儲(chǔ)的前綴集(表項(xiàng));11、該前綴集的公共掩碼(灰色部分)。其中,每個(gè)表項(xiàng)有可能關(guān)聯(lián)一個(gè)子節(jié)點(diǎn),圖中以實(shí)箭頭表示。
[0051]另外,在構(gòu)造CMT的過程中有可能出現(xiàn)沖突,為了解決沖突,將一個(gè)節(jié)點(diǎn)分為多個(gè)次級(jí)節(jié)點(diǎn),次級(jí)節(jié)點(diǎn)之間用虛箭頭連接表示。
[0052]如圖3所示,在一個(gè)具體應(yīng)用實(shí)例中,對(duì)于以下示例前綴集:
[0053]pi 0101 ;
[0054]p2 111* ;
[0055]p3 I林* ;
[0056]p4 01** ;
[0057]p5 101* ;
[0058]本發(fā)明可以按圖中a?e所示的步驟構(gòu)造出一個(gè)CMT數(shù)據(jù)結(jié)構(gòu):
[0059](2.a)將整個(gè)前綴集作為CMT結(jié)構(gòu)的根節(jié)點(diǎn);
[0060](2.b)使用根節(jié)點(diǎn)的公共掩碼修剪前綴集中的每一項(xiàng),如果修剪后的前綴集和之前不一致,該前綴將被移入該項(xiàng)的子節(jié)點(diǎn)中;
[0061](2.c)對(duì)節(jié)點(diǎn)中的所有項(xiàng)進(jìn)行排序,使前綴相同的項(xiàng)位于相鄰的位置;
[0062](2.d)合并前綴相同的項(xiàng),將這些項(xiàng)的子節(jié)點(diǎn)合并成一個(gè)大的子節(jié)點(diǎn),并更新該子節(jié)點(diǎn)的公共掩碼;
[0063]作為較佳的實(shí)施例,本實(shí)例中進(jìn)一步包括解決某個(gè)節(jié)點(diǎn)的掩碼和其父節(jié)點(diǎn)掩碼相等情況的步驟。步驟(2.e):若子節(jié)點(diǎn)出現(xiàn)沖突(即子節(jié)點(diǎn)掩碼與父節(jié)點(diǎn)相等),則進(jìn)行分表操作,否則對(duì)所有新生成的子節(jié)點(diǎn)遞歸的執(zhí)行組織算法。
[0064]如圖4所示,在構(gòu)造CMT結(jié)構(gòu)時(shí),如果出現(xiàn)某個(gè)節(jié)點(diǎn)的掩碼和其父節(jié)點(diǎn)掩碼相等的情況,上述構(gòu)造有可能會(huì)陷入死循環(huán),將這種情況下稱之為:節(jié)點(diǎn)存在沖突(clogged)。為解決沖突,如圖5所示,進(jìn)行的分表算法,將整個(gè)節(jié)點(diǎn)分為多個(gè)次級(jí)節(jié)點(diǎn)。具體步驟如下,針對(duì)節(jié)點(diǎn)N,取一個(gè)表項(xiàng)集合X,從N中第一項(xiàng)開始,若當(dāng)前前綴加入X后,X的公共掩碼將與N的父節(jié)點(diǎn)掩碼相等,則將該前綴移入一個(gè)新的次級(jí)節(jié)點(diǎn)N’(行6),否則將其加入X中(行
8)。若之后N’仍處于沖突狀態(tài),則遞歸的對(duì)N’進(jìn)行分表操作(行11)。
[0065](3)使用CMT結(jié)構(gòu)查找算法實(shí)現(xiàn)高速報(bào)文分類。
[0066]搜索時(shí),首先在CMT的根節(jié)點(diǎn)中根據(jù)第一次劃分的公共掩碼對(duì)五元組數(shù)據(jù)進(jìn)行修剪,從而找到根節(jié)點(diǎn)中隊(duì)?wèi)?yīng)的等價(jià)類(子節(jié)點(diǎn))。之后,使用該子節(jié)點(diǎn)的公共掩碼遞歸的對(duì)五元組數(shù)據(jù)進(jìn)行后續(xù)的查找,直到不存在額外的子節(jié)點(diǎn)為止。由于節(jié)點(diǎn)中所有規(guī)則的掩碼都相等,每次查找僅需I次左右的訪存次數(shù)。
[0067](4)更新步驟:使用CMT插入、刪除和重構(gòu)方法實(shí)現(xiàn)規(guī)則集更新操作。
[0068]更新步驟具體可以分為插入和刪除兩個(gè)部分。
[0069]插入操作是根據(jù)CMT的結(jié)構(gòu)將新規(guī)則置入相應(yīng)的節(jié)點(diǎn)中,若新規(guī)則不適應(yīng)CMT已有的結(jié)構(gòu),則在其最后一次可置入的節(jié)點(diǎn)中新加一個(gè)線性表,將規(guī)則置于其中,并在每次查找到該節(jié)點(diǎn)時(shí)檢查這個(gè)線性表。由于不可置入的新規(guī)則會(huì)降低CMT的查找效率,在新規(guī)則數(shù)達(dá)到一定規(guī)模的時(shí)候可對(duì)CMT進(jìn)行重構(gòu)操作,即將每一個(gè)存在線性表的節(jié)點(diǎn)中的所有規(guī)則提出,將這些規(guī)則重新組織為一個(gè)新的節(jié)點(diǎn),并替換原來的節(jié)點(diǎn)。
[0070]刪除操作是在每個(gè)節(jié)點(diǎn)中記錄此節(jié)點(diǎn)所有后裔中所包含的規(guī)則數(shù)量,刪除規(guī)則時(shí)將此規(guī)則所在的節(jié)點(diǎn),及該節(jié)點(diǎn)所有祖先的計(jì)數(shù)減1,同時(shí)刪掉計(jì)數(shù)為O的節(jié)點(diǎn)。為了保證多核平臺(tái)上的查找效率,所有針對(duì)節(jié)點(diǎn)的操作都通過CPU所提供的原子操作進(jìn)行。考慮到交換后廢棄的數(shù)據(jù)結(jié)構(gòu)中可能存在未決的訪問,將其統(tǒng)一關(guān)聯(lián)到一個(gè)待刪除的緩沖中,并等待一個(gè)明顯長(zhǎng)于訪問時(shí)間的間隔后再刪除它們,以避免讀寫沖突。
[0071]如圖6所示,CMT允許在已構(gòu)造好的情況下動(dòng)態(tài)的插入新的前綴,具體步驟如下:從根節(jié)點(diǎn)開始,如果前綴掩碼比節(jié)點(diǎn)掩碼更詳細(xì),則將其插入到對(duì)應(yīng)的子節(jié)點(diǎn)中(行2),否則保存到一個(gè)線性表中(行9)。查找的時(shí)候遇到了這樣的線性表會(huì)進(jìn)行線性查找,因此在插入前綴數(shù)目多過的情況下,需要對(duì)整個(gè)數(shù)據(jù)結(jié)構(gòu)進(jìn)行重構(gòu)操作。
[0072]如圖7所示,重構(gòu)方法是從根節(jié)點(diǎn)開始搜索含有線性表的節(jié)點(diǎn),如果發(fā)現(xiàn)了這樣的節(jié)點(diǎn),重構(gòu)算法會(huì)將此節(jié)點(diǎn)及其所有子孫中所包含的前綴集合成一個(gè)額外的節(jié)點(diǎn)(行
2),并針對(duì)此節(jié)點(diǎn)執(zhí)行構(gòu)造算法,最后用此不包含線性表的節(jié)點(diǎn)替換原節(jié)點(diǎn)即可。
[0073]如圖8所示,CMT在每個(gè)節(jié)點(diǎn)中記錄了此節(jié)點(diǎn)所有后裔中所包含的規(guī)則數(shù)量,刪除規(guī)則時(shí)將此規(guī)則所在的節(jié)點(diǎn),及該節(jié)點(diǎn)所有祖先的計(jì)數(shù)減I (行3),同時(shí)刪掉計(jì)數(shù)為O的節(jié)點(diǎn)(行4)。
[0074]如圖9所示,由于除了常規(guī)的節(jié)點(diǎn)外,CMT中還可能包含次級(jí)結(jié)點(diǎn)和線性表。對(duì)于待查找的數(shù)據(jù)V,首先使用CMT根結(jié)點(diǎn)對(duì)V進(jìn)行修剪(行2),計(jì)算修剪后的數(shù)據(jù)的哈希。如果根節(jié)點(diǎn)中存在匹配的項(xiàng),則到該項(xiàng)的子節(jié)點(diǎn)中繼續(xù)查找。為保證子節(jié)點(diǎn)的規(guī)則優(yōu)先得到匹配,采用了先遞歸再報(bào)告的技巧(行4)。如果在某節(jié)點(diǎn)N匹配失敗,則到N的次級(jí)節(jié)點(diǎn)中繼續(xù)查找(行10),如果還是沒有找到匹配的規(guī)則且N存在線性表,則到N的線性表中執(zhí)行線性查找(行8)。
[0075]以上僅是本發(fā)明的優(yōu)選實(shí)施方式,本發(fā)明的保護(hù)范圍并不僅局限于上述實(shí)施例,凡屬于本發(fā)明思路下的技術(shù)方案均屬于本發(fā)明的保護(hù)范圍。應(yīng)當(dāng)指出,對(duì)于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本發(fā)明原理前提下的若干改進(jìn)和潤(rùn)飾,應(yīng)視為本發(fā)明的保護(hù)范圍。
【權(quán)利要求】
1.一種線速軟多元組報(bào)文分類方法,其特征在于,步驟為: (1)將規(guī)則中的端口字段轉(zhuǎn)換為對(duì)應(yīng)的前綴閉包,得到一個(gè)不連續(xù)掩碼前綴集;首先將端口字段轉(zhuǎn)為對(duì)應(yīng)的前綴閉包,即形成一個(gè)覆蓋其區(qū)間且可以表示為前綴形式的最短的區(qū)間;然后將五維前綴集的各個(gè)維度連接起來,得到一個(gè)不連續(xù)掩碼的前綴集; (2)通過上述不連續(xù)掩碼前綴集構(gòu)造CMT數(shù)據(jù)結(jié)構(gòu); (3)使用CMT結(jié)構(gòu)查找算法實(shí)現(xiàn)高速報(bào)文分類。
2.根據(jù)權(quán)利要求1所述的線速軟多元組報(bào)文分類方法,其特征在于,所述步驟(2)的具體步驟為: (2.a)將整個(gè)前綴集作為CMT結(jié)構(gòu)的根節(jié)點(diǎn); (2.b)使用根節(jié)點(diǎn)的公共掩碼修剪前綴集中的每一項(xiàng),如果修剪后的前綴集和之前不一致,該前綴將被移入該項(xiàng)的子節(jié)點(diǎn)中; (2.c)對(duì)節(jié)點(diǎn)中的所有項(xiàng)進(jìn)行排序,使前綴相同的項(xiàng)位于相鄰的位置; (2.d)合并前綴相同的項(xiàng),將這些項(xiàng)的子節(jié)點(diǎn)合并成一個(gè)大的子節(jié)點(diǎn),并更新該子節(jié)點(diǎn)的公共掩碼。
3.根據(jù)權(quán)利要求2所述的線速軟多元組報(bào)文分類方法,其特征在于,所述步驟(2)還包括:步驟(2.e):若子節(jié)點(diǎn)出現(xiàn)沖突,即子節(jié)點(diǎn)掩碼與父節(jié)點(diǎn)相等,則進(jìn)行分表操作,否則對(duì)所有新生成的子節(jié)點(diǎn)遞歸的執(zhí)行組織算法。
4.根據(jù)權(quán)利要求3所述的線速軟多元組報(bào)文分類方法,其特征在于,在進(jìn)行分表算法時(shí),將整個(gè)節(jié)點(diǎn)分為多個(gè)次級(jí)節(jié)點(diǎn);即:針對(duì)節(jié)點(diǎn)N,取一個(gè)表項(xiàng)集合X,從N中第一項(xiàng)開始,若當(dāng)前前綴加入X后,X的公共掩碼將與N的父節(jié)點(diǎn)掩碼相等,則將該前綴移入一個(gè)新的次級(jí)節(jié)點(diǎn)N’,否則將其加入X中;若之后N’仍處于沖突狀態(tài),則遞歸的對(duì)N’進(jìn)行分表操作。
5.根據(jù)權(quán)利要求1?4中任意一項(xiàng)所述的線速軟多元組報(bào)文分類方法,其特征在于,所述步驟(I)的具體步驟為: (1.1)將端口范圍轉(zhuǎn)化為二進(jìn)制表示; (1.2)對(duì)于上下界的二進(jìn)制表示,從最高位開始,如果上界和下界相等,則前綴閉包在該位上取相應(yīng)的值,否則之后無論上下界是否相等都取*。
6.根據(jù)權(quán)利要求1?4中任意一項(xiàng)所述的線速軟多元組報(bào)文分類方法,其特征在于,所述步驟(3)的具體步驟為:搜索時(shí),首先在CMT的根節(jié)點(diǎn)中根據(jù)第一次劃分的公共掩碼對(duì)五元組數(shù)據(jù)進(jìn)行修剪,找到根節(jié)點(diǎn)中隊(duì)?wèi)?yīng)的等價(jià)類;之后,使用該子節(jié)點(diǎn)的公共掩碼遞歸的對(duì)五元組數(shù)據(jù)進(jìn)行后續(xù)的查找,直到不存在額外的子節(jié)點(diǎn)為止。
7.根據(jù)權(quán)利要求1?4中任意一項(xiàng)所述的線速軟多元組報(bào)文分類方法,其特征在于,還包括步驟(4):更新步驟,使用CMT插入、刪除和重構(gòu)方法實(shí)現(xiàn)規(guī)則集更新操作。
8.根據(jù)權(quán)利要求7所述的線速軟多元組報(bào)文分類方法,其特征在于,所述插入操作是根據(jù)CMT的結(jié)構(gòu)將新規(guī)則置入相應(yīng)的節(jié)點(diǎn)中,若新規(guī)則不適應(yīng)CMT已有的結(jié)構(gòu),則在其最后一次可置入的節(jié)點(diǎn)中新加一個(gè)線性表,將規(guī)則置于其中,并在每次查找到該節(jié)點(diǎn)時(shí)檢查這個(gè)線性表;在新規(guī)則數(shù)達(dá)到一定規(guī)模的時(shí)候可對(duì)CMT進(jìn)行重構(gòu)操作,即將每一個(gè)存在線性表的節(jié)點(diǎn)中的所有規(guī)則提出,將這些規(guī)則重新組織為一個(gè)新的節(jié)點(diǎn),并替換原來的節(jié)點(diǎn)。
9.根據(jù)權(quán)利要求7所述的線速軟多元組報(bào)文分類方法,其特征在于,所述刪除操作是在每個(gè)節(jié)點(diǎn)中記錄此節(jié)點(diǎn)所有后裔中所包含的規(guī)則數(shù)量,刪除規(guī)則時(shí)將此規(guī)則所在的節(jié)點(diǎn),及該節(jié)點(diǎn)所有祖先的計(jì)數(shù)減I,同時(shí)刪掉計(jì)數(shù)為O的節(jié)點(diǎn)。
10.根據(jù)權(quán)利要求7所述的線速軟多元組報(bào)文分類方法,其特征在于,所述重構(gòu)方法是從根節(jié)點(diǎn)開始搜索含有線性表的節(jié)點(diǎn),如果發(fā)現(xiàn)了這樣的節(jié)點(diǎn),重構(gòu)方法會(huì)將此節(jié)點(diǎn)及其所有子孫中所包含的前綴集合成一個(gè)額外的節(jié)點(diǎn),并針對(duì)此節(jié)點(diǎn)執(zhí)行構(gòu)造方法,最后用此不包含線性表的節(jié)點(diǎn)替換原節(jié)點(diǎn)。
【文檔編號(hào)】H04L12/70GK104468344SQ201410798193
【公開日】2015年3月25日 申請(qǐng)日期:2014年12月19日 優(yōu)先權(quán)日:2014年12月19日
【發(fā)明者】黃騰, 陳曙暉, 趙國(guó)鴻, 王寶生 申請(qǐng)人:中國(guó)人民解放軍國(guó)防科學(xué)技術(shù)大學(xué)