專利名稱:IPv6地址前綴壓縮存儲方法及設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及下一代互聯(lián)網(wǎng)領(lǐng)域,更具體地,涉及一種IPv6地址前綴存儲方法和設(shè)備。
背景技術(shù):
眾所周知,IPv6地址長度是128比特,而IPv4地址長度是32比特。就地址長度 而言,IPv6比IPv4擴(kuò)大了 4倍;就容量而言,則擴(kuò)大了 2s36倍。由于IPv6地址容量的急劇 增長,因此需要一種高效可行的IPv6地址存儲和查找方式。
隨著技術(shù)的發(fā)展,人們提出了基于多分支Trie樹的IPv6地址前綴存儲和查找算 法。字典樹(Trie)是一種用于快速字符串檢索的多叉樹結(jié)構(gòu)。其原理是利用字符串的公 共前綴來降低時空開銷,從而達(dá)到提高程序效率的目的。Trie樹在本質(zhì)上是一個確定的有 限狀態(tài)自動機(jī),每個結(jié)點(diǎn)代表一個狀態(tài),根據(jù)輸入變量的不同,進(jìn)行狀態(tài)轉(zhuǎn)移。用Trie樹搜 索一個關(guān)鍵碼的時間與關(guān)鍵碼自身及其長度有關(guān),最快是0 (1),即在第一層即可判斷是否 搜索到,最壞的情況是0 (η),n為Trie樹的層數(shù)。由于很多時候Trie樹的大多數(shù)結(jié)點(diǎn)分支 很少,因此Trie樹結(jié)構(gòu)空間浪費(fèi)比較多。如果把每次查找檢查的字符個數(shù)定義為步長,傳 統(tǒng)的Trie樹步長為1,多分支Trie樹的查找步長大于1。利用多分支Trie樹可以有效減 少查找過程中的存儲器訪問次數(shù)。
雖然該算法在查找速度上獲得了很大的提高,但仍然需要較大的存儲空間。圖1 示出了步長為K = 16、層數(shù)為128/16 = 8的多分支Trie樹(MT)的示意結(jié)構(gòu)。如圖1所 示,多分支Trie樹的每一個節(jié)點(diǎn)都包含216 = 65536個分支節(jié)點(diǎn)。因此,每個節(jié)點(diǎn)包含一塊 連續(xù)的大小為65536個單元的內(nèi)存,分別指向65536個子節(jié)點(diǎn)。由于IPv6地址長度為1 比特,因此MT的最大層數(shù)(深度)為8(1^/16 = 8)。MT的實(shí)際層數(shù)由存儲的IPv6地址 前綴決定,當(dāng)MT中不存儲任何IPv6地址前綴時,MT中只包含根節(jié)點(diǎn),層數(shù)為0,當(dāng)存儲的 IPv6地址前綴中包含長度為16的前綴時,層數(shù)為1。依此類推,當(dāng)存儲的IPv6地址前綴中 包含長度為128的前綴時,層數(shù)為8。
因此,當(dāng)IPv6地址前綴較多且比較分散時,需要非常大的存儲空間,同時產(chǎn)生了 很多的空指針,一方面會造成內(nèi)存的巨大浪費(fèi),另一方面會影響查找效率。發(fā)明內(nèi)容
本發(fā)明提出了一種IPv6地址前綴存儲方法,可以在使用有限內(nèi)存的情況下實(shí)現(xiàn) IPv6地址前綴的存儲,并且能夠?qū)崿F(xiàn)高效查找。
根據(jù)本發(fā)明的一個方面,提供了一種用于存儲IPv6地址前綴的方法,包括將 IPv6地址前綴劃分為具有固定長度K的L個部分,其中K和L均為正整數(shù);使用步長為K、 層數(shù)為L的多分支Trie樹結(jié)構(gòu)存儲IPv6地址前綴,其中每一個節(jié)點(diǎn)使用長度為2K的數(shù)組 來存儲節(jié)點(diǎn)指針,節(jié)點(diǎn)指針在數(shù)組中的位置表示IPv6地址前綴的K個比特;以及利用額外 數(shù)組對生成的多分支Trie樹中的每一個節(jié)點(diǎn)進(jìn)行壓縮存儲。
優(yōu)選地,所述壓縮存儲包括針對多分支Trie樹中的每一個節(jié)點(diǎn),利用兩個數(shù)組 來代替,第一數(shù)組存儲該節(jié)點(diǎn)中的非空指針值,而第二數(shù)組存儲每一個非空指針值在該節(jié) 點(diǎn)中的對應(yīng)位置。
優(yōu)選地,初始化多分支Trie樹結(jié)構(gòu),使得與根節(jié)點(diǎn)相對應(yīng)的數(shù)組中均為空指針。
優(yōu)選地,針對多分支Trie樹中的每一個節(jié)點(diǎn),通過遍歷與該節(jié)點(diǎn)相對應(yīng)的數(shù)組, 將非空指針和其相應(yīng)的位置分別存儲在第一數(shù)組和第二數(shù)組中。
優(yōu)選地,所述方法還包括如果需要查找已存儲的IPv6地址前綴,則使用二分法 依次查找每一層節(jié)點(diǎn)的第二數(shù)組。
優(yōu)選地,步長K等于16。
根據(jù)本發(fā)明的另一個方面,提供了一種用于存儲IPv6地址前綴的設(shè)備,包括劃 分單元,將IPv6地址前綴劃分為具有固定長度K的L個部分,其中K和L均為正整數(shù);存儲 單元,使用步長為K、層數(shù)為L的多分支Trie樹結(jié)構(gòu)存儲IPv6地址前綴,其中每一個節(jié)點(diǎn)使 用長度為2K的數(shù)組來存儲節(jié)點(diǎn)指針,節(jié)點(diǎn)指針在數(shù)組中的位置表示IPv6地址前綴的K個比 特;以及壓縮單元,利用額外數(shù)組對生成的多分支Trie樹中的每一個節(jié)點(diǎn)進(jìn)行壓縮存儲。
優(yōu)選地,所述壓縮單元針對多分支Trie樹中的每一個節(jié)點(diǎn),利用兩個數(shù)組來代 替,第一數(shù)組存儲該節(jié)點(diǎn)中的非空指針值,而第二數(shù)組存儲每一個非空指針值在該節(jié)點(diǎn)中 的對應(yīng)位置。
優(yōu)選地,所述存儲單元初始化多分支Trie樹結(jié)構(gòu),使得與根節(jié)點(diǎn)相對應(yīng)的數(shù)組中 均為空指針。
優(yōu)選地,所述壓縮單元針對多分支Trie樹中的每一個節(jié)點(diǎn),通過遍歷與該節(jié)點(diǎn)相 對應(yīng)的數(shù)組,將非空指針和其相應(yīng)的位置分別存儲在第一數(shù)組和第二數(shù)組中。
優(yōu)選地,該設(shè)備還包括查找單元,如果需要查找已存儲的IPv6地址前綴,則所述 查找單元使用二分法依次查找每一層節(jié)點(diǎn)的第二數(shù)組。
優(yōu)選地,步長K等于16。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)主要在于可以在使用較少內(nèi)存的情況下實(shí)現(xiàn) IPv6地址前綴的存儲。本發(fā)明解決了傳統(tǒng)的多分支Trie樹空指針浪費(fèi)的問題,減少了節(jié)點(diǎn) 指針占用的內(nèi)存空間。此外,本發(fā)明減少了 IPv6地址前綴查找過程中的查找次數(shù),有效地 提高了查找效率。
通過下面結(jié)合
本發(fā)明的實(shí)施例,將使本發(fā)明的上述及其它目的、特征和 優(yōu)點(diǎn)更加清楚,其中
圖1示出了步長K為16的多分支Trie樹結(jié)構(gòu)的一個示例;
圖2示出了根據(jù)本發(fā)明一個實(shí)施例的IPv6地址前綴存儲方法的流程圖3示出了根據(jù)本發(fā)明一個實(shí)施例向多分支Trie樹結(jié)構(gòu)添加IPv6地址前綴的示 意過程;
圖4示出了根據(jù)本發(fā)明一個實(shí)施例對步長K為16的NEXT數(shù)組進(jìn)行壓縮的示意 圖5示出了根據(jù)本發(fā)明一個實(shí)施例的IPv6地址前綴存儲設(shè)備的框圖;以及
圖6示出了根據(jù)本發(fā)明另一個實(shí)施例的IPv6地址前綴存儲設(shè)備的框圖。
具體實(shí)施方式
為了清楚詳細(xì)的闡述本發(fā)明的實(shí)現(xiàn)過程,下面給出了一些本發(fā)明的具體實(shí)施例。 參照附圖對本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說明,在描述過程中省略了對于本發(fā)明來說是不必要 的細(xì)節(jié)和功能,以防止對本發(fā)明的理解造成混淆。
圖2示出了根據(jù)本發(fā)明一個實(shí)施例的IPv6地址前綴存儲方法20的流程圖。如圖 2所示,方法20從步驟S200處開始。
在步驟S202,首先把要存儲的IPv6地址前綴劃分為具有固定長度K的L個部分, 其中K和L均為正整數(shù)。由于IPv6地址前綴不會超過128比特,因此K與L的乘積不大于 128。一般來說,為了便于存儲,K是2的正整數(shù)次冪。
接下來,在步驟S204,按照多分支Trie樹結(jié)構(gòu)來存儲Ipv6地址前綴。在一個實(shí)施 例中,該步驟S204可具體包括如下步驟
首先,初始化具有2K個存儲單元的第一指針數(shù)組,該指針數(shù)組對應(yīng)于Trie樹的根 節(jié)點(diǎn)。由于此時還未存儲任何IPv6地址前綴,因此可以將第一指針數(shù)組中的所有存儲單元 均為空指針。
設(shè)置計數(shù)值N,其中N是數(shù)值范圍在[1,L]中的正整數(shù)。針對每一個正整數(shù)值N,依 次執(zhí)行如下步驟初始化具有2K個存儲單元的第Ν+1指針數(shù)組,在第N指針數(shù)組中與IPv6 地址前綴的第N部分相對應(yīng)的位置存儲第Ν+1指針數(shù)組的首地址。通過該過程,能夠?qū)Pv6 地址前綴存儲到多分支Trie樹結(jié)構(gòu)中。
然后,在步驟S206,壓縮生成的多分支Trie樹。根據(jù)本發(fā)明的一個實(shí)施例,該步 驟S206可以包括如下步驟針對多分支Trie樹中的每一個節(jié)點(diǎn),利用兩個數(shù)組來代替,第 一數(shù)組存儲該節(jié)點(diǎn)中的非空指針值,而第二數(shù)組存儲每一個非空指針值在該節(jié)點(diǎn)中的對應(yīng) 位置。這樣,原先的Trie樹中每一個節(jié)點(diǎn)占用的2K個存儲單元均被壓縮為僅包括非空指 針值的數(shù)組以及表示非空指針值的相應(yīng)位置的數(shù)組,這兩個數(shù)組占用的空間比每一個節(jié)點(diǎn) 原先占用的2Κ個存儲單元小得多,因而極大地降低了存儲需求,并且能夠減少查找時所需 的次數(shù)和時間。
最后,方法20在步驟S208處結(jié)束。
可以理解,在步驟S204中,如果要存儲的IPv6地址前綴的第N部分已經(jīng)存在于第 N指針數(shù)組中,則可以使用已有的第Ν+1指針數(shù)組,而無需初始化新的第Ν+1指針數(shù)組。
備選地,盡管圖3中未示出,該方法還可以包括在存儲IPv6地址前綴后進(jìn)行查找。 例如,該查找過程可以包括
1)取Trie樹的根節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn),設(shè)X為IPv6地址前綴的0至K-I比特值,并且 令N = 1 ;
2)如果N不大于IPv6地址前綴的部分的總個數(shù),在當(dāng)前節(jié)點(diǎn)的數(shù)組AJ中查找X, 例如可以采用二分查找算法;否則,轉(zhuǎn)到步驟4);
3)如果X為AJ的第k個值,取AN[k]為當(dāng)前節(jié)點(diǎn),設(shè)X為IPv6地址前綴的K*N至 K*N+K-1位值,N加1后轉(zhuǎn)到步驟2);否則,如果X不在數(shù)組AJ中,則轉(zhuǎn)到步驟4);
4)取當(dāng)前節(jié)點(diǎn)為查找結(jié)果;如果沒有找到相應(yīng)的IPv6地址前綴,則查找結(jié)果是空5指針。
圖3示出了根據(jù)圖2所示的方法向多分支Trie樹結(jié)構(gòu)添加IPv6地址前綴的示意 過程。
如圖3所示,在本示例中,要向步長K為16的多分支Trie樹中插入IPv6地址前 綴 2002: c058:6301 :c058: :/64。由于 IPv6 地址前綴 2002 c058 6301 c058 :/64 的長度是 64比特,因此需要將該IPv6地址前綴劃分為64/16 = 4個部分(即L等于4)。
圖3的(a)部分示出了剛初始化的多分支Trie樹根節(jié)點(diǎn),包含一塊連續(xù)的、大小 為2"5 = 65536個單元的內(nèi)存,每個內(nèi)存單元中存儲的都為空指針。換句話說,對應(yīng)于根節(jié) 點(diǎn)的指針數(shù)組NEXT中均為空指針。
圖3的(b)部分示出了將IPv6地址前綴2002: c058:6301 :c058: :/64存儲到多分 支Trie樹結(jié)構(gòu)的過程。
首先,取IPv6 地址前綴 2002:c058:6301 :c058: :/64 的前 16 比特值“2002”,判 斷根節(jié)點(diǎn)的指針數(shù)組NEXT[2002]為空指針,則新建一個節(jié)點(diǎn)NODEl并初始化,將根節(jié)點(diǎn)的 NEXT[2002]指向N0DE1。即,根節(jié)點(diǎn)的NEXT[2002]中存儲新建的節(jié)點(diǎn)NODEl的指針數(shù)組 NEXT的首地址。
然后,取IPv6 地址前綴 2002c058:6301:c058 /64 的第二個 16 比特值“c058”, 判斷節(jié)點(diǎn)NODEl的NEXT[c058]為空指針,則新建一個節(jié)點(diǎn)N0DE2并初始化,將節(jié)點(diǎn)NODEl 的NEXT[c058]指向N0DE2 ;S卩,節(jié)點(diǎn)NODEl的NEXT[c058]中存儲新建的節(jié)點(diǎn)N0DE2的指針 數(shù)組NEXT的首地址。
接下來,取IPv6地址前綴2002 :c058:6301 :c058: :/64的第三個16比特值 "6301",判斷節(jié)點(diǎn)N0DE2的NEXT [6301]為空指針,則新建一個節(jié)點(diǎn)N0DE3并初始化,將節(jié)點(diǎn) N0DE2的NEXTM301]指向N0DE3 ;即,節(jié)點(diǎn)N0DE2的NEXT[6301]中存儲新建的節(jié)點(diǎn)N0DE3 的指針數(shù)組NEXT的首地址。
最后,取IPv6 地址前綴 2002:c058:6301 :c058::/64 的最后 16 比特值“c058”,判 斷節(jié)點(diǎn)N0DE3的NEXT[c058]為空指針,則新建一個節(jié)點(diǎn)N0DE4并初始化,將節(jié)點(diǎn)N0DE3的 NEXT[c058]指向N0DE4 ;S卩,節(jié)點(diǎn)N0DE3的NEXT[c058]中存儲新建的節(jié)點(diǎn)N0DE4的指針數(shù) 組NEXT的首地址。
通過上述過程,將IPv6地址前綴2002 :c058:6301 :c058: :/64存儲到多分支iTrie 樹中。
圖4示出了根據(jù)本發(fā)明一個實(shí)施例對圖3生成的多分支Trie樹的根節(jié)點(diǎn)進(jìn)行壓 縮的示意圖。例如,如果與根節(jié)點(diǎn)相對應(yīng)的長度為65536的NEXT數(shù)組中僅包含5個非空 指針,則可以采用數(shù)組AN存儲這5個非空指針值,并采用數(shù)據(jù)AJ存儲這5個非空指針在 NEXT數(shù)組中出現(xiàn)的位置。具體地,如圖4所示,NEXT數(shù)組中的非空指針是NEXT
= Oxcc 123d44、NEXT[1] = 0xc2123654、NEXT [1024] = 0x2378cab8、NEXT [41024] = 0x2378cabc 以及 NEXT[63028] = 0x4378cab0。那么,數(shù)組 AN 包括AN
=Oxcc 123d44、AN[1]= 0xc2123654、AN[2] = 0x2378cab8、AN[3] = 0x2378cabc 和 AN[4] = 0x4378cab0。相應(yīng)地, 數(shù)組 AJ 包括AJ
=0、AJ[1] =1、AJ[2] = 1024, AJ[3] = 41024 和 A九4] = 63028。
這樣,可以將根節(jié)點(diǎn)占用的內(nèi)存從65536個單元減少到10個單元。
當(dāng)需要查找根節(jié)點(diǎn)的NEXT數(shù)組時,先遍歷AJ數(shù)組,判斷XX(IPv6地址前綴的前16比特)是否存儲在AJ中。如果存儲在AJ[i] = XX,則取NEXT[XX] = AN[i];否則,取 NEXT[XX]為空指針。優(yōu)選地,可以使用二分法來查找數(shù)組AJ。
本領(lǐng)域的技術(shù)人員可以理解,圖4所示的對根節(jié)點(diǎn)進(jìn)行壓縮的過程同樣適用于對 各個子節(jié)點(diǎn)進(jìn)行壓縮。
圖5示出了根據(jù)本發(fā)明一個實(shí)施例的IPv6地址前綴存儲設(shè)備50的框圖。如圖5 所示,IPv6地址前綴存儲設(shè)備50包括劃分單元510、存儲單元520和壓縮單元530。
劃分單元510把要存儲的IPv6地址前綴劃分為具有固定長度K的L個部分,其中 K和L均為正整數(shù)。由于IPv6地址前綴不會超過128比特,因此K與L的乘積不大于128。 一般來說,為了便于存儲,K是2的正整數(shù)次冪。
存儲單元520按照多分支Trie樹結(jié)構(gòu)來存儲Ipv6地址前綴。首先,存儲單元520 初始化具有2K個存儲單元的第一指針數(shù)組,該指針數(shù)組對應(yīng)于Trie樹的根節(jié)點(diǎn)。由于此時 還未存儲任何IPv6地址前綴,因此可以將第一指針數(shù)組中的所有存儲單元均為空指針。然 后,存儲單元520設(shè)置計數(shù)值N,其中N是數(shù)值范圍在[1,L]中的正整數(shù)。針對每一個正整 數(shù)值N,存儲單元520依次執(zhí)行如下步驟初始化具有2K個存儲單元的第Ν+1指針數(shù)組,在 第N指針數(shù)組中與IPv6地址前綴的第N部分相對應(yīng)的位置存儲第Ν+1指針數(shù)組的首地址。
壓縮單元530壓縮由存儲單元520生成的多分支Trie樹。根據(jù)本發(fā)明的一個實(shí)施 例,壓縮單元530針對多分支Trie樹中的每一個節(jié)點(diǎn),利用兩個數(shù)組來代替,第一數(shù)組存儲 該節(jié)點(diǎn)中的非空指針值,而第二數(shù)組存儲每一個非空指針值在該節(jié)點(diǎn)中的對應(yīng)位置。這樣, 原先的Trie樹中每一個節(jié)點(diǎn)占用的2K個存儲單元均被壓縮為僅包括非空指針值的數(shù)組以 及表示非空指針值的相應(yīng)位置的數(shù)組,這兩個數(shù)組占用的空間比每一個節(jié)點(diǎn)原先占用的2Κ 個存儲單元小得多,因而極大地降低了存儲需求,并且能夠減少查找時所需的次數(shù)和時間。
圖6示出了根據(jù)本發(fā)明另一個實(shí)施例的IPv6地址前綴存儲設(shè)備60的框圖。圖6 中的大部分組件與圖5中的相同,不同之處僅在于圖6所示的IPv6地址前綴存儲設(shè)備60 還包括查找單元Μ0。為了簡便起見,下文僅對查找單元540進(jìn)行詳細(xì)描述。
為了在已存儲的IPv6地址前綴中查找特定的IPv6地址前綴,查找單元540可執(zhí) 行如下處理
1)取Trie樹的根節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn),設(shè)X為IPv6地址前綴的0至K-I比特值,并且 令N = 1 ;
2)如果N不大于IPv6地址前綴的部分的總個數(shù),在當(dāng)前節(jié)點(diǎn)的數(shù)組AJ中查找X, 例如可以采用二分查找算法;否則,轉(zhuǎn)到步驟4);
3)如果X為AJ的第k個值,取AN[k]為當(dāng)前節(jié)點(diǎn),設(shè)X為IPv6地址前綴的K*N至 K*N+K-1位值,N加1后轉(zhuǎn)到步驟2);否則,如果X不在數(shù)組AJ中,則轉(zhuǎn)到步驟4);
4)取當(dāng)前節(jié)點(diǎn)為查找結(jié)果;如果沒有找到相應(yīng)的IPv6地址前綴,則查找結(jié)果是空 指針。
與現(xiàn)有技術(shù)相比,本發(fā)明解決了傳統(tǒng)的多分支Trie樹空指針浪費(fèi)的問題,減少了 節(jié)點(diǎn)指針占用的內(nèi)存空間,因而可以在使用較少內(nèi)存的情況下實(shí)現(xiàn)IPv6地址前綴的存儲。 此外,本發(fā)明減少了 IPv6地址前綴查找過程中的查找次數(shù),減少了查找時間,從而有效地 提高了查找效率。
至此已經(jīng)結(jié)合優(yōu)選實(shí)施例對本發(fā)明進(jìn)行了描述。應(yīng)該理解,本領(lǐng)域技術(shù)人員在不脫離本發(fā)明的精神和范圍的情況下,可以進(jìn)行各種其它的改變、替換和添加。因此,本發(fā)明 的范圍不局限于上述特定實(shí)施例,而應(yīng)由所附權(quán)利要求所限定。
權(quán)利要求
1.一種用于存儲IPv6地址前綴的方法,包括將IPv6地址前綴劃分為具有固定長度K的L個部分,其中K和L均為正整數(shù);使用步長為K、層數(shù)為L的多分支Trie樹結(jié)構(gòu)存儲IPv6地址前綴,其中每一個節(jié)點(diǎn)使 用長度為2K的數(shù)組來存儲節(jié)點(diǎn)指針,節(jié)點(diǎn)指針在數(shù)組中的位置表示IPv6地址前綴的K個 比特;以及利用額外數(shù)組對生成的多分支Trie樹中的每一個節(jié)點(diǎn)進(jìn)行壓縮存儲。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述壓縮存儲包括針對多分支Trie樹中的每 一個節(jié)點(diǎn),利用兩個數(shù)組來代替,第一數(shù)組存儲該節(jié)點(diǎn)中的非空指針值,而第二數(shù)組存儲每 一個非空指針值在該節(jié)點(diǎn)中的對應(yīng)位置。
3.根據(jù)權(quán)利要求1所述的方法,其中,初始化多分支Trie樹結(jié)構(gòu),使得與根節(jié)點(diǎn)相對應(yīng) 的數(shù)組中均為空指針。
4.根據(jù)權(quán)利要求2所述的方法,其中,針對多分支Trie樹中的每一個節(jié)點(diǎn),通過遍歷與 該節(jié)點(diǎn)相對應(yīng)的數(shù)組,將非空指針和其相應(yīng)的位置分別存儲在第一數(shù)組和第二數(shù)組中。
5.根據(jù)權(quán)利要求2所述的方法,還包括如果需要查找已存儲的IPv6地址前綴,則使 用二分法依次查找每一層節(jié)點(diǎn)的第二數(shù)組。
6.根據(jù)權(quán)利要求1-5中任意一項(xiàng)所述的方法,其中,步長K等于16。
7.一種用于存儲IPv6地址前綴的設(shè)備,包括劃分單元,將IPv6地址前綴劃分為具有固定長度K的L個部分,其中K和L均為正整數(shù);存儲單元,使用步長為K、層數(shù)為L的多分支Trie樹結(jié)構(gòu)存儲IPv6地址前綴,其中每一 個節(jié)點(diǎn)使用長度為2K的數(shù)組來存儲節(jié)點(diǎn)指針,節(jié)點(diǎn)指針在數(shù)組中的位置表示IPv6地址前 綴的K個比特;以及壓縮單元,利用額外數(shù)組對生成的多分支Trie樹中的每一個節(jié)點(diǎn)進(jìn)行壓縮存儲。
8.根據(jù)權(quán)利要求1所述的設(shè)備,其中,所述壓縮單元針對多分支Trie樹中的每一個節(jié) 點(diǎn),利用兩個數(shù)組來代替,第一數(shù)組存儲該節(jié)點(diǎn)中的非空指針值,而第二數(shù)組存儲每一個非 空指針值在該節(jié)點(diǎn)中的對應(yīng)位置。
9.根據(jù)權(quán)利要求7所述的設(shè)備,其中,所述存儲單元初始化多分支Trie樹結(jié)構(gòu),使得與 根節(jié)點(diǎn)相對應(yīng)的數(shù)組中均為空指針。
10.根據(jù)權(quán)利要求8所述的設(shè)備,其中,所述壓縮單元針對多分支Trie樹中的每一個節(jié) 點(diǎn),通過遍歷與該節(jié)點(diǎn)相對應(yīng)的數(shù)組,將非空指針和其相應(yīng)的位置分別存儲在第一數(shù)組和 第二數(shù)組中。
11.根據(jù)權(quán)利要求8所述的設(shè)備,還包括查找單元,如果需要查找已存儲的IPv6地址前 綴,則所述查找單元使用二分法依次查找每一層節(jié)點(diǎn)的第二數(shù)組。
12.根據(jù)權(quán)利要求7-11中任意一項(xiàng)所述的設(shè)備,其中,步長K等于16。
全文摘要
本發(fā)明提出了一種用于對IPv6地址前綴進(jìn)行存儲的方法,該方法包括將IPv6地址前綴劃分為具有固定長度K的L個部分,其中K和L均為正整數(shù);初始化步長為K、層數(shù)為L的多分支Trie樹結(jié)構(gòu),以存儲IPv6地址前綴,其中每一個節(jié)點(diǎn)使用長度為2K的數(shù)組來存儲節(jié)點(diǎn)指針,節(jié)點(diǎn)指針在數(shù)組中的位置表示IPv6地址前綴的K個比特;以及利用額外數(shù)組對生成的多分支Trie樹中的每一個節(jié)點(diǎn)進(jìn)行壓縮存儲。此外,本發(fā)明還提出了一種相應(yīng)的IPv6地址前綴存儲設(shè)備。本發(fā)明在有效減少存儲容量的同時提高了查找效率。
文檔編號H04L29/12GK102045412SQ20101061154
公開日2011年5月4日 申請日期2010年12月28日 優(yōu)先權(quán)日2010年12月28日
發(fā)明者吳建平, 張輝, 李星, 胡松, 黃友俊 申請人:賽爾網(wǎng)絡(luò)有限公司