一種查找裝置、查找方法和配置方法
【技術領域】
[0001] 本發(fā)明涉及數(shù)據(jù)通信領域,尤其涉及一種查找裝置、查找方法和配置方法。
【背景技術】
[0002] 路由器的主要任務是進行網(wǎng)際協(xié)議(Internet Protocol,簡稱:IP)報文轉發(fā),也 就是根據(jù)報文頭中的目的IP地址將到達路由器輸入端口的報文轉發(fā)到正確的輸出端口。 路由查找就是根據(jù)報文的目的IP地址,查找路由器中的路由表,得到報文下一跳信息的過 程。
[0003] 路由表中的每條路由主要由一個前綴和對應的下一跳信息構成,前綴可以用'0', '1'和組成的三值位串表示。路由查找采用最長前綴匹配(longest prefix match,簡稱 LPM)原則。當有多個前綴與輸入的IP地址匹配時,與該IP地址匹配的前綴中掩碼最長的 前綴對應的下一跳信息為最終的查找結果。
[0004] 基于Trie樹(也稱前綴樹)的算法根據(jù)前綴中的位串建立一棵二叉樹或多叉樹。 如果每次考慮一位,則建立一棵二叉樹,也稱為單位Trie樹。圖1示出了一棵單位Trie樹, 其中包含11個前綴,圖1中左側P〇~pl〇,在單位Trie樹中對應的節(jié)點用黑色圓圈表示, 連接點用白色圓圈表示。如果每次考慮多位,則建立一棵多位Trie樹。在多位Trie樹中, 每次考慮的位數(shù)一般是固定的,稱為Trie樹的步長(英文stride)。
[0005] MBT (multi-bit trie,多位Trie)樹算法是一種被廣泛應用的路由查找算法。MBT 可以看作按stride把一個單位Trie樹分成多個子樹,并為每個子樹創(chuàng)建一個Trie節(jié)點。 每個Trie節(jié)點均有一個關聯(lián)前綴,一個Trie節(jié)點的關聯(lián)前綴是該Trie節(jié)點對應的子樹的 根節(jié)點上的前綴值。位于一個子樹內的前綴數(shù)量最多為2stl^-l個,如果某個子樹內分布有 前綴,還要為該子樹創(chuàng)建一個前綴(英文:prefiX)節(jié)點,位于一個子樹內的前綴都保存在該 子樹對應的prefix節(jié)點中。每個前綴對應一條下一跳信息。一般在MBT中只保存下一跳指 針,也就是指向下一跳信息的指針。
[0006] 圖2示出了基于圖1中的前綴建立的stride等于3的MBT樹。該MBT樹包括7 個Trie節(jié)點,如圖2中所示的Trie Node T1~Trie Node T7,每個Trie節(jié)點配置有一個前 綴節(jié)點,如圖2中所示Prefix Node。每個Prefix Node中保存有該Prefix Node對應的Trie 節(jié)點中的各個前綴的下一跳指針,例如,圖2中Trie Node T4對應的prefix節(jié)點(prefix節(jié) 點表示前綴節(jié)點)中保存有前綴p3的下一跳指針"RE Index of P3"。除了 Trie Node T1對 應的前綴節(jié)點以外的每個前綴節(jié)點中,還保存一個最長前綴匹配(present longest prefix match,簡稱PLPM)。一個prefix節(jié)點的PLPM為覆蓋該prefix節(jié)點對應的子樹的最長前綴。 圖2中prefix節(jié)點中的"RE Index of PLPM"表示該prefix節(jié)點的PLPM的下一跳指針。
[0007] 位于一個子樹內的前綴都保存在該子樹對應的prefix節(jié)點中。一個prefix節(jié)點中, 通常會保存該prefix節(jié)點對應的子樹內的所有前綴,并用位圖指示prefix節(jié)點中保存的前 綴,位圖包括2s&ldM個比特(bit)。比如,圖2中的子樹T4內有3個前綴p3、p6和p7,用 7比特的位圖表示即為1000101,表示該子樹中第1、5、7個節(jié)點為前綴。
[0008] 現(xiàn)有MBT算法中,為了減小樹的深度,一般會加大步長的取值,比如取值為8。當步 長較大時,prefix節(jié)點對應的位圖所占比特也比較多。如果前綴分布比較稀疏,prefix節(jié)點 中存儲的前綴數(shù)量較少,但對應的位圖仍需要占用較多比特,導致存儲空間的開銷較大,利 用率低。
【發(fā)明內容】
[0009] 本發(fā)明實施例提供了一種查找裝置、查找方法和配置方法,用于提高前綴節(jié)點的 編碼效率,從而減少存儲空間的開銷。
[0010] 第一方面,提供一種查找裝置,所述查找裝置包括:存儲單元;
[0011] 所述存儲單元中配置有N個前綴節(jié)點,N3 1,每個前綴節(jié)點包括第一數(shù)據(jù)域,所述 第一數(shù)據(jù)域中包括Μ個前綴集合,M3 1,其中:
[0012] 第i前綴節(jié)點對應第一步長的第一 ΜΒΤ子樹,所述第i前綴節(jié)點中的第j前綴集 合對應第二MBT子樹,所述第二MBT子樹是基于第二步長對所述第一 MBT子樹劃分得到的, 所述第二步長小于所述第一步長;其中,1 < i < N,1 < j < Μ ;
[0013] 所述第j前綴集合中包括所述第二MBT子樹的關聯(lián)前綴、第一位置信息,所述第一 位置信息用于按序指示所述第二MBT子樹中的各個前綴在所述第二MBT子樹中的位置。
[0014] 結合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,所述第i前綴節(jié)點中還 包括第二數(shù)據(jù)域,所述第二數(shù)據(jù)域中包括所述第一 MBT子樹中所有前綴各自所對應的下一 跳。
[0015] 結合第一方面的第一種可能的實現(xiàn)方式,在第一方面的第二種可能的實現(xiàn)方式 中,所述第二數(shù)據(jù)域設置于所述第一數(shù)據(jù)域之后;
[0016] 所述第二數(shù)據(jù)域中各個前綴所對應的下一跳的順序,與所述第一數(shù)據(jù)域中各個前 綴集合中的第一位置信息所指示的前綴位置的順序,相同或相反。
[0017] 結合第一方面、第一方面的第一種至第二種可能的實現(xiàn)方式中的一種,在第一方 面的第三種可能的實現(xiàn)方式中,所述第i前綴節(jié)點中還包括第三數(shù)據(jù)域,所述第三數(shù)據(jù)域 中包括所述第i前綴節(jié)點中的所有前綴集合的數(shù)量、所述第i前綴節(jié)點中的所有前綴集合 中的每個前綴集合的頭部信息,其中,第j前綴集合的頭部信息中包含所述第二MBT子樹的 關聯(lián)肖U綴的長度。
[0018] 結合第一方面的第三種可能的實現(xiàn)方式,在第一方面的第四種可能的實現(xiàn)方式 中,所述第三數(shù)據(jù)域設置于所述第一數(shù)據(jù)域之前;
[0019] 所述第三數(shù)據(jù)域中各個前綴集合的頭部信息的順序,與所述第一數(shù)據(jù)域中各個前 綴集合的順序,相同或相反。
[0020] 結合第一方面、第一方面的第一種至第四種可能的實現(xiàn)方式中的一種,在第一方 面的第五種可能的實現(xiàn)方式中,所述第一數(shù)據(jù)域中的所述Μ個前綴集合按照查找順序包括 第1至第Μ前綴集合,所述Μ個前綴集合中,第j前綴集合中存儲的關聯(lián)前綴的長度,不小 于第j+Ι前綴集合中存儲的關聯(lián)前綴的長度,1 < j < M。
[0021] 結合第一方面、第一方面的第一種至第五種可能的實現(xiàn)方式,在第一方面的第六 種可能的實現(xiàn)方式中,所述第i前綴節(jié)點中包含第一指示信息,用于指示所述第j前綴集合 所對應的第二MBT子樹中包含唯一一個前綴,所述第j前綴集合中的第一位置信息為所述 唯一一個前綴在所述第二MBT子樹中的節(jié)點位置編號,所述第一位置信息的長度等于所述 第二步長;或者
[0022] 所述第i前綴節(jié)點中包含第二指示信息,用于指示所述第j前綴集合所對應的第 二MBT子樹中包含至少2個前綴,所述第j前綴集合中的所述第一位置信息為位圖,用于指 示所述第二MBT子樹中的所述至少2個前綴在該第二MBT子樹中的位置,所述第一指示信 息的長度為2stnde-l,stride為所述第二步長。
[0023] 結合第一方面、第一方面的第一種至第六種可能的實現(xiàn)方式中的一種,在第一方 面的第七種可能的實現(xiàn)方式中,所述存儲單元用于執(zhí)行查找流程;或者,所述查找裝置還包 括查找單元,所述查找單元用于基于所述存儲單元執(zhí)行所述查找流程;
[0024] 所述查找流程包括:
[0025] 獲得查找關鍵字;
[0026] 在所述N個前綴節(jié)點中查找關聯(lián)前綴與所述查找關鍵字最長匹配的前綴節(jié)點,針 對查找到的前綴節(jié)點執(zhí)行以下步驟:
[0027] 根據(jù)前綴節(jié)點中前綴集合的總數(shù)量和每個前綴集合中的關聯(lián)前綴的長度,確定每 個前綴集合的存儲位置、每個前綴集合中的關聯(lián)前綴和第一位置信息的存儲位置;
[0028] 根據(jù)每個前綴集合中的關聯(lián)前綴和第一位置信息的存儲位置,獲取每個前綴集合 中的關聯(lián)前綴和第一位置信息;
[0029] 在所有前綴集合中查找關聯(lián)前綴與所述查找關鍵字最長匹配的前綴集合;
[0030] 根據(jù)查找到的前綴集合中的第一位置信息,確定與所述查找關鍵字最長匹配的前 綴;
[0031] 根據(jù)與所述查找關鍵字最長匹配的前綴獲得下一跳,得到所述查找關鍵字的查找 結果。
[0032] 結合第一方面、第一方面的第一種至第七種可能的實現(xiàn)方式,在第一方面的第八 種可能的實現(xiàn)方式中,還包括配置單元,所述配置單元用于配置所述存儲單元中的前綴節(jié) 點,具體的,所述配置單元具體用于:
[0033] 獲得待配置的前綴信息,所述前綴中包括至少一個地址前綴以及所述地址前綴所 對應的下一跳;
[0034] 在所有前綴節(jié)點中查找關聯(lián)前綴與所述待配置的地址前綴最長匹配的前綴節(jié) 占.
[0035] 針對查找到的前綴節(jié)點執(zhí)行以下操作:
[0036] 根據(jù)前綴節(jié)點中前綴集合的總數(shù)量和每個前綴集合中的關聯(lián)前綴的長度,確定每 個前綴集合的存儲位置、每個前綴集合中的關聯(lián)前綴和第一位置信息的存儲位置;
[0037] 根據(jù)每個前綴集合中的關聯(lián)前綴和第一位置信息的存儲位置,獲取每個前綴集合 中的關聯(lián)前綴和第一位置信息;
[0038] 在所有前綴集合中查找關聯(lián)前綴與所述待配置的地址前綴最長匹配的前綴集 合;
[0039] 在前綴節(jié)點中配置所述待配置的地址前綴所對應的下一跳,并更新與所述待配置 的地址前綴最長匹配的前綴集合中的第一位置信息。
[0040] 第二方面,提供一種查找方法,包括:
[0041] 獲得查找關鍵字;
[0042] 在所配置的N個前綴節(jié)點中查找關聯(lián)前綴與所述查找關鍵字最長匹配的前綴節(jié) 點;其中,N3 1,每個前綴節(jié)點包括第一數(shù)據(jù)域,所述第一數(shù)據(jù)域中包括Μ個前綴集合, Μ > 1,其中:第i前綴節(jié)點對應第一步長的第一 ΜΒΤ子樹,所述第i前綴節(jié)點中的第j前綴 集合對應第二MBT子樹,所述第二MBT子樹是基于第二步長對所述第一 MBT子樹劃分得到 的,所述第二步長小于所述第一步長,1 < i < N,1 < j < M,所述第j前綴集合中包括所述 第二MBT子樹的關聯(lián)前綴、第一位置信息,所述第一位置信息用于按序指示所述第二MBT子 樹中的各個前綴在所述第二MBT子樹中的位置;
[0043] 針對查找到的前綴節(jié)點執(zhí)行以下步驟:
[0044] 根據(jù)前綴節(jié)點中前綴集合的