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