專利名稱::路由存儲、查找的方法及裝置的制作方法
技術領域:
:本發明涉及通信
技術領域:
,尤其涉及路由存儲、查找的方法及裝置。
背景技術:
:隨著網絡規模的迅猛發展,對路由器產品的表項容量提出了越來越高的需求,路由表項的數據量越來越大,路由器的IPV4(InternetProtocolVersion4,互聯網協議第4版)FIB(ForwardingInformationTable,路由轉發表)已經要求實現百萬條的數量級。使用TCAM(ternarycontentaddressablememory,三態內容可尋址存儲器)的方案,功耗大、單片容量小,需要很多芯片級聯來實現大容量的路由存放,工程上實現難度大,基于算法的查找則能解決這些問題。現有技術提供多種算法以解決上述大容量路由査找的問題,例如多叉樹(multi-tree)算法就是在解決大容量路由查找問題中應用比較廣泛的一種最長匹配算法。這種算法首先把FIB表根據左"0"右"1"的二叉樹規則構造成一個二進制樹(binarytree)來表示,然后按照給定的步長r來劃分節點,每r位存儲在一級節點內。例如,給定步長3,每3位前綴(prefix)存儲在一級節點內。另外,同一節點的所有子節點按照順序在內存中連續存儲,同一節點的結果索引信息也存儲在連續的內存中,這樣只用一個指針再加上偏移量就可以索引到相應的子節點。檢索節點(trienode)、終結節點(endnode)是Multi-Trie算法中用到的節點類型,trienode表示下掛有分支,endnode指沒有子節點,查找到此結束,另外還有一種內部節點(internalnode)表示trienode內部存在的前綴信息。每種節點類型都需要占用128bit的存儲空間。發明人在實現本發明的過程中,發現現有技術中存在如下不足路由存儲占用的內存空間較大,導致硬件實現難度大,例如,采用上述multi-tree算法進行最長匹配查找,按照目前IPV4的路由分布,19~24長度前綴分布最多,2532長度前綴也有少量分布,在最壞情況下,25-31完全隨機分布,由于路由比較稀疏,每個分支上可能只會有l條路由,此時trienode、internalnode和endnode這3個128bit的節點才能存放1條路由,將浪費大量的節點空間。
發明內容本發明實施例提供一種路由存儲方法,用以降低路由存儲空間,該方法包括將一條路由在檢索節點內的分支與所述路由在終結節點內的分支進行合并;將合并后的所述路由存儲于超級終結節點內,所述超級終結節點預留有供三條路由存儲的空間。本發明實施例還提供一種按上述路由存儲方法所存儲路由的査找方法,用以實現按上述路由存儲方法所存儲路由的查找,該設備包括將當前查找報文的目的IP地址分別與超級終結節點中所存儲每一條路由的IP地址進行匹配;選擇最長匹配的IP地址對應路由作為查找結果返回。本發明實施例還提供一種路由存儲裝置,用以降低路由存儲空間,該裝置包括合并模塊,用于將一條路由在檢索節點內的分支與所述路由在終結節點內的分支進行合并;存儲模塊,用于將合并后的所述路由存儲于超級終結節點內,所述超級終結節點預留有供三條路由存儲的空間。本發明實施例還提供一種利用上述路由存儲裝置進行存儲的路由的査找裝置,用以實現利用上述路由存儲裝置進行存儲的路由的查找,該裝置包括:匹配模塊,用于將當前查找報文的目的IP地址分別與超級終結節點中所存儲每一條路由的IP地址進行匹配;査找結果返回模塊,用于選擇最長匹配的IP地址對應路由作為查找結果返回。本發明實施例中,將一條路由在檢索節點內的分支與所述路由在終結節點內的分支進行合并;將合并后的所述路由存儲于超級終結節點內,所述超級終結節點預留有供三條路由存儲的空間,從而大大提升了節點存儲空間的有效率,在大規模路由容量下,使得存儲空間大大降低。本發明實施例中,在查找超級終結節點所存儲路由時,將當前査找報文的目的IP地址分別與超級終結節點中所存儲每一條路由的IP地址進行匹配;選擇最長匹配的IP地址對應路由作為查找結果返回,從而實現了超級終結節點所存儲路由的查找。為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。在附圖中圖1為本發明實施例中路由存儲方法的處理流程圖;圖2、圖4為本發明實施例中路由分支示意圖;圖3為本發明實施例中路由存儲方法的示意圖;圖5為本發明實施例中合并存儲路由的示意圖6為本發明實施例中按圖1所示路由存儲方法所存儲路由的查找方法的處理流程圖7、圖8為本發明實施例中路由査找方法的具體實例的流程圖;圖9為本發明實施例中路由存儲裝置的結構示意圖10為本發明實施例中利用圖9所示路由存儲裝置進行存儲的路由的査找裝置的結構示意圖。具體實施例方式為使本發明實施例的目的、技術方案和優點更加清楚明白,下面結合附圖對本發明實施例做進一步詳細說明。在此,本發明的示意性實施例及其說明用于解釋本發明,但并不作為對本發明的限定。如圖1所示,本發明實施例中,路由存儲方法的處理流程可以包括步驟101、將一條路由在檢索節點內的分支與所述路由在終結節點內的分支進行合并;步驟102、將合并后的所述路由存儲于超級終結節點內,所述超級終結節點預留有供三條路由存儲的空間。由圖1所示流程可以得知,將一條路由在檢索節點內的分支與所述路由在終結節點內的分支進行合并;將合并后的所述路由存儲于超級終結節點內,所述超級終結節點預留有供三條路由存儲的空間,從而大大提升了節點存儲空間的有效率,在大規模路由容量下,使得存儲空間大大降低。下面通過與現有技術進行對比說明圖1所示流程的優勢所在在現有技術中,對于1個檢索節點(trienode)下面的3個分支中每個分支存在一條路由的情況,會生成如圖2所示的結構,圖2中ENode表示終結節點,TNode表示檢索節點,INode表示內部節點(internalnode),RNode表示結果數組;由于每條路由分支不同,所以無法將3條路由存儲于同一個終結節點(endnode)內。而在本發明實施例中,如圖3所示,引入超級終結節點(superendnode),該超級終結節點由于預留有供三條路由存儲的空間,因而可以將一條路由在檢索節點內的分支與所述路由在終結節點內的分支合并后進行存儲。一個實施例中,一個超級終結節點可以為每條路由預留18bit的空間,在將一條路由在檢索節點內的分支以及在終結節點內的分支合并后,存儲在一個18bit的空間里。這樣的18bit在超級終結節點里面共有3個,所以一個超級終結節點中至多可以存下3條路由。一個實施例中,可以將至多三條路由在前綴樹中經第一級、第二級偏移后的剩余部分存儲于一個超級終結節點。當然,實施中還可以將前述路由在前綴樹中經第一級、第二級偏移后的剩余部分的長度、節點類型、父路徑最長匹配結果指針(Parentbestmatchpointer,PBMI)、結果數組基地址之一或任意組合存儲于所述超級終結節點。下面舉一例說明超級終結節點的數據結構,參見表一所示。其中,keyjeftl、key—left2、key—left3為存放路由經前2級偏移后的剩余部分,在超級終結節點中至多可以存放3條路由。如圖4所示,圖2中虛線圓圈所包括的3個節點存儲的路由可以用1個超級終結節點進行存儲。對于于檢索節點下掛不超過3條路由的情況,都可以合并壓縮到一個超級終結節點里進行存儲。表一超級終結節點的數據結構<table>tableseeoriginaldocumentpage9</column></row><table>對表一數據結構中的各個域詳細解釋如下Type:節點類型,可以用不同的編碼來識別trienode、internalnode、endnode、superendnode;Parentbestmatchpointer:父路徑最長匹配結果指針;Resultaddress:結果數組基地址,這里的基地址是指該節點存放的3條路由指向結果數組的基地址;Lengthh存放的第1條路由在前綴樹中經第一級、第二級偏移后剩余部分的長度,即在整個樹中,經過第一級(levell)和第二級(level2)偏移后,分別偏移掉路由前綴的[32:24]、[23:18],剩余的部分最多18bit。也就是說對于一條32bit前綴的路由表項如10.0.0.1/32,樹的levell存放前綴的[32:24],1evel2存放前綴的[23:18],levd3存放前綴的[17:12],level4存放前綴的[l1:6],level5存放前綴的[5:0];若壓縮生成superendnode,并且當前分支上下掛的路由數目小于等于3,則可以把該分支上level3leve15的部分壓縮進一個超級終結節點。KeyLeftl:存放的第1條路由在前綴樹中經第一級、第二級偏移后的剩余部分;Length2:存放的第2條路由在前綴樹中經第一級、第二級偏移后剩余部分的長度;KeyLeft2:存放的第2條路由在前綴樹中經第一級、第二級偏移后的剩余部分;Length3:存放的第3條路由在前綴樹中經第一級、第二級偏移后的剩余部分的長度;KeyLeft3:存放的第3條路由在前綴樹中經第一級、第二級偏移后的剩余部分。一個實施例中,在查找最后一級節點,即當前分支的最后一級superendnode時,為了節省節點空間,可以將原來存儲在相鄰兩個節點的兩個superendnode分支合并存儲在一個節點空間。艮P,若相鄰兩個超級終結節點內均存儲一條路由,則將所述相鄰兩個超級終結節點存儲的路由合并存儲于一個superendnodeplus(超級終結節點加)內。在兩條相鄰的superendnode里面各自只有1條路由時,可以進行合并,合并后2條路由存入一個superendnodeplus,該superendnodepius預留有供2條路由存儲的空間。將所述相鄰兩個超級終結節點內存儲的路由合并存儲于一個超級終結節點加時,可以將前綴樹中位于左邊的超級終結節點中存儲的路由并入位于右邊的超級終結節點加,也可以如圖5所示,將前綴樹中位于右邊的超級終結節點中存儲的路由并入位于左邊的超級終結節點加,此種情況下,后續在查找路由時,如果發現前綴樹中當前分支無子節點,則尋址到左邊相鄰的具有子節點的分支下掛的子節點,若尋址到的子節點是superendnodeplus,則在該superendnodeplus中查找需要的路由。這樣2個superendnode所存儲路由用一個superendnodeplus進行存儲即可,空間節省了1/2。下面給出superendnodeplus的數據結構,參見表二所示。表二superendnodeplus數據結構<table>tableseeoriginaldocumentpage11</column></row><table>對表二數據結構中各域詳細解釋如下Type:節點類型,可以用不同的編碼來識別trienode、internalnode、endnode、superendnode、superendnodeplus;Parentbestmatchpointer:父路徑最長匹配結果指針;Resultaddress:表示結果數組基地址,這里的基地址是指該節點存放的3條路由指向結果數組的基地址;Lengthh存放的第1條路由在前綴樹中經第一級、第二級偏移后剩余部分的長度;KeyLeftl:存放的第1條路由在前綴樹中經第一級、第二級偏移后的剩余部分;Length2:存放的第2條路由在前綴樹中經第一級、第二級偏移后剩余部分的長度;KeyLeft2:存放的第2條路由在前綴樹中經第一級、第二級偏移后的剩余部分;superendnodeplus中還可以存儲用于表示合并和/或合并方式的字段,如下LoR:表示KeyLeft2是否是從前綴樹中位于右邊的分支壓縮過來的;PreKeyl:表示當前分支;PreKey2:表示壓縮過來的分支。本發明實施例還提供一種按上述實施例進行存儲的路由的查找方法,如圖6所示,該方法流程可以包括步驟601、將當前查找報文的目的IP地址分別與超級終結節點中所存儲每一條路由的IP地址進行匹配;步驟602、選擇最長匹配的IP地址對應路由作為查找結果返回。由圖6所示流程可以得知,在査找超級終結節點所存儲路由時,將當前查找報文的目的IP地址分別與超級終結節點中所存儲每一條路由的IP地址進行匹配;選擇最長匹配的IP地址對應路由作為查找結果返回,從而實現了超級終結節點所存儲路由的查找。一個實施例中,若當前查找報文的目的IP地址與超級終結節點中所存儲全部路由的IP地址均不匹配,且超級終結節點中存儲有父路徑最長匹配結果指針,則在父路徑最長匹配結果指針有效時,將父路徑最長匹配結果指針作為査找結果返回。下面舉一例說明對SUperendnode所存儲路由進行査找的方法,superendnode的數據結構如表一。如圖7所示,本例中路由査找的處理流程可以包括步驟701、對超級終結節點(superendnode)進行解析,判斷KeyLeftl/2/3中是否有當前査找報文的目的IP地址(Key)的匹配,若是,則執行步驟702,否則執行步驟703。步驟702、選擇最長匹配的KeyLeft作為查找結果指針(Index)返回;結束整個查找流程。實施時,在KeyLeftl/2/3中匹配當前Key且長度最長的,為最長匹配的KeyLeft;KeyLeftl/2/3分別為ResultArray的第1/2/3個單元。步驟703、判斷父路徑最長匹配結果指針(PMBI)是否有效,若是,則執行步驟704,否則執行步驟705。這里考慮父路徑最長匹配結果指針的原因是因為最長匹配時,父路徑最長匹配結果指針存放的是在該路徑上査找過程中的最長匹配,在superendnode節點沒有匹配時,如果父路徑最長匹配結果指針有效,也能夠匹配。步驟704、返回父路徑最長匹配結果指針,結束整個査找流程。步驟705、查找失敗,結束整個査找流程。下面再舉一例,說明對superendnodeplus所存儲路由進行査找的方法,即在相鄰兩個超級終結節點內均存儲一條路由時,將所述相鄰兩個超級終結節點內存儲的路由合并存儲于一個超級終結節點內的情況,superendnodeplus的數據結構如表二。如圖8所示,本例中路由查找的處理流程可以包括步驟801、判斷是否有pre—key=prekeyl且key1length!=0,且KeyLeftl中有當前Key的匹配;若是,則執行步驟802,否則執行步驟803。步驟802、KeyLeftl中有當前Key的匹配得出結果index作為返回;結束整個査找流程。步驟803、判斷是否有pre—key=prekey2且key21ength!=0,且KeyLeft2中有當前Key的匹配;若是,則執行步驟804,否則執行步驟805。步驟804、KeyLeft2中有當前Key的匹配得出結果指針(index)作為返回;結束整個查找流程。步驟805、判斷父路徑最長匹配結果指針是否有效,若是,則執行步驟806,否則執行步驟807。步驟806、返回父路徑最長匹配結果指針;結束整個査找流程。步驟807、查找失敗,結束整個查找流程。本領域普通技術人員可以理解實現上述實施例方法中的全部或部分步驟是可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一計算機可讀取存儲介質中,該程序在執行時,可以包括上述實施例方法中的全部或部分步驟,所述的存儲介質可以包括ROM、RAM、磁盤、光盤等。本發明實施例中還提供了一種路由存儲裝置及所述路由存儲裝置所存儲路由的查找裝置,如下面的實施例所述。由于這些裝置解決問題的原理與前述方法相似,因此這些裝置的實施可以參見方法的實施,重復之處不再贅述。如圖9所示,本發明實施例中路由存儲裝置可以包括合并模塊901,用于將一條路由在檢索節點內的分支與所述路由在終結節點內的分支進行合并;存儲模塊902,用于將合并后的所述路由存儲于超級終結節點內,所述超級終結節點預留有供三條路由存儲的空間。一個實施例中,存儲模塊902還可以用于將合并后的所述路由存儲于超級終結節點內的一個18bit的空間,所述超級終結節點預留有供三條路由存儲的三個18bit的空間。一個實施例中,存儲模塊902還可以用于將至多三條路由在前綴樹中經第一級、第二級偏移后的剩余部分存儲于超級終結節點。一個實施例中,存儲模塊902還可以用于將所述剩余部分的長度、節點類型、父路徑最長匹配結果指針、結果數組基地址之一或任意組合存儲于所述超級終結節點。一個實施例中,存儲模塊902還可以用于在相鄰兩個超級終結節點內均存儲一條路由時,將所述相鄰兩個超級終結節點存儲的路由合并存儲于一個超級終結節點加內,所述超級終結節點加預留有供兩條路由存儲的空間。一個實施例中,存儲模塊902還可以用于將用于表示合并和/或合并方式的字段存儲于所述超級終結節點加。如圖IO所示,利用圖9所示路由存儲裝置進行存儲的路由的査找裝置可以包括匹配模塊1001,用于將當前查找報文的目的IP地址分別與超級終結節點中所存儲每一條路由的IP地址進行匹配;查找結果返回模塊1002,用于選擇最長匹配的IP地址對應路由作為查找結果返回。一個實施例中,査找結果返回模塊1002還可以用于在當前査找報文的目的IP地址與超級終結節點中所存儲全部路由的IP地址均不匹配,且超級終結節點中存儲有父路徑最長匹配結果指針時,將有效的父路徑最長匹配結果指針作為查找結果返回。本發明實施例中,將一條路由在檢索節點內的分支與所述路由在終結節點內的分支進行合并;將合并后的所述路由存儲于超級終結節點內,所述超級終結節點預留有供三條路由存儲的空間,從而大大提升了節點存儲空間的有效率,在大規模路由容量下,使得存儲空間大大降低。通過仿真的數據可以看出在隨機路由分布下,在給定的存儲空間下,使用壓縮節點superendnode和superendnodeplus,路由表容量能有1~2倍的提升。本發明實施例中,在査找超級終結節點所存儲路由時,將當前査找報文的目的IP地址分別與超級終結節點中所存儲每一條路由的IP地址進行匹配;選擇最長匹配的IP地址對應路由作為查找結果返回,從而實現了超級終結節點所存儲路由的查找。除multi-tree算法外,本發明實施例也適用于其它的匹配算法。以上所述的具體實施例,對本發明的目的、技術方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發明的具體實施例而已,并不用于限定本發明的保護范圍,凡在本發明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。權利要求1、一種路由存儲方法,其特征在于,該方法包括將一條路由在檢索節點內的分支與所述路由在終結節點內的分支進行合并;將合并后的所述路由存儲于超級終結節點內,所述超級終結節點預留有供三條路由存儲的空間。2、如權利要求l所述的方法,其特征在于,將合并后的所述路由存儲于超級終結節點內,所述超級終結節點預留有供三條路由存儲的空間,包括將合并后的所述路由存儲于超級終結節點內的一個18bit的空間,所述超級終結節點預留有供三條路由存儲的三個18bit的空間。3、如權利要求l所述的方法,其特征在于,將合并后的所述路由存儲于超級終結節點內,所述超級終結節點預留有供三條路由存儲的空間,包括將至多三條路由在前綴樹中經第一級、第二級偏移后的剩余部分存儲于所述超級終結節點。4、如權利要求3所述的方法,其特征在于,將合并后的所述路由存儲于超級終結節點內,所述超級終結節點預留有供三條路由存儲的空間,還包括將所述剩余部分的長度、節點類型、父路徑最長匹配結果指針、結果數組基地址之一或任意組合存儲于所述超級終結節點。5、如權利要求1至4任一項所述的方法,其特征在于,還包括若相鄰兩個超級終結節點內均存儲一條路由,則將所述相鄰兩個超級終結節點存儲的路由合并存儲于一個超級終結節點加內,所述超級終結節點加預留有供兩條路由存儲的空間。6、如權利要求5所述的方法,其特征在于,還包括將用于表示合并和/或合并方式的字段存儲于所述超級終結節點加。7、一種按權利要求l所述方法所存儲路由的查找方法,其特征在于,該方法包括將當前查找報文的目的IP地址分別與超級終結節點中所存儲每一條路由的IP地址進行匹配;選擇最長匹配的IP地址對應路由作為査找結果返回。8、如權利要求7所述的方法,其特征在于,若當前查找報文的目的IP地址與超級終結節點中所存儲全部路由的IP地址均不匹配,且超級終結節點中存儲有父路徑最長匹配結果指針,則在父路徑最長匹配結果指針有效時,將父路徑最長匹配結果指針作為查找結果返回。9、一種路由存儲裝置,其特征在于,該裝置包括合并模塊,用于將一條路由在檢索節點內的分支與所述路由在終結節點內的分支進行合并;存儲模塊,用于將合并后的所述路由存儲于超級終結節點內,所述超級終結節點預留有供三條路由存儲的空間。10、如權利要求9所述的裝置,其特征在于,所述存儲模塊進一步用于將合并后的所述路由存儲于超級終結節點內的一個18bit的空間,所述超級終結節點預留有供三條路由存儲的三個18bit的空間。11、如權利要求9所述的裝置,其特征在于,所述存儲模塊進一步用于將至多三條路由在前綴樹中經第一級、第二級偏移后的剩余部分存儲亍超級終結節點。12、如權利要求ll所述的裝置,其特征在于,所述存儲模塊進一步用于將所述剩余部分的長度、節點類型、父路徑最長匹配結果指針、結果數組基地址之一或任意組合存儲于所述超級終結節點。13、如權利要求9至12任一項所述的裝置,其特征在于,所述存儲模塊進一步用于在相鄰兩個超級終結節點內均存儲一條路由時,將所述相鄰兩個超級終結節點存儲的路由合并存儲于一個超級終結節點加內,所述超級終結節點加預留有供兩條路由存儲的空間。14、如權利要求13所述的裝置,其特征在于,所述存儲模塊進一步用于將用于表示合并和/或合并方式的字段存儲于所述超級終結節點加。15、一種利用權利要求9所述裝置進行存儲的路由的查找裝置,其特征在于,該裝置包括匹配模塊,用于將當前査找報文的目的IP地址分別與超級終結節點中所存儲每一條路由的IP地址進行匹配;查找結果返回模塊,用于選擇最長匹配的IP地址對應路由作為查找結果返回。16、如權利要求15所述的裝置,其特征在于,所述査找結果返回模塊進一步用于在當前查找報文的目的IP地址與超級終結節點中所存儲全部路由的IP地址均不匹配,且超級終結節點中存儲有父路徑最長匹配結果指針時,將有效的父路徑最長匹配結果指針作為查找結果返回。全文摘要本發明公開了一種路由存儲方法,該方法包括將一條路由在檢索節點內的分支與所述路由在終結節點內的分支進行合并;將合并后的所述路由存儲于超級終結節點內,所述超級終結節點預留有供三條路由存儲的空間。本發明同時公開一種路由存儲裝置。采用本發明可以大大提升節點存儲空間的有效率,在大規模路由容量下,使得存儲空間大大降低。本發明還提供一種按上述路由存儲方法所存儲路由的查找方法、以及利用上述路由存儲裝置進行存儲的路由的查找裝置。文檔編號H04L12/56GK101645844SQ20091016175公開日2010年2月10日申請日期2009年8月14日優先權日2009年8月14日發明者猛李,波楊,沈士軍,秦增杰申請人:華為技術有限公司