基于優先級Trie樹的動態IP匹配模型的制作方法
【技術領域】
[0001] 本發明屬于防火墻技術領域,尤其涉及一種基于優先級Trie樹的動態IP匹配模 型。
【背景技術】
[0002] Web防火墻可以很好的解決互聯網平臺監管問題。在Web防火墻工作過程中,需要 根據數據流的IP地址進行篩選,并對相應的數據流進行安全控制。由于Internet規模的 不斷擴大,Web防火墻中IP安全規則的更新愈加頻繁的發生。這就在Web防火墻對IP地 址進行篩選過程中,引入了一個問題:如何處理Web防火墻中IP安全規則的大量事實更新。
[0003] 最常用的IP匹配算法就是基于二進制Trie樹的算法。在IP最長前綴匹配算法 中最基本的Trie樹為二進制Trie。前綴匹配算法是對比特串進行逐位比較,而比特串的 每一位只包含兩種情況,那就是0和1,對應二進制Trie樹中的左結點和右結點。在二進 制Trie樹中,將一次Trie樹的操作分為多個步驟。在Trie樹的構建或更新過程中,需要 根據前綴各比特的值決定分支的走向。在IP最長前綴匹配過程中,需要根據地址各比特的 值決定分支的走向。
[0004] 綜上所述,當前IP匹配算法的缺點是查找效率低下,開銷大。
【發明內容】
[0005] 為解決上述問題,本發明提供一種基于優先級Trie樹的動態IP匹配模型,克服了 當前Web防火墻中IP匹配模塊的以下缺點,即查找效率低下,開銷比較大。
[0006] 本發明的基于優先級Trie樹的動態IP匹配模型,其包括以下步驟:
[0007] 步驟I:BIPT匹配模型的構建過程,具體包括:
[0008] 步驟11,劃分前綴;
[0009] 設前綴P的長度為1,則該前綴P表示為P=PidP1. ..P1 4 ;以長度k(k< 1)對前 綴P進行劃分,分為長度大于劃分點k的第一前綴集合和長度小于劃分點k的第二前綴集 合,賦予第一前綴集合內每個前綴一個索引值,賦予第二前綴集合內每個前綴一個索引后 綴,且所有的索引后綴相同;
[0010] 以Prek (P)來表示有索引值的前綴,貝IJPrek (P) = (P0Pp-Pkl)2;以Park (P)表示 有索引后綴的如綴,則Park(P) =PkPk+1. ? ?P1丨* ;
[0011] 步驟12,構建索引樹;
[0012] 將第一前綴集合內的前綴P根據索引值掛載到索引樹上相應的結點中,并 用BIPT[i]表示,且0彡i彡2k-l;將第二前綴集合內的所有前綴掛載到索引樹上的一 個共同的B*結點中,并用BIPT[-1]表示;
[0013] 步驟2 :BIPT樹的前綴插入操作;
[0014] 步驟21 :對每一個前綴P,先求前綴P的長度,如果其長度大于劃分點k,則設置起 始查找結點為根結點并進行步驟22 ;否則將前綴插入BIPT[-1]對應的優先級Trie樹中并 終止前綴插入操作;
[0015] 步驟22:在B*索引樹的給定結點中進行查找,直到葉子結點;在索引結 點中若Pre(p) <Ic1,則選擇索引結點的第1個分支進行查找,并執行步驟23 ;若 Pre(p) <ki+1,則選擇索引結點的第i個分支進行查找,并執行步驟23 ;若knW <Pre(p),貝Ij選擇索引結點的第n(X)個分支進行查找,并執行步驟23 ;并記錄查找路徑中 所搜索的給定結點以及給定結點中分支的選擇;
[0016] 其中規定Ici (X)是結點X的第i個索引值,Cj (X)是結點X的第j個孩子指針,其 中i和j滿足1彡i彡H(X)并且1彡j彡n(x)。在結點中的索引值存在如下關系:
[0017] kj(x) <k2 (x) < . . . <kn(x) (x)
[0018] 步驟23:查找索引結點中是否有與B*索引樹的給定結點的索引值相同的關鍵字, 如果有,則直接在該索引樹的給定結點優先級Trie樹中插入索引后綴,并結束插入操 作;否則執行步驟24 ;
[0019] 步驟24:判斷索引樹的給定結點中索引值數目是否已滿,如果給定結點已滿, 則進行索引結點分裂,在新結點中的優先級Trie樹中插入索引后綴;如果結點未滿,則在 該B*索引樹的給定結點中插入索引值,并在優先級Trie樹中插入索引后綴;
[0020] 步驟3 :BIPT樹的前綴刪除操作;
[0021] 步驟31 :對每一個前綴P,先求前綴P的長度,如果其長度小于劃分點,則在 BIPT[-1]形成的優先級Trie樹中刪除前綴P,并終止前綴刪除操作;否則進行步驟32 ;
[0022] 步驟32 :在索引樹的索引結點中進行查找,直到葉子結點;使得索引值在索引 結點兩個關鍵字之間,索引結點分別為左區間和右區間;
[0023] 步驟33,在左區間對應的優先級Trie樹中移除索引后綴,釋放相應的數據結點; 然后記錄搜索路徑各結點指針以及左區間的位置;
[0024] 步驟34 :釋放數據結點后,若左區間對應的優先級Trie樹為空,則在索引樹中 刪除對應的索引值,并判斷索引結點中的結點數小于「2m/3l,執行步驟34,否則結束刪除 操作;
[0025] 步驟35若結點數小于'「2相/3>則進行結點合并操作,否則結束刪除操作;合并操 作如下:
[0026] 步驟351 :若索引結點為根結點,則結束合并操作,否則執行步驟352 ;
[0027]步驟352 :判斷兄弟結點中的結點數是否小于「2m/3^,若小于則結束合并操作, 若大于則將兄弟結點中的結點移至該索引結點中,并更新父結點對這兩個分支的索引值; 若兄弟結點中的結點數等于「2m/3\則將這三個結點合并為兩個結點,同時更新并刪除父 結點中對這兩個分支的索引值,如果父結點中元素不足_「2w/3l,則結束合并操作;
[0028] 步驟4 :BIPT樹的IP匹配操作;
[0029] 根據給定的IP地址,將其前綴分為索引值以及索引后綴,根據索引值在索引樹 中定位到對應的優先級Trie樹分支并進行查找,得到的結果為最長前綴;若未找到對應分 支,或在優先級Trie樹中未找到匹配結果,則在BIPT[-1]中繼續進行最長前綴匹配,直到 找到最長前綴,結束BIPT最長前綴匹配過程。
[0030] 進一步的,所述步驟24中結點分裂的過程如下:
[0031] 步驟241 :若給定結點為根結點,則分裂為兩個結點,并申請新結點;在索引結點 中,對其中的索引值賦值并指向兩個分裂結點,用新結點替換根結點;
[0032] 步驟242:判斷給定結點的兄弟結點中索引值數目是否已滿,如果兄弟結點中索 引值數目未滿,則根據索引值大小計算位置,并將該兄弟結點的部分信息移至其兄弟結點 中,并更新父結點中關于兩個結點的標記;
[0033] 如果兄弟結點中索引值數目已滿,則申請索引結點,并將兄弟結點和剛申請的索 引結點中的個元素移至新結點,并計算新索引結點的位置,進行分裂,同時更新并插 入父結點中關于三個結點的索引值,如果父結點中元素已滿,則跳轉到步驟241。
[0034] 有益效果:
[0035] 本發明的有益效果體現在,與現有的方法相比,本發明提出了基于優先級Trie樹 的動態IP匹配模型,利用優先級Trie樹在IP查找方面的優越性,提高它在更新方面的性 能。利用樹保證在更快定位到優先級Trie樹分支,同時能以更小的概率分配索引結點。 本發明提出的算法與已有的優先級Trie樹相比,不僅減少了前綴更新時的開銷,同時也保 持了較高的查找效率。
【附圖說明】
[0036] 圖1為本發明的基于優先級Trie樹的動態IP匹配模型中BIPT結構示意圖。
【具體實施方式】
[0037] 本發明結合B*樹和優先級Trie樹的數據結構構建能夠支持前綴實時更新的BIPT 匹配模型,它包括如下步驟:
[0038] BIPT匹配模型的構建過程(步驟1);
[0039] BIPT樹的前綴插入操作(步驟2);
[0040] BIPT樹的前綴刪除操作(步驟3);
[0041] BIPT樹的IP匹配操作(步驟4);
[0042] 所述步驟1的構建方法包括但不限于以下方法:
[0043] 前綴在進行劃分的時候可以被分類兩類:長度小于劃分點的前綴和長度大于劃分 點的前綴。長度大于劃分點的前綴需要根據索引值將其掛載到相應的B*結點中,其余的前 綴掛載到一個共同的結點中。
[0044] BIPT是一個結合了B*樹和優先級Trie樹的數據結構,這種結構包括兩種結點: 索引結點和數據結點。索引結點又可分為兩種,內部索引結點和外部索引結點(又稱葉子 索引結點)。針對BIPT樹,定義如下屬性:
[0045] 1、針對索引結點
[0046] 1)利用f(x)代表結點為內部索引結點還是外部索引結點,該屬性包含0,1兩種 值。當f(X)為0是代表內部索引結點,當f(x)為1時代表外部索引結點。
[0047] 2)利用n(x)表示結點X中索引值的個數,根據B*樹的特點,除根結點外,需要有 「2w/ 3IS"(.v:)Sm,若n(x) =m表示結點已滿。
[0048] 3)規定Ici (X)是結點X的第i個索引值,Cj(X)是結點X的第j個孩子指針,其中 i和j滿足1彡i彡H(X)并且1彡j彡n(x)。在結點中的索引值存在如下關系:
[0049] kj(x) <k2 (x) < . . . <kn(x) (x)
[0050] 4)規定通過inx(x)表示結點中索引值的集合,則有:
[0051 ]ins(x) = {k; (x) 11 ^i^n(x)}
[0052] 5)索引結點包括一個指向兄弟結點的指針,用next(x)進行表示。
[0053] 6)所有的外部索引結點處于同一層,層數為h。
[0054] 7)外部索引結點存放與n(x)數值相等的數據結點,數據結點存儲前綴,對所有的 前綴使用優先級Trie樹進行組織。Ic1 (X)中存放的前綴集合為BIPT[i]。
[0055] 綜上所述,索引結點可以被表示為:
[0056] (I(X),n(X),Ic1 (X),C1 (X),k2 (X),c2 (X),? ? ?,kn(x) (X),cn(x) (X),next(X))
[0057] 通過索引結點的性質,可以計算出索引樹在最壞情況下層數的復雜度。當結點中 都存放/3 7]個索引值,并且取索引值全部情況時,索引樹高度最大,即有:
[0060] 則h=O(k/logm)。
[0061] 2、針對數據結點
[0062] 1)在數據結點中,同樣需要判斷結點是否為葉子結點。
[0