專利名稱:一種實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)通訊領(lǐng)域中的模式匹配,特別涉及一種實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的方法和裝置。
背景技術(shù):
IP數(shù)據(jù)包的轉(zhuǎn)發(fā)是路由器、交換機(jī)等網(wǎng)絡(luò)設(shè)備的基本功能之一。在進(jìn)行IP數(shù)據(jù)包轉(zhuǎn)發(fā)時(shí),需要根據(jù)數(shù)據(jù)包的目標(biāo)地址進(jìn)行搜索,以確定該數(shù)據(jù)包的轉(zhuǎn)發(fā)端口。最常見的搜索操作是在路由表中查找與對(duì)應(yīng)的目標(biāo)地址具有最長(zhǎng)前綴匹配表項(xiàng)。由于路由表的規(guī)模通常都很大,對(duì)它們的檢索是一件非常費(fèi)時(shí)的工作。
目前存在兩種版本的IP,即IP版本4(IPv4)和IP版本6(IPv6)。IPv4的地址長(zhǎng)度為32位,而IPv6的地址長(zhǎng)度則為128位。一個(gè)32位的IPv4目的地址提供40億個(gè)可能的路由,而一個(gè)互聯(lián)網(wǎng)路由器通常存儲(chǔ)40億個(gè)可能的路由中的5萬個(gè)路由。隨著互連網(wǎng)的發(fā)展和IPv6的普及,路由器中所存儲(chǔ)的路由數(shù)量也需要相應(yīng)增加。
在現(xiàn)有的IPv4協(xié)議中,IP的地址空間分為A、B和C三類IP地址。每個(gè)IP地址空間分為網(wǎng)絡(luò)地址和主機(jī)地址。然而,將IP地址空間劃分為不同的類減少了可用IP地址的數(shù)量,浪費(fèi)了大量可用的地址。為了提高IP地址空間利用率,現(xiàn)有技術(shù)中引入了無級(jí)域間路由(CIDR)。但無級(jí)域間路由增加了存儲(chǔ)在路由器中的路由數(shù)量。這是由于無級(jí)域間路由需要采用最長(zhǎng)前綴匹配搜索來取代完全匹配搜索,以獲得相應(yīng)的下一跳而尋找匹配的網(wǎng)絡(luò)地址。
實(shí)現(xiàn)采用最長(zhǎng)前綴匹配搜索的技術(shù)主要有以下方法基于TCAM(三態(tài)內(nèi)容尋址存儲(chǔ)器)器件的方法,這種方法的特點(diǎn)是使用特殊的存儲(chǔ)器件TCAM來實(shí)現(xiàn)最長(zhǎng)前綴匹配,雖然能實(shí)現(xiàn)很好的查找性能,但由于TCAM器件成本很高,一般只適用于規(guī)模較小的查找表中。另外一種是基于二進(jìn)制樹數(shù)據(jù)結(jié)構(gòu)的方法搜索方法,這種方法將輸入的關(guān)鍵字與二進(jìn)制樹的逐位匹配,直到找到葉子結(jié)點(diǎn)為止。對(duì)于一個(gè)32位的IPv4地址,需要32次搜索才能找到與關(guān)鍵字匹配的表項(xiàng)的入口。第三種方法是采用路徑壓縮的二進(jìn)制樹,采用這種結(jié)構(gòu)可以減少完成一次搜索所需的匹配次數(shù)。
采用基于路徑壓縮的二進(jìn)制樹的方法進(jìn)行搜索的存儲(chǔ)空間開銷較小,搜索效率也較高,而且這種方法的擴(kuò)展性也很好。在當(dāng)前的網(wǎng)絡(luò)處理中,通常采用采用這種結(jié)構(gòu)。但采用這種方法實(shí)現(xiàn)最長(zhǎng)匹配搜索時(shí),由于搜索時(shí)無法確定當(dāng)前結(jié)點(diǎn)的子樹中是否有最優(yōu)的結(jié)果,所以在搜索時(shí)必須保存搜索過程中訪問到的節(jié)點(diǎn),以便在葉子結(jié)點(diǎn)處找不到最優(yōu)結(jié)果時(shí)回退到先前訪問的結(jié)點(diǎn),即回溯以獲得正確的搜索結(jié)果,這會(huì)使存儲(chǔ)搜索結(jié)構(gòu)的存儲(chǔ)開銷增加,同時(shí)還會(huì)因回溯而降低搜索的效率。
發(fā)明內(nèi)容本發(fā)明的目的本發(fā)明的目的是克服現(xiàn)有方法在實(shí)現(xiàn)最長(zhǎng)匹配搜索時(shí),由于回溯而造成的存儲(chǔ)開銷增加,搜索效率降低的缺陷,從而提供一種可用于實(shí)現(xiàn)最長(zhǎng)前綴匹配搜索的方法和實(shí)現(xiàn)裝置,以提高搜索的效率。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的裝置,包括第一選擇器10、第二選擇器11、第三選擇器12、第一加法器14、第二加法器15、第一或門16、第二或門17、第三或門18、多路選擇器19、譯碼器20、掩碼生成單元21和比較部件22;還包括輸入信息寄存器組1、樹結(jié)點(diǎn)寄存器組2、樹結(jié)點(diǎn)讀取部件4、葉索引表讀取部件5、比較結(jié)果寄存器6、葉結(jié)點(diǎn)信息寄存器組7、搜索結(jié)果寄存器組8和控制信號(hào)生成部件9;其中,所述的輸入信息寄存器組1與所述的多路選擇器19、第一選擇器10、第二加法器15連接;所述的樹結(jié)點(diǎn)寄存器組2分別與所述的第一選擇器10、第一加法器14、第二加法器15、樹結(jié)點(diǎn)讀取部件4和譯碼器20電連接;所述的第一選擇器10還連接到第一加法器14上,所述的第一加法器14則與所述的多路選擇器19連接;所述的樹結(jié)點(diǎn)讀取部件4與多路選擇器19和外部的存儲(chǔ)器3電連接,所述的存儲(chǔ)器3還與所述的葉索引表讀取部件5電連接,所述的葉索引表讀取部件5與所述的第二加法器15、葉結(jié)點(diǎn)信息寄存器組7電連接;所述譯碼器20分別與所述的第一或門16、第二或門17、第三或門18和掩碼生成單元21電連接,所述的第三或門18與所述的多路選擇器19連接,所述的第一或門16與所述的比較結(jié)果寄存器6電連接,所述的掩碼生成單元21還與葉結(jié)點(diǎn)信息寄存器組7、比較部件22相連,所述的比較部件22分別與所述的輸入信息寄存器組1、比較結(jié)果寄存器6、第二選擇器11和第三選擇器12電連接,所述的葉結(jié)點(diǎn)信息寄存器組7分別與第二選擇器11、第三選擇器12電連接,所述的第二選擇器11、第三選擇器12分別連接到所述的搜索結(jié)果寄存器組8上。
上述技術(shù)方案中,所述的輸入信息寄存器組1由葉索引表始址寄存器、搜索樹根結(jié)點(diǎn)地址寄存器、輸入關(guān)鍵字寄存器組成。
上述技術(shù)方案中,所述的樹結(jié)點(diǎn)寄存器組2由類型寄存器、待測(cè)位寄存器、下一中間結(jié)點(diǎn)地址寄存器以及葉結(jié)點(diǎn)索引寄存器組成。
上述技術(shù)方案中,所述的葉結(jié)點(diǎn)信息寄存器組7由關(guān)鍵字寄存器、前綴長(zhǎng)度寄存器、數(shù)據(jù)信息大小寄存器和數(shù)據(jù)信息指針寄存器組成。
上述技術(shù)方案中,所述的搜索結(jié)果寄存器組8由搜索信息大小寄存器和搜索信息指針寄存器組成。
一種實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的方法,包括以下步驟步驟100、將搜索需要的參數(shù)寫入到輸入信息寄存器組1中,發(fā)出啟動(dòng)信號(hào),啟動(dòng)一個(gè)查找過程;步驟200、樹結(jié)點(diǎn)讀寫部件4根據(jù)輸入信息寄存器組1中的搜索樹根結(jié)點(diǎn)地址寄存器和輸入關(guān)鍵字寄存器中的信息讀取外接的存儲(chǔ)器3,將相應(yīng)的樹結(jié)點(diǎn)信息存入到樹結(jié)點(diǎn)寄存器組2中,并置比較結(jié)果寄存器6為0,執(zhí)行下一步;步驟300、判斷樹結(jié)點(diǎn)寄存器組2中的類型域的值,如果類型域的值為“00”,則置完成信號(hào)為1,并根據(jù)比較結(jié)果寄存器6的值產(chǎn)生搜索成功與失敗信號(hào),執(zhí)行步驟900;若類型域的值為其他值,則執(zhí)行下一步;步驟400、如果樹結(jié)點(diǎn)寄存器組2中的類型域的值為“01”或者“11”,執(zhí)行下一步;否則,樹結(jié)點(diǎn)寄存器組2中的類型域?yàn)椤?0”,執(zhí)行步驟900;步驟500、將樹結(jié)點(diǎn)寄存器組2中的葉結(jié)點(diǎn)索引域中的值與輸入信息寄存器組1中的葉索引表始址寄存器的值相加,相加后的結(jié)果送葉索引表讀取部件5,葉索引表讀寫部件5根據(jù)相加的結(jié)果對(duì)存儲(chǔ)器3進(jìn)行讀取,將相應(yīng)的葉結(jié)點(diǎn)信息寫入到葉結(jié)點(diǎn)信息寄存器組7中后,執(zhí)行下一步;步驟600、將葉結(jié)點(diǎn)信息寄存器組7中的前綴長(zhǎng)度域的值送到掩碼生成單元21中,生成的掩碼與輸入信息寄存器組1的輸入關(guān)鍵字寄存器所發(fā)出的輸入關(guān)鍵字相與,結(jié)果送到比較部件,與葉子信息寄存器7中的關(guān)鍵字域中的值作比較;步驟700、判斷比較的結(jié)果,若比較成功,結(jié)果送比較結(jié)果寄存器6,并將葉結(jié)點(diǎn)信息寄存器組7中的數(shù)據(jù)信息大小和數(shù)據(jù)信息指針域分別送到搜索結(jié)果寄存器組8的對(duì)應(yīng)寄存器中;若比較失敗,不進(jìn)行任何操作;步驟800、對(duì)樹結(jié)點(diǎn)寄存器組2中的類型域的值進(jìn)行判斷,若該值為“11”,執(zhí)行步驟下一步;否則置完成信號(hào)為1,根據(jù)比較結(jié)果寄存器的值產(chǎn)生搜索成功與失敗信號(hào),轉(zhuǎn)步驟1000;步驟900、根據(jù)樹結(jié)點(diǎn)寄存器組2的下一待測(cè)位域取出輸入信息寄存器組1中的輸入關(guān)鍵字域?qū)?yīng)位,若該位為1,則將樹結(jié)點(diǎn)寄存器組2的下一中間結(jié)點(diǎn)地址域的值加1,得到下一個(gè)中間結(jié)點(diǎn)地址;否則將樹結(jié)點(diǎn)寄存器組2的下一中間結(jié)點(diǎn)地址域的值作為下一中間結(jié)點(diǎn)地址,把該地址輸入到樹結(jié)點(diǎn)讀寫部件4;樹結(jié)點(diǎn)讀寫部件4讀取存儲(chǔ)器3,將相應(yīng)的樹結(jié)點(diǎn)存入到樹結(jié)點(diǎn)寄存器組2中,重新執(zhí)行步驟300;步驟1000、外部設(shè)備檢測(cè)到完成信號(hào),檢查搜索輸出結(jié)果,若為1,則查找成功,讀取輸出的數(shù)據(jù)信息大小和數(shù)據(jù)信息指針寄存器,獲得搜索結(jié)果;否則,搜索失敗。
上述技術(shù)方案中,采用路徑壓縮的二進(jìn)制樹來存儲(chǔ)搜索結(jié)構(gòu)和葉索引表來存放葉結(jié)點(diǎn)信息。
在所述的二進(jìn)制樹中,有包含兩個(gè)樹結(jié)點(diǎn)結(jié)構(gòu)的中間結(jié)點(diǎn),所述的兩個(gè)樹結(jié)點(diǎn)存放在連續(xù)的存儲(chǔ)空間中;所述樹結(jié)點(diǎn)結(jié)構(gòu)由類型、待測(cè)位、下一中間結(jié)點(diǎn)地址和葉結(jié)點(diǎn)索引四個(gè)域組成。
所述的葉索引表是一個(gè)線性表,它的每個(gè)元素是一個(gè)葉結(jié)點(diǎn)結(jié)構(gòu);所述葉結(jié)點(diǎn)結(jié)構(gòu)存放所述二進(jìn)制樹的葉結(jié)點(diǎn)信息,所述葉結(jié)點(diǎn)結(jié)構(gòu)由關(guān)鍵字、前綴長(zhǎng)度、數(shù)據(jù)信息指針和數(shù)據(jù)信息大小四個(gè)域組成。
本發(fā)明的優(yōu)點(diǎn)在于1、本發(fā)明采用了一種新的無回溯的路徑壓縮的二進(jìn)制樹的結(jié)構(gòu)及搜索方法,可提高搜索效率并降低存儲(chǔ)空間消耗。
2、本發(fā)明采用的葉子索引的機(jī)制,可減少實(shí)現(xiàn)查找的存儲(chǔ)空間開銷。
圖1為本發(fā)明的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索裝置的示意圖;圖2為一種應(yīng)用本發(fā)明的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索裝置的網(wǎng)絡(luò)處理器的結(jié)構(gòu)圖;圖3為在一個(gè)實(shí)施例中所采用的二叉樹的示意 圖4為本發(fā)明的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索方法的流程圖。
圖面說明1 輸入信息寄存器組 2 樹結(jié)點(diǎn)寄存器組 3 存儲(chǔ)器4 樹結(jié)點(diǎn)讀取部件 5 葉索引表讀取部件 6 比較結(jié)果寄存器7 葉結(jié)點(diǎn)信息寄存器組 8 搜索結(jié)果寄存器組 9 控制信號(hào)生成部件10 第一選擇器 11 第二選擇器 12 第三選擇器14 第一加法器 15 第二加法器 16 第一或門17 第二或門 18 第三或門 19 多路選擇器20 譯碼器 21 掩碼生成單元 22 比較部件31 控制微處理器 32 數(shù)據(jù)總線 33 搜索裝置具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的方法和裝置作進(jìn)一步說明。
在對(duì)本發(fā)明的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的方法進(jìn)行說明前,首先對(duì)本發(fā)明中所涉及到的數(shù)據(jù)結(jié)構(gòu)進(jìn)行說明。
在本發(fā)明中所采用的二進(jìn)制搜索樹中包含以下數(shù)據(jù)結(jié)構(gòu)中間結(jié)點(diǎn)(IN)、樹結(jié)點(diǎn)(TN)、葉結(jié)點(diǎn)索引表(LIT)和葉結(jié)點(diǎn)(LN)。
中間結(jié)點(diǎn)(IN)是實(shí)現(xiàn)搜索樹內(nèi)部結(jié)點(diǎn)的結(jié)構(gòu),如表1所示,它包含了兩個(gè)樹結(jié)點(diǎn)結(jié)構(gòu),結(jié)點(diǎn)1(TN1)和結(jié)點(diǎn)2(TN2),它們存放在連續(xù)的存儲(chǔ)空間中,分別用于表示該結(jié)點(diǎn)的左右兩棵子樹。
表1樹結(jié)點(diǎn)(TN)是中間結(jié)點(diǎn)(IN)的基本組成部分。如表2所示,一個(gè)樹結(jié)點(diǎn)包含了類型(Type)、待測(cè)位(TB)、下一中間結(jié)點(diǎn)地址(NIA)和葉結(jié)點(diǎn)索引(LI)幾個(gè)域。其中,類型(Type)域表明了該樹結(jié)點(diǎn)的類型。在本方法中,樹結(jié)點(diǎn)分為四類空樹結(jié)點(diǎn)、連接葉結(jié)點(diǎn)的樹結(jié)點(diǎn)、連接中間結(jié)點(diǎn)的樹結(jié)點(diǎn)和連接葉及中間結(jié)點(diǎn)的樹結(jié)點(diǎn)。類型域的長(zhǎng)度為兩位,表3給出了各個(gè)結(jié)點(diǎn)類型的定義和成立條件;待測(cè)位(TB)域表明關(guān)鍵字中待測(cè)試的位的位置;下一中間結(jié)點(diǎn)地址保存了連接在該樹結(jié)點(diǎn)上的中間結(jié)點(diǎn)的地址;而葉結(jié)點(diǎn)索引則存儲(chǔ)了連接在該樹結(jié)點(diǎn)上的葉子結(jié)點(diǎn)在葉結(jié)點(diǎn)索引表中的索引值。
表2
表3葉結(jié)點(diǎn)是實(shí)現(xiàn)查找樹的葉子結(jié)點(diǎn)的結(jié)構(gòu),如表4所示,它包含關(guān)鍵字(Key)、前綴長(zhǎng)度(PL)、數(shù)據(jù)信息指針(DP)和數(shù)據(jù)信息大小(DS)四個(gè)域。其中,關(guān)鍵字和前綴長(zhǎng)度域存儲(chǔ)了該葉子中關(guān)鍵字,用于在查找時(shí)與輸入的關(guān)鍵字比較;數(shù)據(jù)信息指針域和數(shù)據(jù)信息大小域分別保存了與該葉子結(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)信息在存儲(chǔ)器中的地址及其大小,這兩個(gè)域?qū)⒆鳛樗阉鹘Y(jié)果返回,控制處理器可以根據(jù)它們從存儲(chǔ)器中讀出對(duì)應(yīng)的數(shù)據(jù)信息。
表4葉結(jié)點(diǎn)索引表(LIT)是一個(gè)線性表,它的每個(gè)元素是一個(gè)葉結(jié)點(diǎn)結(jié)構(gòu)。如表5所示,該表是一個(gè)保存8個(gè)32位的IPv4路由表項(xiàng)的葉結(jié)點(diǎn)索引表的示例,其中,0至7號(hào)前綴分別與0至7號(hào)數(shù)據(jù)一一對(duì)應(yīng)。例如,在編號(hào)為0的葉結(jié)點(diǎn)索引表項(xiàng)中,一個(gè)32位的IP地址,它的前綴長(zhǎng)度為16位,因此,該IP地址中關(guān)鍵字為32位IP地址的前16位,即“1.1.x.x”中的“1.1”為關(guān)鍵字。
表5如圖4所示,為一個(gè)搜索二叉樹的示意圖。在該示意圖中,樹結(jié)點(diǎn)的類型(Type)域是用二進(jìn)制表示的,待測(cè)位(TB)和葉子索引是用十進(jìn)制表示的。以其中的根結(jié)點(diǎn)為例,根結(jié)點(diǎn)本身是一個(gè)樹結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu),由該結(jié)點(diǎn)的類型值10可以看出,根結(jié)點(diǎn)只與一個(gè)中間結(jié)點(diǎn)相連,待測(cè)位的值為6表示進(jìn)行搜索時(shí),需根據(jù)輸入關(guān)鍵字的第6位決定下一步訪問根節(jié)點(diǎn)的左子樹還是右子樹,若關(guān)鍵字的第6位為1在根節(jié)點(diǎn)的右子樹中查找,否則在根節(jié)點(diǎn)的左子樹中查找。沒有葉結(jié)點(diǎn)與根結(jié)點(diǎn)連接,因此葉結(jié)點(diǎn)索引值為空。在與根結(jié)點(diǎn)連接的中間結(jié)點(diǎn)上有兩個(gè)樹結(jié)點(diǎn),左側(cè)的樹結(jié)點(diǎn)的類型值為11,表示該結(jié)點(diǎn)與一個(gè)葉結(jié)點(diǎn)和一個(gè)中間結(jié)點(diǎn)連接。待測(cè)位的值14表示進(jìn)行搜索時(shí),需根據(jù)輸入關(guān)鍵字的第14位決定下一步訪問當(dāng)前節(jié)點(diǎn)的左子樹還是右子樹,若關(guān)鍵字的第14位為1,在當(dāng)前節(jié)點(diǎn)的右子樹中查找,否則在當(dāng)前節(jié)點(diǎn)的左子樹中查找,葉結(jié)點(diǎn)索引值7表示與結(jié)點(diǎn)相連接的葉結(jié)點(diǎn)在葉結(jié)點(diǎn)索引表中的第7項(xiàng),假設(shè)所述的葉結(jié)點(diǎn)索引表就是表5,則與樹結(jié)點(diǎn)連接的葉結(jié)點(diǎn)為1.x.x.x/8。圖中其他結(jié)點(diǎn)的含義相類似,不再一一說明。
無回溯的最長(zhǎng)前綴匹配搜索在網(wǎng)絡(luò)技術(shù)中有廣泛的應(yīng)用,在本實(shí)施例中,以網(wǎng)絡(luò)處理器為例,對(duì)本發(fā)明的應(yīng)用于網(wǎng)絡(luò)處理器的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索裝置進(jìn)行說明。
如圖2所示,一個(gè)網(wǎng)絡(luò)處理器由控制微處理器31、數(shù)據(jù)總線32、搜索裝置33和存儲(chǔ)器3組成,其中控制微處理器31通過數(shù)據(jù)總線32與搜索裝置33相連,控制微處理器31和搜索裝置33都和存儲(chǔ)器3相連。搜索裝置33即為本發(fā)明的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索裝置,它作為網(wǎng)絡(luò)處理器中的查找加速電路存在。數(shù)據(jù)總線32在控制微處理器31和搜索裝置33之間傳遞數(shù)據(jù)和讀寫控制信號(hào),控制微處理器31通過該部件向搜索裝置33的寄存器寫入數(shù)據(jù)或者從搜索裝置33中間查找結(jié)果后讀出。存儲(chǔ)器3存儲(chǔ)了查找所需的各種數(shù)據(jù)結(jié)構(gòu),它可以被控制微處理器31和搜索裝置33訪問。
下面對(duì)本發(fā)明的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索裝置進(jìn)行詳細(xì)說明。如圖1所示,本發(fā)明的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索裝置包括輸入信息寄存器組1、樹結(jié)點(diǎn)寄存器組2、樹結(jié)點(diǎn)讀取部件4、葉索引表讀取部件5、比較結(jié)果寄存器6、葉結(jié)點(diǎn)信息寄存器組7、搜索結(jié)果寄存器組8和控制信號(hào)生成部件9。其中,輸入信息寄存器組1與多路選擇器19、第一選擇器10、第二加法器15連接;樹結(jié)點(diǎn)寄存器組2分別與第一選擇器10、第一加法器14、第二加法器15、樹結(jié)點(diǎn)讀取部件4和譯碼器20電連接;第一選擇器10還連接到第一加法器14上,第一加法器14則與多路選擇器19連接;樹結(jié)點(diǎn)讀取部件4與多路選擇器19和外部的存儲(chǔ)器3電連接,存儲(chǔ)器3還與葉索引表讀取部件5電連接,葉索引表讀取部件5與第二加法器15、葉結(jié)點(diǎn)信息寄存器組7電連接;所述譯碼器20分別與第一或門16、第二或門17、第三或門18和掩碼生成單元21電連接,所述的第三或門18與所述的多路選擇器19連接,所述的第一或門16與比較結(jié)果寄存器6電連接,所述的掩碼生成單元21還與葉結(jié)點(diǎn)信息寄存器組7、比較部件22相連,所述的比較部件22分別與輸入信息寄存器組1、比較結(jié)果寄存器6、第二選擇器和第三選擇器12電連接,所述的葉結(jié)點(diǎn)信息寄存器組7分別與第二選擇器11、第三選擇器12電連接,所述的第二選擇器11、第三選擇器12分別連接到搜索結(jié)果寄存器組8上。
輸入信息寄存器組1由多個(gè)寄存器組成,包括葉索引表始址寄存器、搜索樹根結(jié)點(diǎn)地址寄存器、輸入關(guān)鍵字寄存器。輸入信息寄存器組1從與本發(fā)明裝置連接的控制微處理器31輸入?yún)?shù),該參數(shù)包括搜索樹根結(jié)點(diǎn)地址、葉結(jié)點(diǎn)索引表起始地址、輸入關(guān)鍵字和啟動(dòng)信號(hào)。其中,搜索樹的根結(jié)點(diǎn)在存儲(chǔ)器3中的地址存儲(chǔ)在搜索樹根結(jié)點(diǎn)地址寄存器中,葉結(jié)點(diǎn)索引表的起始地址存儲(chǔ)在葉索引表始址寄存器,輸入關(guān)鍵字存儲(chǔ)在輸入關(guān)鍵字寄存器。
樹結(jié)點(diǎn)讀取部件4從與本發(fā)明的裝置相連接的存儲(chǔ)器3中讀取樹結(jié)點(diǎn)的信息。
樹結(jié)點(diǎn)寄存器組2保存了樹結(jié)點(diǎn)讀取部件4從存儲(chǔ)器3中讀入的樹結(jié)點(diǎn),搜索電路利用該寄存器組決定進(jìn)行查找時(shí)的各項(xiàng)操作,該寄存器組包含了類型寄存器(Type)、待測(cè)位(TB)寄存器、下一中間結(jié)點(diǎn)地址寄存器(NIA)以及葉結(jié)點(diǎn)索引(LI)寄存器四個(gè)寄存器,它們與樹結(jié)點(diǎn)的幾個(gè)域一一對(duì)應(yīng),樹結(jié)點(diǎn)四個(gè)域中的信息保存在對(duì)應(yīng)的四個(gè)寄存器中。
葉索引表讀取部件5根據(jù)輸入的輸入信息寄存器組1中的葉索引表始址寄存器和樹結(jié)點(diǎn)寄存器組2的LI寄存器讀取葉索引表,將存儲(chǔ)器3中的葉結(jié)點(diǎn)信息寫入到葉結(jié)點(diǎn)信息寄存器組7中。
比較結(jié)果寄存器6存放了搜索過程中葉子結(jié)點(diǎn)中的關(guān)鍵字與輸入關(guān)鍵字的比較結(jié)果,同時(shí)還用于在搜索結(jié)束時(shí)產(chǎn)生搜索成功與失敗信號(hào)(OK/KO)。
葉結(jié)點(diǎn)信息寄存器組7包含關(guān)鍵字寄存器(Key)、前綴長(zhǎng)度(PL)寄存器、數(shù)據(jù)信息大小寄存器(DS)和數(shù)據(jù)信息指針寄存器(DP)四個(gè)寄存器,分別用于存放葉結(jié)點(diǎn)的四個(gè)域中的相應(yīng)信息。
搜索結(jié)果寄存器組8包括搜索信息大小寄存器和搜索信息指針寄存器兩個(gè)寄存器,分別存放作為搜索結(jié)果的信息的大小及其在存儲(chǔ)器中的存儲(chǔ)位置。
控制信號(hào)生成部件9用于生成各種內(nèi)部的控制信號(hào)。
本發(fā)明裝置的輸出結(jié)果發(fā)送到控制微處理器31上,輸出結(jié)果具體包括搜索成功信號(hào)(OK/KO)、搜索完成信號(hào)(Finish)、搜索結(jié)果(搜索信息指針(DP)和搜索信息大小(DS))等。
上述的輸入信息寄存器組1中的輸入關(guān)鍵字寄存器和葉子信息寄存器組7中的Key域寄存器可根據(jù)需要可設(shè)置為不同的值,一般可取128位至256位之間,為簡(jiǎn)化硬件電路,其余的全部?jī)?nèi)部寄存器應(yīng)所處的網(wǎng)絡(luò)處理器的字長(zhǎng)一致,例如,在32位長(zhǎng)的機(jī)器中,內(nèi)部搜索裝置的寄存器均為32位長(zhǎng)。
利用本發(fā)明的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索裝置可實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索,其方法如下步驟100、控制微處理器31將搜索需要的各種輸入?yún)?shù)寫入到輸入信息寄存器組中,發(fā)出啟動(dòng)信號(hào),啟動(dòng)一個(gè)查找過程;
步驟20、樹結(jié)點(diǎn)讀寫部件4根據(jù)輸入信息寄存器組1中的搜索樹根結(jié)點(diǎn)地址寄存器和輸入關(guān)鍵字寄存器中的信息讀取存儲(chǔ)器3,將相應(yīng)的樹結(jié)點(diǎn)存入到樹結(jié)點(diǎn)寄存器組2中,置比較結(jié)果寄存器6為0,執(zhí)行步驟300;步驟300、判斷樹結(jié)點(diǎn)寄存器組2中的類型域(Type)的值,如果類型域的值為“00”,則置完成(Finish)信號(hào)為1,并根據(jù)比較結(jié)果寄存器6的值產(chǎn)生搜索成功與失敗信號(hào)(OK/KO),執(zhí)行步驟900;若類型域的值為其他值,則執(zhí)行下一步;步驟400、如果樹結(jié)點(diǎn)寄存器組2中的類型域(Type)的值為“01”或者“11”,執(zhí)行下一步;否則,樹結(jié)點(diǎn)寄存器組2中的類型域(Type)為“10”,執(zhí)行步驟900;步驟500、將樹結(jié)點(diǎn)寄存器組2中的葉結(jié)點(diǎn)索引域(LI)中的值與輸入信息寄存器組1中的葉索引表始址寄存器的值相加,相加后的結(jié)果送葉索引表讀取部件5;葉索引表讀寫部件5對(duì)存儲(chǔ)器3進(jìn)行讀取,將相應(yīng)的葉結(jié)點(diǎn)信息寫入到葉結(jié)點(diǎn)信息寄存器組7中后,執(zhí)行下一步;步驟600、將葉結(jié)點(diǎn)信息寄存器組7中的前綴長(zhǎng)度域(PL)的值送到掩碼生成單元中,生成的掩碼與輸入信息寄存器組1的輸入關(guān)鍵字寄存器所發(fā)出的輸入關(guān)鍵字相與,結(jié)果送到比較部件,與葉子信息寄存器7中的關(guān)鍵字域(Key)中的值作比較;步驟700、判斷比較的結(jié)果,若比較成功,結(jié)果送比較結(jié)果寄存器6,并將葉結(jié)點(diǎn)信息寄存器組中的數(shù)據(jù)信息大小(DS)和數(shù)據(jù)信息指針域(DP)分別送到搜索結(jié)果寄存器組8的對(duì)應(yīng)寄存器中;若比較失敗,不進(jìn)行任何操作。
步驟800、對(duì)樹結(jié)點(diǎn)寄存器組2中的類型域(Type)的值進(jìn)行判斷,若該值為“11”,執(zhí)行步驟900;否則置完成(Finish)信號(hào)為1,根據(jù)比較結(jié)果寄存器的值產(chǎn)生搜索成功與失敗信號(hào)(OK/KO),轉(zhuǎn)步驟1000;步驟900、根據(jù)樹結(jié)點(diǎn)寄存器組2的下一待測(cè)位域(TB)取出輸入信息寄存器組1中的輸入關(guān)鍵字域?qū)?yīng)位,若該位為1,則將樹結(jié)點(diǎn)寄存器組2的NIA域加1,得到下一個(gè)中間結(jié)點(diǎn)地址;否則樹結(jié)點(diǎn)寄存器組2的NIA域作為下一中間結(jié)點(diǎn)地址。將該地址輸入到樹結(jié)點(diǎn)讀寫部件4;樹結(jié)點(diǎn)讀寫部件4讀取存儲(chǔ)器3,將相應(yīng)的樹結(jié)點(diǎn)存入到樹結(jié)點(diǎn)寄存器組2中,重新執(zhí)行步驟300;步驟1000、控制微處理器1檢測(cè)到完成信號(hào),檢查搜索輸出結(jié)果(OK/KO),若為1,則查找成功,讀取輸出的數(shù)據(jù)信息大小(DS)和數(shù)據(jù)信息指針(DP)寄存器,獲得搜索結(jié)果;否則搜索失敗。
下面以一個(gè)具體的實(shí)例,對(duì)無回溯的最長(zhǎng)前綴匹配搜索過程進(jìn)行說明。假設(shè)在圖4的樹中,搜索一個(gè)IPv4的地址1.1.0.5,所采用的葉結(jié)點(diǎn)索引表如表5所示,具體實(shí)現(xiàn)如下步驟a、控制微處理器31將樹和葉結(jié)點(diǎn)索引表的信息以及關(guān)鍵字(1.1.0.5)寫入到搜索裝置33的輸入寄存器中,啟動(dòng)搜索過程;步驟b、搜索裝置33讀入根結(jié)點(diǎn),根結(jié)點(diǎn)的類型為“10”,關(guān)鍵字1.1.0.5的第6位(指二進(jìn)制位)為0,因此讀入根節(jié)點(diǎn)的左子結(jié)點(diǎn);步驟c、根結(jié)點(diǎn)的左子結(jié)點(diǎn)的類型值為“11”,TB域的值為14,葉子索引域?yàn)?,根據(jù)該索引值(7)和索引表的起始地址從表5中讀入該葉子結(jié)點(diǎn),其中的前綴為1.x.x.x(Key)/8(PL),根據(jù)前綴長(zhǎng)度8得到掩碼255.0.0.0。將掩碼分別與關(guān)鍵字和前綴相與后作比較,二者相等,比較成功,因此將葉結(jié)點(diǎn)寄存器組的DP和DS域(即索引值為7的葉結(jié)點(diǎn)的地址和大小)送到結(jié)果寄存器組中。由于該節(jié)點(diǎn)的類型為“11“,TB域?yàn)?4,而輸入關(guān)鍵字1.1.0.5的第14位為0,因此還需要讀入該樹結(jié)點(diǎn)的左孩子結(jié)點(diǎn)。
步驟d、在步驟300中讀入的結(jié)點(diǎn)的類型域?yàn)椤?0”,TB域?yàn)?5,輸入關(guān)鍵字(1.1.0.5)的第15位為1,故讀入其右孩子結(jié)點(diǎn)。
步驟e、新讀入的右孩子結(jié)點(diǎn)的類型域?yàn)椤?1”,TB域?yàn)?3,其葉子索引域的值為0,根據(jù)該索引值(0)和索引表的起始地址從表5中讀入該葉子結(jié)點(diǎn),其中的前綴為1.1.x.x(Key)/16(PL),根據(jù)前綴長(zhǎng)度16得到掩碼255.255.0.0。將掩碼分別與關(guān)鍵字和前綴相與后再比較,二者相等,即比較成功,所以將葉結(jié)點(diǎn)寄存器組的DP和DS域(即索引值為0的葉結(jié)點(diǎn)的地址和數(shù)據(jù)的大小)送到結(jié)果寄存器組中。由于該節(jié)點(diǎn)的類型為“11”,TB域?yàn)?3,而輸入關(guān)鍵字(1.1.0.5)的第23位為0,故讀入該樹結(jié)點(diǎn)的左孩子結(jié)點(diǎn)。
步驟f、本次讀入的結(jié)點(diǎn)類型為“01”,其葉子索引域的值為4,根據(jù)該索引值(4)和索引表的起始地址從表5中讀入索引值為4的葉子結(jié)點(diǎn),其中的前綴為1.1.2.x(Key)/24(PL),根據(jù)前綴長(zhǎng)度24得到掩碼255.255.255.0。將掩碼分別與關(guān)鍵字和前綴相與后再比較,二者不等,即比較失敗,不進(jìn)行任何操作。由于該結(jié)點(diǎn)的類型域?yàn)椤?1”,即搜索結(jié)束,此時(shí)比較結(jié)果寄存器的值為1,故置比較完成標(biāo)志和比較成功標(biāo)志為1。此時(shí),搜索完成,搜索結(jié)果為搜索成功,得到的數(shù)據(jù)為索引值為0的葉結(jié)點(diǎn)中的數(shù)據(jù)。
權(quán)利要求
1.一種實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的裝置,其特征在于,包括第一選擇器(10)、第二選擇器(11)、第三選擇器(12)、第一加法器(14)、第二加法器(15)、第一或門(16)、第二或門(17)、第三或門(18)、多路選擇器(19)、譯碼器(20)、掩碼生成單元(21)和比較部件(22);還包括輸入信息寄存器組(1)、樹結(jié)點(diǎn)寄存器組(2)、樹結(jié)點(diǎn)讀取部件(4)、葉索引表讀取部件(5)、比較結(jié)果寄存器(6)、葉結(jié)點(diǎn)信息寄存器組(7)、搜索結(jié)果寄存器組(8)和控制信號(hào)生成部件(9);其中,所述的輸入信息寄存器組(1)與所述的多路選擇器(19)、第一選擇器(10)、第二加法器(15)連接;所述的樹結(jié)點(diǎn)寄存器組(2)分別與所述的第一選擇器(10)、第一加法器(14)、第二加法器(15)、樹結(jié)點(diǎn)讀取部件(4)和譯碼器(20)電連接;所述的第一選擇器(10)還連接到第一加法器(14)上,所述的第一加法器(14)則與所述的多路選擇器(19)連接;所述的樹結(jié)點(diǎn)讀取部件(4)與多路選擇器(19)和外部的存儲(chǔ)器(3)電連接,所述的存儲(chǔ)器(3)還與所述的葉索引表讀取部件(5)電連接,所述的葉索引表讀取部件(5)與所述的第二加法器(15)、葉結(jié)點(diǎn)信息寄存器組(7)電連接;所述譯碼器(20)分別與所述的第一或門(16)、第二或門(17)、第三或門(18)和掩碼生成單元(21)電連接,所述的第三或門(18)與所述的多路選擇器(19)連接,所述的第一或門(16)與所述的比較結(jié)果寄存器(6)電連接,所述的掩碼生成單元(21)還與葉結(jié)點(diǎn)信息寄存器組(7)、比較部件(22)相連,所述的比較部件(22)分別與所述的輸入信息寄存器組(1)、比較結(jié)果寄存器(6)、第二選擇器(11)和第三選擇器(12)電連接,所述的葉結(jié)點(diǎn)信息寄存器組(7)分別與第二選擇器(11)、第三選擇器(12)電連接,所述的第二選擇器(11)、第三選擇器(12)分別連接到所述的搜索結(jié)果寄存器組(8)上。
2.根據(jù)權(quán)利要求
1所述的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的裝置,其特征在于,所述的輸入信息寄存器組(1)包括葉索引表始址寄存器、搜索樹根結(jié)點(diǎn)地址寄存器和輸入關(guān)鍵字寄存器。
3.根據(jù)權(quán)利要求
1所述的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的裝置,其特征在于,所述的樹結(jié)點(diǎn)寄存器組(2)由類型寄存器、待測(cè)位寄存器、下一中間結(jié)點(diǎn)地址寄存器以及葉結(jié)點(diǎn)索引寄存器組成。
4.根據(jù)權(quán)利要求
1所述的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的裝置,其特征在于,所述的葉結(jié)點(diǎn)信息寄存器組(7)由關(guān)鍵字寄存器、前綴長(zhǎng)度寄存器、數(shù)據(jù)信息大小寄存器和數(shù)據(jù)信息指針寄存器組成。
5.根據(jù)權(quán)利要求
1所述的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的裝置,其特征在于,所述的搜索結(jié)果寄存器組(8)由搜索信息大小寄存器和搜索信息指針寄存器組成。
6.一種應(yīng)用權(quán)利要求
1、2、3、4或5所述的搜索裝置進(jìn)行無回溯的最長(zhǎng)前綴匹配搜索的方法,包括以下步驟步驟100)、將搜索需要的參數(shù)寫入到輸入信息寄存器組(1)中,發(fā)出啟動(dòng)信號(hào),啟動(dòng)一個(gè)查找過程;步驟200)、樹結(jié)點(diǎn)讀寫部件(4)根據(jù)輸入信息寄存器組(1)中的搜索樹根結(jié)點(diǎn)地址寄存器和輸入關(guān)鍵字寄存器中的信息讀取外接的存儲(chǔ)器(3),將相應(yīng)的樹結(jié)點(diǎn)信息存入到樹結(jié)點(diǎn)寄存器組(2)中,并置比較結(jié)果寄存器(6)為0,執(zhí)行下一步;步驟300)、判斷樹結(jié)點(diǎn)寄存器組(2)中的類型域的值,如果類型域的值為“00”,則置完成信號(hào)為1,并根據(jù)比較結(jié)果寄存器(6)的值產(chǎn)生搜索成功與失敗信號(hào),執(zhí)行步驟900;若類型域的值為其他值,則執(zhí)行下一步;步驟400)、如果樹結(jié)點(diǎn)寄存器組(2)中的類型域的值為“01”或者“11”,執(zhí)行下一步;否則,樹結(jié)點(diǎn)寄存器組(2)中的類型域?yàn)椤?0”,執(zhí)行步驟900;步驟500)、將樹結(jié)點(diǎn)寄存器組(2)中的葉結(jié)點(diǎn)索引域中的值與輸入信息寄存器組(1)中的葉索引表始址寄存器的值相加,相加后的結(jié)果送葉索引表讀取部件(5),葉索引表讀寫部件(5)根據(jù)相加的結(jié)果對(duì)存儲(chǔ)器(3)進(jìn)行讀取,將相應(yīng)的葉結(jié)點(diǎn)信息寫入到葉結(jié)點(diǎn)信息寄存器組(7)中后,執(zhí)行下一步;步驟600)、將葉結(jié)點(diǎn)信息寄存器組(7)中的前綴長(zhǎng)度域的值送到掩碼生成單元(21)中,生成的掩碼與輸入信息寄存器組(1)的輸入關(guān)鍵字寄存器所發(fā)出的輸入關(guān)鍵字相與,結(jié)果送到比較部件,與葉子信息寄存器(7)中的關(guān)鍵字域中的值作比較;步驟700)、判斷比較的結(jié)果,若比較成功,結(jié)果送比較結(jié)果寄存器(6),并將葉結(jié)點(diǎn)信息寄存器組(7)中的數(shù)據(jù)信息大小和數(shù)據(jù)信息指針域分別送到搜索結(jié)果寄存器組(8)的對(duì)應(yīng)寄存器中;若比較失敗,不進(jìn)行任何操作;步驟800)、對(duì)樹結(jié)點(diǎn)寄存器組(2)中的類型域的值進(jìn)行判斷,若該值為“11”,執(zhí)行步驟下一步;否則置完成信號(hào)為1,根據(jù)比較結(jié)果寄存器的值產(chǎn)生搜索成功與失敗信號(hào),轉(zhuǎn)步驟1000;步驟900)、根據(jù)樹結(jié)點(diǎn)寄存器組2的下一待測(cè)位域取出輸入信息寄存器組(1)中的輸入關(guān)鍵字域?qū)?yīng)位,若該位為1,則將樹結(jié)點(diǎn)寄存器組(2)的下一中間結(jié)點(diǎn)地址域的值加1,得到下一個(gè)中間結(jié)點(diǎn)地址;否則將樹結(jié)點(diǎn)寄存器組(2)的下一中間結(jié)點(diǎn)地址域的值作為下一中間結(jié)點(diǎn)地址,把該地址輸入到樹結(jié)點(diǎn)讀寫部件(4);樹結(jié)點(diǎn)讀寫部件(4)讀取存儲(chǔ)器(3),將相應(yīng)的樹結(jié)點(diǎn)存入到樹結(jié)點(diǎn)寄存器組(2)中,重新執(zhí)行步驟300;步驟1000)、外部設(shè)備檢測(cè)到完成信號(hào),檢查搜索輸出結(jié)果,若為1,則查找成功,讀取輸出的數(shù)據(jù)信息大小和數(shù)據(jù)信息指針寄存器,獲得搜索結(jié)果;否則,搜索失敗。
7.根據(jù)權(quán)利要求
6所述的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的方法,其特征在于,采用路徑壓縮的二進(jìn)制樹來存儲(chǔ)搜索結(jié)構(gòu)和葉索引表來存放葉結(jié)點(diǎn)信息。
8.根據(jù)權(quán)利要求
7所述的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的方法,其特征在于,在所述的二進(jìn)制樹中,有包含兩個(gè)樹結(jié)點(diǎn)結(jié)構(gòu)的中間結(jié)點(diǎn),所述的兩個(gè)樹結(jié)點(diǎn)存放在連續(xù)的存儲(chǔ)空間中;所述樹結(jié)點(diǎn)結(jié)構(gòu)由類型、待測(cè)位、下一中間結(jié)點(diǎn)地址和葉結(jié)點(diǎn)索引四個(gè)域組成。
9.根據(jù)權(quán)利要求
7所述的實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的方法,其特征在于,所述的葉索引表是一個(gè)線性表,它的每個(gè)元素是一個(gè)葉結(jié)點(diǎn)結(jié)構(gòu);所述葉結(jié)點(diǎn)結(jié)構(gòu)存放所述二進(jìn)制樹的葉結(jié)點(diǎn)信息,所述葉結(jié)點(diǎn)結(jié)構(gòu)由關(guān)鍵字、前綴長(zhǎng)度、數(shù)據(jù)信息指針和數(shù)據(jù)信息大小四個(gè)域組成。
專利摘要
本發(fā)明公開了一種實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的裝置,包括第一選擇器、第二選擇器、第三選擇器、第一加法器、第二加法器、第一或門、第二或門、第三或門、多路選擇器、譯碼器、掩碼生成單元和比較部件,還包括輸入信息寄存器組、樹結(jié)點(diǎn)寄存器組、樹結(jié)點(diǎn)讀取部件、葉索引表讀取部件、比較結(jié)果寄存器、葉結(jié)點(diǎn)信息寄存器組、搜索結(jié)果寄存器組和控制信號(hào)生成部件。本發(fā)明還公開了一種實(shí)現(xiàn)無回溯的最長(zhǎng)前綴匹配搜索的方法。本發(fā)明采用的無回溯的路徑壓縮的二進(jìn)制樹的結(jié)構(gòu)及搜索方法,可提高搜索效率并降低存儲(chǔ)空間消耗;本發(fā)明采用葉子索引的機(jī)制,可減少實(shí)現(xiàn)查找的存儲(chǔ)空間開銷。
文檔編號(hào)G06F17/30GK1996953SQ200610165449
公開日2007年7月11日 申請(qǐng)日期2006年12月20日
發(fā)明者張飛飛, 鄢貴海, 付斌章, 李華偉, 韓銀和, 劉彤, 雷韶華 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所導(dǎo)出引文BiBTeX, EndNote, RefMan