專利名稱:一種包分類規(guī)則集快速壓縮方法
技術(shù)領(lǐng)域:
本發(fā)明屬于電數(shù)字數(shù)據(jù)處理技術(shù)領(lǐng)域,具體涉及包分類規(guī)則集的快速壓縮方法。
背景技術(shù):
規(guī)則集是包分類算法執(zhí)行分類的基礎(chǔ)和依據(jù),它的性質(zhì)主要取決于它的結(jié)構(gòu)特性和規(guī)模。在實際應(yīng)用中,規(guī)則集的結(jié)構(gòu)特性一般由具體應(yīng)用的場景所決定;而規(guī)則集的規(guī)模經(jīng)常變化,并且規(guī)則集的規(guī)模對一些包分類算法性能的影響也比較明顯,一般情況下,規(guī)則集規(guī)模越小,其存儲所需空間越少,且能夠使包分類算法的性能越好。目前壓縮規(guī)則集的方法多采用逐條規(guī)則逐個域比較的簡單壓縮方法,這種壓縮策略隨著規(guī)則集規(guī)模的增大會導(dǎo)致壓縮時間越來越長。
發(fā)明內(nèi)容
本發(fā)明的目的是提出一種包分類規(guī)則集快速壓縮方法,以解決在規(guī)則集規(guī)模較大時,基于逐條規(guī)則逐個域比較的簡單壓縮方法導(dǎo)致壓縮時間較長的問題,實現(xiàn)規(guī)則集的快速壓縮。本發(fā)明包分類規(guī)則集快速壓縮方法,首先提取包括源/目的地址的前綴長度、源 /目的端口號的范圍、協(xié)議類型以及處理動作在內(nèi)的這些規(guī)則信息,通過哈希(Hash)函數(shù)
h =H(Ri) = mask+ V Iog(W) + prtcl+action
m ^P^將規(guī)則信息散列,式中氏表示包分類規(guī)則集
sip _l,dp_w
dip _h
中的第i條規(guī)則,sip_h、sip_l和dip_h分別為源地址高16位、低16位和目的地址高16 位的前綴長度,sp_w和dp_w分別為源端口和目的端口的范圍,prtcl為協(xié)議類型值,action 為處理動作項的值;再以散列值作為查找關(guān)鍵字構(gòu)建二叉查找樹,然后為二叉查找樹的每個結(jié)點保存一個沖突列表,并在沖突列表中順序比較每條規(guī)則,最后合并沖突列表中的可合并規(guī)則;其特征在于將比較壓縮過程轉(zhuǎn)變?yōu)橄确诸愒俸喜⒌倪^程,即先通過使用哈希函數(shù)將提取的規(guī)則信息散列并以散列值作為查找關(guān)鍵字構(gòu)建二叉查找樹實現(xiàn)粗略分類;然后為二叉查找樹的每個結(jié)點保存一個沖突列表,在沖突列表中順序比較每條規(guī)則完成精確分類;最后遍歷二叉查找樹所有結(jié)點的沖突列表,合并其中可合并的規(guī)則;重復(fù)“先通過使用哈希函數(shù)將提取的規(guī)則信息散列”到“合并其中可合并的規(guī)則”的過程直至規(guī)則集中沒有可以合并的規(guī)則,然后將沒有被合并的規(guī)則-即合并了其它規(guī)則和不能被其它規(guī)則合并的規(guī)則-組成一個新的規(guī)則集,重復(fù)執(zhí)行上述所有過程直至不可能再發(fā)生合并;具體操作步驟如下第一步、規(guī)則集讀取和存儲步驟讀取規(guī)則集并將其存儲在嵌套定義的數(shù)據(jù)結(jié)構(gòu)中;第二步、快速壓縮步驟,該步驟又可分為以下具體步驟初始化步驟1)置規(guī)則集的合并標(biāo)志為假,并新建一棵空的二叉查找樹;提取規(guī)則信息步驟2)對于包分類規(guī)則集中的某條規(guī)則Ri,如果它沒有被合并且
4沒有合并其它規(guī)則,則對其提取規(guī)則信息并使用哈希函數(shù)散列成查找關(guān)鍵字;查找關(guān)鍵字步驟;3)在二叉查找樹上查找與包分類規(guī)則集中的某條規(guī)則氏的查找關(guān)鍵字相同的結(jié)點;如果遍歷整棵二叉查找樹都沒有找到關(guān)鍵字相同的結(jié)點,則將查找關(guān)鍵字和該規(guī)則信息作為一個新的結(jié)點插入樹中并為其新建沖突列表,然后執(zhí)行合并規(guī)則步驟5);如果找到相同結(jié)點,則執(zhí)行檢查規(guī)則信息步驟4);檢查規(guī)則信息步驟4)判斷查找關(guān)鍵字相同結(jié)點的規(guī)則信息是否相同;如果相同,則返回結(jié)點的沖突列表;如果不相同,則執(zhí)行合并規(guī)則步驟5);合并規(guī)則步驟5)遍歷沖突列表,如果沖突列表為空則將包分類規(guī)則集中的規(guī)則 Ri直接插入,如果沖突列表不為空并且包分類規(guī)則集中的規(guī)則氏與列表中的所有規(guī)則都是可合并的,則將包分類規(guī)則集中的某條規(guī)則Ri添加至沖突列表中;如果沖突列表不為空而且包分類規(guī)則集中的某條規(guī)則Ri與列表中的所有規(guī)則并不都是可合并的,則不添加包分類規(guī)則集中的規(guī)則氏,執(zhí)行重復(fù)處理步驟6);重復(fù)處理步驟6):重復(fù)執(zhí)行提取規(guī)則信息步驟2)到合并規(guī)則步驟5),直至所有規(guī)則被處理;獲取沖突列表步驟7)遍歷二叉查找樹,得到所有沖突列表;設(shè)置合并標(biāo)志步驟8)將沖突列表中的規(guī)則合并,如果有規(guī)則發(fā)生合并,則設(shè)置合并標(biāo)志為1,并且對于其中被合并或合并其它規(guī)則分別設(shè)置相應(yīng)的標(biāo)志;檢查合并標(biāo)志步驟9)刪除二叉查找樹;并且,如果合并標(biāo)志為真,則返回初始化步驟1);如果合并標(biāo)志不為真,則執(zhí)行再次合并步驟10);再次合并步驟10)將沒有被合并的規(guī)則看作新的規(guī)則集重復(fù)執(zhí)行初始化步驟1) 到檢查合并標(biāo)志步驟9),直至不再有合并發(fā)生;第三步、釋放壓縮階段過程中的臨時空間和被合并規(guī)則的存儲空間。與基于逐條規(guī)則逐個域比較的現(xiàn)有技術(shù)相比較,本發(fā)明提出的這種規(guī)則集快速壓縮方法是一個先粗略分類再精確分類然后合并的先分類再合并壓縮的過程;在保持相近壓縮率的同時,可明顯減少壓縮時間;快速壓縮方法通過粗略分類將規(guī)則集劃分可有效地減少規(guī)則之間比較次數(shù),通過精確分類保證規(guī)則之間可合并,從而實現(xiàn)規(guī)則之間直接合并,粗略分類通過規(guī)則信息、哈希函數(shù)以及二叉查找樹結(jié)構(gòu)實現(xiàn),精確分類仍需逐條規(guī)則逐個域比較,但粗略分類保證了其比較次數(shù)較少,所以比較速度較快;實驗結(jié)果表明,與基于逐條規(guī)則逐個域比較的現(xiàn)有技術(shù)相比較,在保持相近壓縮率的前提下,本發(fā)明提出的規(guī)則集快速壓縮方法可將壓縮時間平均減少90%以上。
圖1為本發(fā)明實施例的規(guī)則集存儲結(jié)構(gòu)示意圖;圖2為本發(fā)明實施例中快速壓縮過程的主要數(shù)據(jù)結(jié)構(gòu)示意圖。
具體實施例方式實施例1 本實施例是對本發(fā)明規(guī)則集快速壓縮方法操作過程的一種具體舉例說明。先通過哈希函數(shù)散列值和規(guī)則信息將規(guī)則集粗略分類,所述規(guī)則信息主要包括源/目的地址的前綴長度、源/目的端口號的范圍、協(xié)議類型以及處理動作;然后在每個分類中逐條比較精確分類,精確分類后的每類規(guī)則都是可直接合并的;然后直接合并規(guī)則實現(xiàn)壓縮。本實施例的具體操作步驟列舉如下第一步、規(guī)則集讀取和存儲步驟圖1給出了本實施例的規(guī)則集存儲結(jié)構(gòu)示意圖。如圖1中所示,本實施例采用結(jié)構(gòu)嵌套的方式存儲規(guī)則集RS,其規(guī)則集結(jié)構(gòu)中存儲了指向每條規(guī)則的指針Riptr、合并標(biāo)志數(shù)組MFA以及規(guī)則集規(guī)模SRS,其中i為指向規(guī)則的指針的序號,取值范圍為0到N-1,規(guī)則R結(jié)構(gòu)中存儲了被其合并的規(guī)則的編號Rid、指向該規(guī)則每個域的指針Fkptr以及合并規(guī)則列表MRL,其中k為指向域的指針的序號,取值范圍為0到K-1,域F結(jié)構(gòu)中則存儲了該域上值V和掩碼M的列表以及匹配類型Mtyp,其中,值V的取值個數(shù)為0,1到X-1,掩碼M的取值個數(shù)為0,1到X-1,列表項保存了規(guī)則和被其合并的規(guī)則在該域上的值和掩碼。域列表長度視被其合并規(guī)則的數(shù)量而定,以減少規(guī)則集的存儲空間為準。第二步、快速壓縮步驟一、實現(xiàn)步驟本實施例中所采取的規(guī)則集快速壓縮的具體實現(xiàn)流程步驟如下初始化步驟1)置規(guī)則集的合并標(biāo)志為假,并新建一棵空的二叉查找樹;提取規(guī)則信息步驟2)對于某條包分類規(guī)則集中的規(guī)則氏,如果它沒有被合并且沒有合并其它規(guī)則,那么對其提取規(guī)則信息并使用哈希函數(shù)散列成查找關(guān)鍵字;查找關(guān)鍵字步驟幻在二叉查找樹上查找與某條包分類規(guī)則集中的規(guī)則氏的查找關(guān)鍵字相同的結(jié)點;如果遍歷整棵二叉查找樹都沒有找到,則將查找關(guān)鍵字和該規(guī)則信息作為一個新的結(jié)點插入樹中并為其新建沖突列表,然后執(zhí)行合并規(guī)則步驟5);如果找到相同結(jié)點,則執(zhí)行檢查規(guī)則信息步驟4);檢查規(guī)則信息步驟4)判斷查找關(guān)鍵字相同結(jié)點的規(guī)則信息是否相同;如果相同,則返回結(jié)點的沖突列表;如果不相同,則執(zhí)行合并規(guī)則步驟5);合并規(guī)則步驟5)遍歷沖突列表,如果沖突列表為空則將包分類規(guī)則集中的規(guī)則 Ri直接插入,如果沖突列表不為空并且包分類規(guī)則集中的規(guī)則氏與列表中的所有規(guī)則都是可合并的,則將包分類規(guī)則集中的某條規(guī)則Ri添加至沖突列表中;如果沖突列表不為空而且包分類規(guī)則集中的某條規(guī)則Ri與列表中的所有規(guī)則并不都是可合并的,則不添加包分類規(guī)則集中的規(guī)則Ri,執(zhí)行重復(fù)處理步驟6);重復(fù)處理步驟6)重復(fù)執(zhí)行提取規(guī)則信息步驟2)到合并規(guī)則步驟5),直至所有規(guī)則被處理;獲取沖突列表步驟7)遍歷二叉查找樹,得到所有沖突列表;設(shè)置合并標(biāo)志步驟8)將沖突列表中的規(guī)則合并,如果有規(guī)則發(fā)生合并,則設(shè)置合并標(biāo)志為1,并且對于其中被合并或合并其它規(guī)則分別設(shè)置相應(yīng)的標(biāo)志;檢查合并標(biāo)志步驟9)刪除二叉查找樹;并且,如果合并標(biāo)志為真,則返回初始化步驟1);如果合并標(biāo)志不為真,則執(zhí)行再次合并步驟10);再次合并步驟10)將沒有被合并的規(guī)則看作新的規(guī)則集重復(fù)執(zhí)行初始化步驟1) 到檢查合并標(biāo)志步驟9),直至不再有合并發(fā)生;二、分類信息設(shè)計
本發(fā)明包分類規(guī)則集快速壓縮方法中粗略分類過程的分類依據(jù)是哈希函數(shù)和規(guī)則信息,它們設(shè)計的好壞直接影響發(fā)明的性能。因為使用哈希函數(shù)分類的目的一方面是減少規(guī)則之間的比較次數(shù)提高壓縮速度,另一方面則要盡量使可合并規(guī)則保存在同一類中保證壓縮率。如果哈希函數(shù)造成的沖突較多,那么壓縮的性能將退化到與簡單壓縮方法相同; 如果哈希函數(shù)造成的沖突較少,那么很多可合并規(guī)則不能夠被保存在同一類使得它們不能合并而影響壓縮率。因此,綜合考慮,本發(fā)明中使用的哈希函數(shù)定義如下
權(quán)利要求
1. 一種包分類規(guī)則集快速壓縮方法,首先提取源/目的地址的前綴長度、 源/目的端口號的范圍、協(xié)議類型以及處理動作這些規(guī)則信息,通過哈希函數(shù)h =H(Ri) = mask+ V Iog(W) + prtcl+actionm ^P^將規(guī)則信息散列,式中氏表示包分類規(guī)則集sip _l,dp_wdip _h中的第i條規(guī)則,sip_h、sip_l和dip_h分別為源地址高16位、低16位和目的地址高16位的前綴長度,dp_w分別為源端口和目的端口的范圍,prtcl為協(xié)議類型值,action為處理動作項的值;再以散列值作為查找關(guān)鍵字構(gòu)建二叉查找樹,然后為二叉查找樹的每個結(jié)點保存一個沖突列表,并在沖突列表中順序比較每條規(guī)則,最后合并沖突列表中的可合并規(guī)則;其特征在于先通過使用哈希函數(shù)將提取的規(guī)則信息散列并以散列值作為查找關(guān)鍵字構(gòu)建二叉查找樹實現(xiàn)粗略分類;然后為二叉查找樹的每個結(jié)點保存一個沖突列表,在沖突列表中順序比較每條規(guī)則完成精確分類;最后遍歷二叉查找樹所有結(jié)點的沖突列表, 合并其中可合并的規(guī)則;重復(fù)“先通過使用哈希函數(shù)將提取的規(guī)則信息散列”到“合并其中可合并的規(guī)則”的過程直至規(guī)則集中沒有可以合并的規(guī)則,然后將沒有被合并的規(guī)則-即合并了其它規(guī)則和不能被其它規(guī)則合并的規(guī)則-組成一個新的規(guī)則集,重復(fù)執(zhí)行上述所有過程直至不可能再發(fā)生合并; 具體操作步驟如下第一步、規(guī)則集讀取和存儲步驟讀取規(guī)則集并將其存儲在嵌套定義的數(shù)據(jù)結(jié)構(gòu)中; 第二步、快速壓縮步驟,該步驟又可分為以下具體步驟 初始化步驟1)置規(guī)則集的合并標(biāo)志為假,并新建一棵空的二叉查找樹; 提取規(guī)則信息步驟2)對于包分類規(guī)則集中的某條規(guī)則氏,如果它沒有被合并且沒有合并其它規(guī)則,則對其提取規(guī)則信息并使用哈希函數(shù)散列成查找關(guān)鍵字;查找關(guān)鍵字步驟幻在二叉查找樹上查找與包分類規(guī)則集中的某條規(guī)則氏的查找關(guān)鍵字相同的結(jié)點;如果遍歷整棵二叉查找樹都沒有找到關(guān)鍵字相同的結(jié)點,則將查找關(guān)鍵字和該規(guī)則信息作為一個新的結(jié)點插入樹中并為其新建沖突列表,然后執(zhí)行合并規(guī)則步驟 5);如果找到相同結(jié)點,則執(zhí)行檢查規(guī)則信息步驟4);檢查規(guī)則信息步驟4)判斷查找關(guān)鍵字相同結(jié)點的規(guī)則信息是否相同;如果相同,則返回結(jié)點的沖突列表;如果不相同,則執(zhí)行合并規(guī)則步驟5);合并規(guī)則步驟5):遍歷沖突列表,如果沖突列表為空則將包分類規(guī)則集中的規(guī)則Ri直接插入,如果沖突列表不為空并且包分類規(guī)則集中的規(guī)則氏與列表中的所有規(guī)則都是可合并的,則將包分類規(guī)則集中的某條規(guī)則Ri添加至沖突列表中;如果沖突列表不為空而且包分類規(guī)則集中的某條規(guī)則Ri與列表中的所有規(guī)則并不都是可合并的,則不添加包分類規(guī)則集中的規(guī)則Ri,執(zhí)行重復(fù)處理步驟6);重復(fù)處理步驟6)重復(fù)執(zhí)行提取規(guī)則信息步驟2)到合并規(guī)則步驟5),直至所有規(guī)則被處理;獲取沖突列表步驟7)遍歷二叉查找樹,得到所有沖突列表; 設(shè)置合并標(biāo)志步驟8)將沖突列表中的規(guī)則合并,如果有規(guī)則發(fā)生合并,則設(shè)置合并標(biāo)志為1,并且對于其中被合并或合并其它規(guī)則分別設(shè)置相應(yīng)的標(biāo)志;檢查合并標(biāo)志步驟9)刪除二叉查找樹;并且,如果合并標(biāo)志為真,則返回初始化步驟1);如果合并標(biāo)志不為真,則執(zhí)行再次合并步驟10);再次合并步驟10)將沒有被合并的規(guī)則看作新的規(guī)則集重復(fù)執(zhí)行初始化步驟1)到檢查合并標(biāo)志步驟9),直至不再有合并發(fā)生;第三步、釋放壓縮階段過程中的臨時空間和被合并規(guī)則的存儲空間。
全文摘要
本發(fā)明公開了一種包分類規(guī)則集快速壓縮方法,特征是先使用哈希函數(shù)將提取的規(guī)則信息散列并以散列值作為查找關(guān)鍵字構(gòu)建二叉查找樹實現(xiàn)粗略分類;然后為二叉查找樹的每個結(jié)點保存一個沖突列表,順序比較每條規(guī)則完成精確分類;最后遍歷二叉查找樹所有結(jié)點的沖突列表,合并其中可合并的規(guī)則;重復(fù)該過程直至規(guī)則集中沒有可以合并的規(guī)則,然后將沒有被合并的規(guī)則組成一個新的規(guī)則集,重復(fù)執(zhí)行上述所有過程直至不可能再發(fā)生合并。與基于逐條規(guī)則逐個域比較的現(xiàn)有技術(shù)相比較,在保持相近壓縮率的前提下,本發(fā)明可明顯減少壓縮時間,有效地減少規(guī)則之間比較次數(shù),比較速度較快;實驗結(jié)果表明,本發(fā)明方法可將壓縮時間平均減少90%以上。
文檔編號G06F17/30GK102354308SQ201110182410
公開日2012年2月15日 申請日期2011年6月30日 優(yōu)先權(quán)日2011年6月30日
發(fā)明者任開新, 王坤, 顧乃杰 申請人:中國科學(xué)技術(shù)大學(xué)