專利名稱:一種多核板卡acl規(guī)則匹配方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種多核板卡ACL規(guī)則匹配方法,屬于網(wǎng)絡(luò)安全行業(yè)的數(shù)據(jù)分流和過濾領(lǐng)域。
背景技術(shù):
ACL (訪問控制列表)技術(shù),是一種數(shù)據(jù)過濾和控制方法,主要應(yīng)用于路由器,交換機,防火墻等產(chǎn)品中,用以進行數(shù)據(jù)的過濾和控制。在網(wǎng)絡(luò)安全領(lǐng)域,ACL技術(shù)用于通過配置規(guī)則,讓分流設(shè)備對互聯(lián)網(wǎng)的原始數(shù)據(jù)包進行過濾,規(guī)則可以是端口或IP以及協(xié)議,或者是幾者的組合。在一般的實現(xiàn)中分流板卡設(shè)備是采用遍歷的方式對規(guī)則進行匹配。這種方式的問題是當規(guī)則數(shù)量超過一定的值的時候?qū)蠓绊懶阅?,從而降低板卡對?shù)據(jù)包的分流效率。完全采用硬件實現(xiàn)的板卡很難通過算法進行性能的優(yōu)化。而多核卡即是解決這個問題而產(chǎn)生的,它具備了硬件板卡的性能優(yōu)勢,同時可以采用編程的方式通過優(yōu)化算法提高處理能力。多核板卡一般都延續(xù)硬件分流板卡的實現(xiàn)思路,使用對規(guī)則進行遍歷的方式進行匹配處理,在規(guī)則數(shù)量小的時候很快,一般支持10萬以內(nèi)的規(guī)則,但是當規(guī)則數(shù)量增大到一定程度的時候,效率顯著降低。這時候使用一種較好的匹配算法成為必然。本文描述的方法可以處理百萬級的規(guī)則數(shù)量,并且速度不會明顯降低
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)中存在的技術(shù)問題,本發(fā)明的目的在于提供一種多核板卡ACL規(guī)則匹配方法,本發(fā)明能夠優(yōu)化多核分流板卡對于ACL規(guī)則的處理能力,大幅提高其分流過濾的處理性能。本發(fā)明通過一種方法對多核板卡的規(guī)則匹配流程進行改進,提高其處理能力。具體實現(xiàn)如下:5元組(源IP,目的IP,源端口,目的端口,協(xié)議類別)總計有31種組合,但是實際使用時,用戶輸入的ACL規(guī)則只是這31種組合的一部分,每種組合視為一類。如圖1所示:將用戶的規(guī)則分為了 N類。每一個類別都使用一個hash表,總計N個哈希表,使用一個指針數(shù)組保存指向N個哈希表的指針。指針數(shù)組記為Array [N]每個哈希表下掛的鏈表是此類別的規(guī)則節(jié)點,圖2所示的是插入了幾個節(jié)點后的哈希表的狀態(tài)。此方法包含新規(guī)則插入、規(guī)則刪除、數(shù)據(jù)包規(guī)則匹配3部分。I)新規(guī)則插入假設(shè)用戶配置的規(guī)則為規(guī)則x(源IP:χ.X.X.X目的IP:y.y.y.y,記為RuleX),圖2中虛線框中的就是規(guī)則X,顯示的是插入后的狀態(tài)。
下面的步驟是規(guī)則插入的流程:第一步:確定新規(guī)則的類別,來決定向Array數(shù)組的哪個哈希表進行插入。這里RuleX包含源IP和目的IP,根據(jù)圖1的類別得知,RuleX對應(yīng)的類別索引為
O,即需要操作的哈希表的指針為Array
。第二步:構(gòu)造虛擬5元組。此操作將用戶配置的規(guī)則擴展,從而得到完整的5元組的信息。用戶規(guī)則中包含的部分直接拷貝到5元組的對應(yīng)部分,5元組中其他幾個部分,在用戶規(guī)則中沒有包含,則被設(shè)置為O。RuleX 的信息被擴展為 5 元組(sip = x.x.x.x sport = 0 dip = y.y.y.y dport=0 proto = 0,記為 FiveTupleX),其中,sip 是源 IP, sport 是源端 口,dip 是目的 IP,dport是目的端口,proto是協(xié)議類型。第三步:對5元組的信息進行哈希,決定向哈希表的哪個桶中的鏈表插入。本方法使用完整的5元組信息進行哈希,可以保持通用性,所有的類別的5元組都可以使用同一個哈希函數(shù)。具體的哈希函數(shù)可以自寫或其他的,具體實現(xiàn)不限。如果需要更好的散列,那么可以對不同的規(guī)則類別使用不同的哈希算法。但不管使用什么算法,需要保持插入、刪除、查找使用同一個算法。如圖2根據(jù)5元組FiveTupleX進行哈希得到對應(yīng)的桶索引3第四步:建立一個節(jié)點用來保存規(guī)則信息,將這個節(jié)點掛到對應(yīng)索引的桶下面的鏈表上。如圖2所示的虛框的那個節(jié)點,節(jié)點中保存5元組的信息。如果新插入規(guī)則的5元組信息與已有的某節(jié)點的5元組信息完全一致時,不允許進行插入,這樣保證規(guī)則的唯一性。2)規(guī)則刪除刪除規(guī)則時用戶同樣需要指定規(guī)則的幾個部分,假設(shè)用戶待刪除的規(guī)則為圖2的規(guī)則4(目的端口:2000協(xié)議:tcp,記為Rule4)第一步:確定待刪除規(guī)則的類別,來決定從Array數(shù)組的哪個哈希表進行查找。這里根據(jù)圖1得知Rule4對應(yīng)的類別索引為4,即需要操作的哈希表的指針為Array[4]第二部:構(gòu)造虛擬5元組。此操作根據(jù)用戶配置的規(guī)則擴展得到完整的5元組的信息。規(guī)則中包含的部分直接拷貝到5元組的對應(yīng)部分,其他幾個用戶規(guī)則中沒有包含的部分,被設(shè)置為O。Rule4 的信息被擴展為 5 兀組(sip = O sport = O dip = O dport = 2000 proto=tcp,記為 FiveTuple4)第三部:對5元組的信息進行哈希,判斷待刪除規(guī)則所在哈希表的桶索引。具體使用的哈希算法同插入一致。通過計算,5元組FiveTuple4被哈希為bucket索引2。如圖2所示第四步:在索引為2的桶下的鏈表中進行查找,找到5元組與FiveTuplM完全相同的那個節(jié)點,將其進行刪除。3)數(shù)據(jù)包規(guī)則匹配數(shù)據(jù)包指的是網(wǎng)上傳輸?shù)膖cp或udp類型的包,它們包含5元組的所有信息。假設(shè)待查找包的 5 兀組為(sip = a.b.c.d sport = x dip = e.f.g.h dport = y proto =tcp)具體處理方式為:按照規(guī)則類別,構(gòu)造對應(yīng)的虛擬5元組。如圖1所示規(guī)則總計有N類,故需要分別構(gòu)造N個對應(yīng)的虛擬5元組在N個哈希表中依次進行查找。如果在某一個哈希表中找到了匹配的規(guī)則,那么不需要繼續(xù)搜索了。當所有N個哈希表都找一遍也沒有找到,那么就表示沒有匹配到規(guī)則。以類別O為例進行說明,其他類別的流程與此相同。類別O包含的元是源IP和目的IP。第一步:按照類別包含的元構(gòu)造虛擬5元組。以類別O為例,類別O只需要源IP和目的IP的元,其他元則忽略,所以將待查數(shù)據(jù)包的5元組中其他的元(源端口、目的端口、協(xié)議)置零,構(gòu)造新的虛擬5元組,其值為(sip = a.b.c.d sport = O dip = e.f.g.hdport = 0 proto = 0)。第二步:對虛擬5元組進行哈希,得到所在的桶的索引bucket_N。第三步:搜索匹配規(guī)則。在索引為bucket_N的桶下的鏈表中進行查找。遍歷整個鏈表,當某個節(jié)點的5元組信息與虛擬5元組完全相同時,即為匹配了這個節(jié)點對應(yīng)的規(guī)則。第四步:如果前三步?jīng)]有找到匹配的節(jié)點,那么就進行下一個規(guī)則類別的搜索。重復(fù)iu 二步的流程。與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點和積極效果本發(fā)明通過對多核板卡對數(shù)據(jù)包的處理流程進行優(yōu)化,提高其對規(guī)則的匹配效率,大幅提高其支持的規(guī)則的數(shù)量。通過在公司生產(chǎn)的多核板卡上應(yīng)用,支持的規(guī)則數(shù)量達到百萬級,但性能方面沒有下降。
圖1為控制規(guī)則分類結(jié)果圖;圖2為分類結(jié)果哈希表狀態(tài)維護圖;圖3為本發(fā)明方法流程圖。
具體實施例方式圖3顯示的是本發(fā)明的數(shù)據(jù)輸入和輸出流程圖。本方法即是在ACL處理模塊中的改進。實現(xiàn)步驟分幾步:I模塊中增加一個指針數(shù)組,分別用于保存N個哈希表的指針2創(chuàng)建Hash表,具體HASH表的組織方式可以隨意,單向鏈表還是雙向本專利沒有具體要求。3建立一個節(jié)點,里面保存規(guī)則胡內(nèi)容,然后按照規(guī)則胡類別將該節(jié)點插入到哈希表的某個桶下的鏈表中。4數(shù)據(jù)包的匹配也是按照類別分別處理的。5具體分類和插入,刪除,查找方法在技術(shù)方案中有描述。6當匹配了某節(jié)點中的規(guī)則后,根據(jù)這條規(guī)則的動作指示,來決定數(shù)據(jù)包的丟棄或放行,以及輸出到多核板卡的哪個輸出端口。7與多核板卡輸出端口相連接的數(shù)據(jù)處理服務(wù)器即可對數(shù)據(jù)進行處理。8板卡通過配置無用數(shù)據(jù)的丟棄規(guī)則,降低了后端數(shù)據(jù)處理的壓力。
權(quán)利要求
1.一種多核板卡ACL規(guī)則匹配方法,其步驟為: 1)根據(jù)五元組(源IP,目的IP,源端口,目的端口,協(xié)議類別)將多核板卡中的ACL規(guī)則分為N類;每一類規(guī)則包括五元組中的一個或幾個元素;其中,N為自然數(shù); 2)提取待查找數(shù)據(jù)包所包含的五元組信息,利用所提取的信息構(gòu)造某一類別規(guī)則的虛擬五元組;其中,所述虛擬五元組中,該類別規(guī)則未包含元素的元素值設(shè)為O ; 3)利用構(gòu)造的虛擬五元組在該類別對應(yīng)的哈希表中查找包含的ACL規(guī)則與虛擬五元組匹配的節(jié)點;如果沒有找到匹配的節(jié)點,則利用所提取的信息構(gòu)造另一類別規(guī)則的虛擬五元組,然后在該類別對應(yīng)的哈希表中查找匹配的節(jié)點;如果每一類別規(guī)則均沒有該數(shù)據(jù)包的匹配規(guī)則節(jié)點,則結(jié)束匹配。
2.如權(quán)利要求1所述的方法,其特征在于將劃分后每一類別的ACL規(guī)則使用一hash表記錄,哈希表下掛的鏈表節(jié)點存儲此類別的ACL規(guī)則;然后使用一指針數(shù)組Array [N]保存指向N個哈希表的指針。
3.如權(quán)利要求2所述的方法,其特征在于所述hash表為單向鏈表或雙向鏈表。
4.如權(quán)利要求2或3所述的方法,其特征在于對所述虛擬五元組進行哈希,得到所述虛擬五元組對應(yīng)類別規(guī)則所在桶的索引號,然后遍歷該索引號對應(yīng)桶的鏈表,當某個節(jié)點的5元組信息與虛擬5元組相同時,即為匹配的規(guī)則節(jié)點。
5.如權(quán)利要求1或2或3所述的方法,其特征在于所述數(shù)據(jù)包為tcp數(shù)據(jù)包或udp數(shù)據(jù)包。
6.如權(quán)利要求1或2或3所述的方法,其特征在于所述多核板卡中設(shè)置一丟棄規(guī)則,用于將沒有匹配規(guī)則的數(shù)據(jù)包丟棄。
7.如權(quán)利要求2或3所述的方法,其特征在于所述多核板卡對新輸入的ACL規(guī)則按照劃分的類別進行存儲,其方法為: 1)根據(jù)新輸入規(guī)則所包含的五元組信息,確定該規(guī)則插入的hash表; 2)添加新輸入規(guī)則中未包含的五元組元素,并將其值設(shè)為O,將該新輸入的規(guī)則構(gòu)造為虛擬五元組; 3)對構(gòu)造的虛擬五元組信息進行哈希,將其插入到對應(yīng)桶的鏈表中。
8.如權(quán)利要求7所述的方法,其特征在在于,如果新輸入的ACL規(guī)則與所述多核板卡中已存儲的節(jié)點包含相同的規(guī)則,則拒絕存儲該新輸入的ACL規(guī)則。
9.如權(quán)利要求2或3所述的方法,其特征在于所述多核板卡進行規(guī)則刪除的方法為: 1)根據(jù)輸入的部分五元組信息,確定待刪除規(guī)則的類別,查找該類別的hash表; 2)補充未輸入的五元組元素,并將其值設(shè)為O,構(gòu)造虛擬五元組; 3)對虛擬五元組信息進行哈希,確定待刪除規(guī)則所在hash表的所在桶; 4)在所確定的桶中查找匹配的節(jié)點,將其刪除。
全文摘要
本發(fā)明公開了一種多核板卡ACL規(guī)則匹配方法,屬于網(wǎng)絡(luò)安全行業(yè)的數(shù)據(jù)分流和過濾領(lǐng)域。本方法為1)根據(jù)五元組將多核板卡中的ACL規(guī)則分為N類;每一類規(guī)則包括五元組中的一個或幾個元素;2)提取待查找數(shù)據(jù)包所包含的五元組信息,利用所提取的信息構(gòu)造某一類別規(guī)則的虛擬五元組;3)利用構(gòu)造的虛擬五元組在該類別對應(yīng)的ACL規(guī)則節(jié)點中查找匹配的規(guī)則節(jié)點;如果沒有找到匹配的規(guī)則節(jié)點,則利用所提取的信息構(gòu)造另一類別規(guī)則的虛擬五元組,然后在該類別對應(yīng)的ACL規(guī)則節(jié)點中查找匹配的規(guī)則節(jié)點;如果每一類別規(guī)則均沒有該數(shù)據(jù)包的匹配規(guī)則節(jié)點,則結(jié)束匹配。本方法可大幅提高多核板卡支持的規(guī)則的數(shù)量。
文檔編號H04L29/06GK103188231SQ20111045383
公開日2013年7月3日 申請日期2011年12月30日 優(yōu)先權(quán)日2011年12月30日
發(fā)明者樊景亮 申請人:北京銳安科技有限公司