專利名稱:基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配算法的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種計(jì)算機(jī)的匹配算法,尤其涉及一種基于計(jì)算機(jī)硬 件技術(shù)實(shí)現(xiàn)內(nèi)容險(xiǎn)測(cè)功能的協(xié)處理器的高速模式匹配算法。屬于計(jì)算
機(jī)網(wǎng)絡(luò)安全(network security)技術(shù)領(lǐng)域。
背景技術(shù):
網(wǎng)絡(luò)面臨的安全威脅大體可分為兩種 一是對(duì)網(wǎng)絡(luò)數(shù)據(jù)的威脅; 二是對(duì)網(wǎng)絡(luò)設(shè)備的威脅。這些威脅可能來源于各種各樣的因素。其中, 來自外部和內(nèi)部人員的惡意攻擊和入侵是當(dāng)前Internet網(wǎng)絡(luò)所面臨 的最大威脅,也是網(wǎng)絡(luò)安全策略最需要解決的問題。為滿足網(wǎng)絡(luò)信息 安全要求,防止非法用戶利用網(wǎng)絡(luò)系統(tǒng)的安全缺陷進(jìn)行數(shù)據(jù)的竊取、 偽造和破壞,必須建立網(wǎng)絡(luò)信息系統(tǒng)的安全服務(wù)體系。
現(xiàn)有的計(jì)算機(jī)網(wǎng)絡(luò)大多數(shù)在建設(shè)之初就忽略了安全問題,即使
考慮到安全問題,大部分情況也只是把安全建立在物理機(jī)制上,隨著 網(wǎng)絡(luò)互連程度的擴(kuò)大,這種安全機(jī)制對(duì)于網(wǎng)絡(luò)環(huán)境來說形同虛設(shè)。由 于網(wǎng)絡(luò)安全問題的敏感性,我們不能像引進(jìn)其他高科技產(chǎn)品一樣,大 量引進(jìn)國外網(wǎng)絡(luò)的安全產(chǎn)品。因此,研究和開發(fā)自己的網(wǎng)絡(luò)安全產(chǎn)品 就顯得格外重要。
如何有效地防范網(wǎng)絡(luò)入侵,將其可能造成的安全風(fēng)險(xiǎn)降到最低 限度,成為近年來網(wǎng)絡(luò)安全理論研究和技術(shù)開發(fā)的熱點(diǎn)問題之一。在 對(duì)信息安全迫切需要的高呼聲中,各種檢測(cè)系統(tǒng)應(yīng)運(yùn)而生,并在信息 安全領(lǐng)域中占據(jù)重要的地位。與傳統(tǒng)的安全技術(shù)和產(chǎn)品相比,檢測(cè)系 統(tǒng)更具有實(shí)時(shí)監(jiān)控和響應(yīng)的特征,已經(jīng)成為信息安全整體架構(gòu)的必不 可少的一道防線。數(shù)據(jù)分析模塊是檢測(cè)系統(tǒng)中非常關(guān)鍵的模塊,也是 系統(tǒng)性能的瓶頸所在?,F(xiàn)在一般采用模式匹配來對(duì)數(shù)據(jù)進(jìn)行分析,其 使用的匹配算法決定著整個(gè)模塊的性能,也隨之影響著檢測(cè)系統(tǒng)的性 能。
傳統(tǒng)的內(nèi)容檢測(cè)設(shè)備都是通過軟件程序來實(shí)現(xiàn)模式匹配這種計(jì) 算密集型的處理操作。但是,隨著模式匹配規(guī)則的不斷增加,例如添 加更多的內(nèi)容過濾規(guī)則、病毒識(shí)別特征等,基于軟件技術(shù)的模式匹配速度將相應(yīng)降低,而模式數(shù)據(jù)庫也會(huì)變得日益龐大(空間復(fù)雜度為
0(2n), n是模式字符串的長度)。以目前的Snort這類輕量級(jí)開源 網(wǎng)絡(luò)入侵檢測(cè)軟件為例,它一般使用簡(jiǎn)單規(guī)則來識(shí)別可能的安全威 脅,這些規(guī)則包括對(duì)數(shù)據(jù)包包頭中固定位置內(nèi)容的查找操作以及對(duì)應(yīng) 用層負(fù)載中非固定位置變長內(nèi)容的檢測(cè)操作。當(dāng)采用Intel 3.02GHz Xeon處理器時(shí),其最高數(shù)據(jù)包吞吐量?jī)H為100Mbps左右。而一個(gè)有 效的檢測(cè)系統(tǒng)不僅要求能夠正確地識(shí)別系統(tǒng)中的入侵行為,還要考慮 到如何適應(yīng)網(wǎng)絡(luò)環(huán)境發(fā)展的需要,因此,隨著各種攻擊手段的不斷提 高,網(wǎng)絡(luò)流量持續(xù)增大,迫切需要新型的具有高速處理能力的內(nèi), 測(cè)系統(tǒng)。
發(fā)明內(nèi)容
本發(fā)明的目的是為了克服現(xiàn)有技術(shù)中存在的不足,而提供的一種 基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配算法的高速模式匹配的算法。
本發(fā)明的基于FPGA的高速模式匹配的算法是通過以下技術(shù)方案 實(shí)現(xiàn)的
本發(fā)明的方法不同于軟件技術(shù)的串行順序處理機(jī)制,可以非常方 便的實(shí)現(xiàn)并行處理架構(gòu),即設(shè)置多個(gè)同時(shí)工作的硬件檢測(cè)器,根據(jù)預(yù) 先設(shè)定的規(guī)則對(duì)每個(gè)輸入數(shù)據(jù)包的負(fù)載部分進(jìn)行精確的內(nèi),測(cè),即 判斷數(shù)據(jù)包中全部/局部?jī)?nèi)容是否與某些規(guī)則發(fā)生匹配,從而大大提 高模式匹配的執(zhí)行速度。
為實(shí)現(xiàn)本發(fā)明目的,現(xiàn)以多模式匹配的AC算法(即Aho-Corasick 算法)為基礎(chǔ)建立高速模式匹配算法。
多才莫式匹配定義字母表E、模式集合P- {/7i, W,..";;必、 數(shù)據(jù)流T = Wa.."(P和T均由E構(gòu)成),多;f莫式匹配是指尋找 P所含模式在輸入數(shù)據(jù)流T中是否存在(有時(shí)也包含存在位置)的 處理過程。
AC算法主要包含四個(gè)函數(shù),它們是跳轉(zhuǎn)函數(shù)goto,失效函數(shù) failure,輸出函數(shù)output和nfa2dfa函數(shù)。這些算法的M是以普 通字符串為處理對(duì)象,首先從普通字符串中構(gòu)造出一個(gè)完整的goto 函數(shù)來,再從goto函數(shù)中構(gòu)造出failure函數(shù),輸出函數(shù)則從goto和failure函數(shù)中共同構(gòu)造生成,而最后的DFA (Deterministic Finite Automata,確定性有限狀態(tài)機(jī))狀態(tài)轉(zhuǎn)化表由函數(shù)nfa2dfa 函數(shù)利用goto和failure函數(shù)生成。AC算法在設(shè)計(jì)上使用了窮舉的 方式構(gòu)造failure函數(shù),這在有限的普通字符串上是可行的。如果要 進(jìn)行精確的模式搜索,在目標(biāo)串中查找可以匹配正則表達(dá)式的所有可 能模式,若直接利用AC算法,則要考慮到將正則表達(dá)所描述的模式 展開為一個(gè)一個(gè)的普通字符串模式。這會(huì)造成模式在數(shù)目上的急劇膨 脹,無論在內(nèi)存消耗還是運(yùn)算上都會(huì)造成事實(shí)上的不可行。所以需要 對(duì)這種急劇膨脹的現(xiàn)象進(jìn)行處理。
本發(fā)明的所采用的算法并不是在一開始就構(gòu)造出 一個(gè)完整的 goto函數(shù),而是首先構(gòu)造一個(gè)初始的goto函數(shù),再根據(jù)這個(gè)初始的 goto函數(shù)構(gòu)造failure函數(shù)的過程中根據(jù)需要?jiǎng)討B(tài)地?cái)U(kuò)充goto函 數(shù),從而可以構(gòu)造出完整地goto函數(shù)和failure函數(shù)。而nfa2dfa 僅僅依賴于goto函數(shù)和failure函數(shù),所以又可以構(gòu)造出一個(gè)完整 的DFA。詳述如下
AC算法根據(jù)所有的輸入模式構(gòu)造了一個(gè)狀態(tài)表。goto函數(shù)就是 根據(jù)該狀態(tài)表生成。而實(shí)際上根據(jù)輸入模式得到的狀態(tài)表并不是一個(gè) 嚴(yán)格單向的狀態(tài)表,從一個(gè)狀態(tài)對(duì)相同的輸入跳變到多個(gè)狀態(tài)導(dǎo)致了 NFA (Nondeterministic Finite Automata,非確定性有限狀態(tài)機(jī))。 AC算法在設(shè)計(jì)上從階數(shù)考慮狀態(tài)變化,狀態(tài)階數(shù)指從狀態(tài)O到該狀 態(tài)的最短路徑。失效函數(shù)(failure)實(shí)際上是一個(gè)狀態(tài)回指的一個(gè)過 程,表明了從狀態(tài)O到該狀態(tài)的路徑上的字符串包含了從狀態(tài)O到其 他狀態(tài)的字符串。在NFA中,這個(gè)過程稱為回溯過程。失效函數(shù) failure的設(shè)計(jì)就是找出所有的回溯過程。AC算法在設(shè)計(jì)上釆用窮舉 的方式查找回溯過程。首先從階數(shù)1開始找起,直到遍歷所有的狀態(tài)。 如果從輸入模式構(gòu)造的狀態(tài)表是一個(gè)嚴(yán)格單向的狀態(tài)表時(shí),就沒 有失效狀態(tài)。也就是說沒有必要構(gòu)造failure,進(jìn)一步說是嚴(yán)格的 DFA。對(duì)一個(gè)嚴(yán)格的DFA來說,goto函數(shù)就是最終的結(jié)果。如依據(jù)下 面的狀態(tài)表1構(gòu)造的goto函數(shù)即是最終結(jié)果。<formula>formula see original document page 8</formula>表l : DFA的狀態(tài)表
因?yàn)闋顟B(tài)表l是嚴(yán)格單向的,所以可以用如下方式來簡(jiǎn)化。
<formula>formula see original document page 8</formula>
表2 :筒化的狀態(tài)表
依據(jù)上表2可以減少狀態(tài)表1的數(shù)目,在狀態(tài)表2中,依次在 狀態(tài)d的轉(zhuǎn)換中,在相對(duì)應(yīng)輸入字符的地方填入下一個(gè)狀態(tài)值即可。 表2所示的狀態(tài)是理想情況,現(xiàn)在考慮下面的情況
<formula>formula see original document page 8</formula>
表3: NFA的狀態(tài)表
<formula>formula see original document page 8</formula>表3是一個(gè)NFA,因?yàn)樵赿狀態(tài)下,輸入l會(huì)產(chǎn)生兩種結(jié)果,所 以不能單從goto函數(shù)得到最后的DFA結(jié)果。但是可以考慮拆分成如 下結(jié)果簡(jiǎn)化
上表4中簡(jiǎn)化的策略是以模式1YZ, Dlabz, D [2-m] abz為^按 照AC算法生成DFA,其中[2-m]在編譯中,可以使用其中任意一個(gè)字 符代替,只是在生成的DFA中,對(duì)狀態(tài)d的轉(zhuǎn)換中添加新的狀態(tài)變化 項(xiàng)。相對(duì)于表1來說表4大幅度減少了狀態(tài)數(shù)。
上述的優(yōu)化方式在現(xiàn)實(shí)是可行的,因?yàn)槭Ш瘮?shù)failure的構(gòu) 造是從goto函數(shù)中所有的低階數(shù)狀態(tài)開始逐步向高階數(shù)狀態(tài),所以 在計(jì)算失效函數(shù)的同時(shí)也逐步擴(kuò)展goto函數(shù)。利用改進(jìn)的AC算法最 終生成DFA,然后依據(jù)表4合并相對(duì)應(yīng)的狀態(tài)以減少狀態(tài)數(shù)目。合并 的原理如下所示
-〉a2-,一,a2-廣,sJt,"
W-e
在sl狀態(tài)因不同的輸入,導(dǎo)致了新狀態(tài)al, bl, cl,此后的輸 入都相同,最后的狀態(tài)a4,b4,c4下匹配模式也相同,失效狀態(tài)也相 同,就將a4, b4, c4合并成一個(gè)狀態(tài),依次往前推導(dǎo)。在實(shí)際操作 中,首先找出上一模式中所有可能的失效狀態(tài)和相應(yīng)的字符串,單獨(dú) 提取出來,剩下的可以用一個(gè)模式來代替,生成DFA后,再將相應(yīng)的 狀態(tài)轉(zhuǎn)化字寫上即可。
當(dāng)最后生成DFA后,接著對(duì)狀態(tài)表4進(jìn)行壓縮處理。采用門限 值的方式壓縮狀態(tài)表4,原理如下由于大部分的狀態(tài),僅僅對(duì)特定 的字符有狀態(tài)變化,剩下的都會(huì)跳到0狀態(tài),所以僅僅考慮非0狀態(tài) 的情況。將可能發(fā)生非0狀態(tài)的最小和最大字符之間的狀態(tài)變化信息
表4: NFA中對(duì)局部的DFA簡(jiǎn)化保存下來。如在某種狀態(tài)下,輸入字符a,如果a在最小和最大字符 之間則計(jì)算下一個(gè)狀態(tài),否則跳到0狀態(tài),由此可減少狀態(tài)數(shù)目。
本發(fā)明所提供的基于FPGA (Field Programmable Gate Array, 現(xiàn)場(chǎng)可編程門陣列)的高速模式匹配方法不僅支持基于正則表達(dá)式的 規(guī)則描述,更重要的是基于有限狀態(tài)機(jī)(DFA)原理的模式匹配方法, 可以實(shí)現(xiàn)千兆級(jí)線速處理能力。DFA模式匹配是一種將時(shí)間復(fù)雜度轉(zhuǎn) 換為空間復(fù)雜度的算法。它可并行匹配多個(gè)規(guī)則,而且對(duì)規(guī)則長度無 限制。被匹配的特征值可以是非定位的,即特征值可以在數(shù)據(jù)中的任 何一個(gè)位置開始;也可以對(duì)特征值出現(xiàn)的位置進(jìn)行約束限制,即實(shí)現(xiàn) 定位模式匹配。DFA算法巧妙地將多模式匹配的處理過程轉(zhuǎn)變成了狀 態(tài)轉(zhuǎn)換的處理過程,從而實(shí)現(xiàn)了0(n)級(jí)別的匹配速度。
本發(fā)明的基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配算法,包括如下 步驟
步驟1:依據(jù)動(dòng)態(tài)擴(kuò)充AC算法中g(shù)oto函數(shù)的方法及對(duì)規(guī)則庫的 壓縮方法將輸入的模式匹配規(guī)則集合文件編譯為符合FPGA讀寫規(guī)律 的二進(jìn)制規(guī)則庫文件;
步驟2:將編^H(f的二進(jìn)制規(guī)則庫文件加栽到FPGA的QDR (Quad Data Rate,四倍速數(shù)據(jù)速率)SRAM ( Static Random Access Memory, 靜態(tài)隨機(jī)存儲(chǔ)器),該規(guī)則庫包括狀態(tài)跳轉(zhuǎn)表和狀態(tài)信息表兩部分 狀態(tài)信息表保存當(dāng)前狀態(tài)的相關(guān)信息,狀態(tài)跳轉(zhuǎn)表保存跳轉(zhuǎn)的下一個(gè) 狀態(tài)號(hào)。
步驟3:系統(tǒng)初始化后開始接收數(shù)據(jù)包,當(dāng)前系統(tǒng)狀態(tài)號(hào)初始化 為0;
步驟4:判斷接收到的新的數(shù)據(jù)包是否需要匹配; 步驟5:取出0狀態(tài)的狀態(tài)信息,包括最大及最小有效字符、是 否命中的標(biāo)志位、狀態(tài)跳轉(zhuǎn)表的位置基地址,放入當(dāng)前狀態(tài)信息中; 步驟6:取一個(gè)需要匹配的字符。
步驟7:根據(jù)當(dāng)前狀態(tài)信息的內(nèi)容判斷取的字符是否在最小字符 和最大字符之間;步驟8:根據(jù)當(dāng)前狀態(tài)信息中的狀態(tài)跳轉(zhuǎn)表的位置基址和字符計(jì) 算該字符對(duì)應(yīng)的跳轉(zhuǎn)表的地址;
步驟9:根據(jù)步驟8得到的狀態(tài)跳轉(zhuǎn)表的地址,取出下一狀態(tài)號(hào) 作為新的當(dāng)前狀態(tài)號(hào);
步驟10:根據(jù)取到的狀態(tài)號(hào)來計(jì)算存放當(dāng)前狀態(tài)信息項(xiàng)的狀態(tài)信 息地址;
步驟11:根據(jù)步驟10得到的狀態(tài)信息表的地址,取出相應(yīng)的狀 態(tài)信息;^v當(dāng)前狀態(tài)信息中;
步驟12:根據(jù)得到的狀態(tài)信息判斷輸入的字符是否匹配;
步驟13:記錄匹配的結(jié)果;
步驟14:判斷收到的數(shù)據(jù)包是否全部完成匹配;
步驟15:取下一個(gè)字符;
步驟16:重復(fù)執(zhí)行步驟7到步驟14;
步驟17:當(dāng)整個(gè)數(shù)據(jù)包匹配結(jié)束后,把匹配結(jié)果與原始的數(shù)據(jù)包 重新組合成新的數(shù)據(jù)包;
步驟18:把數(shù)據(jù)包轉(zhuǎn)發(fā)出去,然后初始化當(dāng)前的狀態(tài)號(hào)為0,開 始新的數(shù)據(jù)包匹配。
而且,所述步驟4中接收到的新的數(shù)據(jù)包需要匹配則執(zhí)行所述步 驟5。
而且,所述步驟4中接收到的新的數(shù)據(jù)包不需要匹配,則執(zhí)行所 述步驟18。
而且,所述步驟7中根據(jù)當(dāng)前狀態(tài)信息的內(nèi)^1^的字符不在最小 字符和最大字符之間,則跳轉(zhuǎn)到所述步驟6取下一個(gè)字符。
而且,所述步驟7中根據(jù)當(dāng)前狀態(tài)信息的內(nèi)^的字符在最小字 符和最大字符之間,則執(zhí)行所述步驟8。
而且,所述步驟8的根據(jù)當(dāng)前狀態(tài)信息中的狀態(tài)跳轉(zhuǎn)表的位置基
址和字符計(jì)算該字符對(duì)應(yīng)的跳轉(zhuǎn)表地址的方法為
Position (跳轉(zhuǎn)表地址)=狀態(tài)跳轉(zhuǎn)表的位置基址+ (最大字符-最小字符)x —個(gè)狀態(tài)跳轉(zhuǎn)條目占用的字節(jié)數(shù)。而且,所述步驟10的根據(jù)取到的狀態(tài)號(hào)來計(jì)算存放當(dāng)前狀態(tài)信息 項(xiàng)的狀態(tài)信息地址的方法為
Position (狀態(tài)信息地址)=狀態(tài)信息表基地址+當(dāng)前狀態(tài)號(hào)
x每個(gè)狀態(tài)信息條目占用的字節(jié)數(shù) 而且,所述步驟12根據(jù)得到的狀態(tài)信息判斷輸入的字符如果匹配 則執(zhí)行步驟13,如果不匹配則執(zhí)行步驟14;
而且,所述步驟14中收到的數(shù)據(jù)包如果沒有全部完成匹配,則執(zhí) 行步驟15,如果已全部完成匹配,則執(zhí)行步驟17。 本發(fā)明相對(duì)現(xiàn)有技術(shù)具有的有益效果
1、 本發(fā)明能夠方便的實(shí)現(xiàn)并行處理架構(gòu),即設(shè)置多個(gè)同時(shí)工作 的硬件檢測(cè)器,根據(jù)預(yù)先設(shè)定的規(guī)則對(duì)每個(gè)輸入數(shù)據(jù)包的負(fù)載部分進(jìn) 行精確的內(nèi),測(cè),即判斷數(shù)據(jù)包中全部/局部?jī)?nèi)容是否與某些規(guī)則 發(fā)生匹配,從而大大提高模式匹配的執(zhí)行速度。
2、 本發(fā)明可配合通用處理器或網(wǎng)絡(luò)處理器實(shí)現(xiàn)如下功能數(shù)據(jù) 包內(nèi)容過濾、垃圾郵件過濾、網(wǎng)絡(luò)病毒檢測(cè)、網(wǎng)絡(luò)入侵檢測(cè)、控制協(xié) 議識(shí)別、基于內(nèi)容交換以及高級(jí)網(wǎng)絡(luò)流量控制等。
圖1為本發(fā)明的基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配算法 流程實(shí)施例
本發(fā)明描述的方法的核心思想是提供一種高速模式匹配的方法, 具體做法是通過動(dòng)態(tài)擴(kuò)充AC算法中的goto函數(shù)的方法生成DFA狀態(tài) 表,并對(duì)生成的狀態(tài)表進(jìn)行壓縮后通過硬件的方式實(shí)現(xiàn)內(nèi)容險(xiǎn)測(cè)和應(yīng) 用識(shí)別等操作的線速處理,以滿足用戶對(duì)網(wǎng)絡(luò)應(yīng)用層處理技術(shù)和網(wǎng)絡(luò) 信息安全技術(shù)的需要。其核心技術(shù)涉及基于正則表達(dá)式的規(guī)則描述、 基于狀態(tài)機(jī)技術(shù)的模式匹配引擎、規(guī)則庫壓縮優(yōu)化等幾個(gè)方面。
采用正則表達(dá)式作為規(guī)則描述方式有利于實(shí)現(xiàn)應(yīng)用的通用化,因?yàn)槟壳敖^大多數(shù)系統(tǒng)的規(guī)則庫(例如入侵檢測(cè)系統(tǒng))都以正則表達(dá)式
的形式描述。DFA (Deterministic Finite Automata,確定性有限 狀態(tài)機(jī))模式匹配是一種將時(shí)間復(fù)雜度轉(zhuǎn)換為空間復(fù)雜度的算法。它 可并行匹配多個(gè)規(guī)則,而且對(duì)規(guī)則長度無限制。被匹配的特征值可以 是非定位的,即特征值可以在數(shù)據(jù)中的任何一個(gè)位置開始。也可以對(duì) 特征值出現(xiàn)的位置進(jìn)行約束限制,即實(shí)現(xiàn)定位模式匹配。DFA算法巧 妙地將多模式匹配的處理過程轉(zhuǎn)變成了狀態(tài)轉(zhuǎn)換的處理過程,從而實(shí) 現(xiàn)了 O(n)級(jí)別的匹配速度。規(guī)則庫壓縮算法需要均衡考慮內(nèi)存和運(yùn) 算速度。顯然,越高級(jí)的壓縮算法消耗的內(nèi)存會(huì)越小,但是在解壓縮 時(shí)造成的處理會(huì)非常復(fù)雜,這將會(huì)嚴(yán)重影響到處理速度。所以規(guī)則庫 的壓縮算法,即要保證查找速度,又要實(shí)現(xiàn)高效的壓縮。
步驟1:依據(jù)動(dòng)態(tài)擴(kuò)充AC算法中g(shù)oto函數(shù)的方法及對(duì)規(guī)則庫的 壓縮方法將輸入的模式匹配規(guī)則集合文件編譯為符合FPGA讀寫規(guī)律 的二進(jìn)制規(guī)則庫文件;
步驟2:將編斧圩的二進(jìn)制規(guī)則庫文件加栽到FPGA的QDR SRAM, 該規(guī)則庫包括狀態(tài)跳轉(zhuǎn)表和狀態(tài)信息表兩部分;
步驟3:系統(tǒng)初始化后開始接收數(shù)據(jù)包,當(dāng)前系統(tǒng)狀態(tài)號(hào)初始化 為0;
步驟4:判斷接收到的新的數(shù)據(jù)包是否需要匹配; 步驟5:取出0狀態(tài)的狀態(tài)信息,包括最大及最小有效字符、是 否命中的標(biāo)志位、狀態(tài)跳轉(zhuǎn)表的位置基地址,放入當(dāng)前狀態(tài)信息中; 步驟6:取一個(gè)需要匹配的字符;
步驟7:根據(jù)當(dāng)前狀態(tài)信息的內(nèi)容判斷取的字符是否在最小字符 和最大字符之間;
步驟8:根據(jù)當(dāng)前狀態(tài)信息中的狀態(tài)跳轉(zhuǎn)表的位置基址和字符計(jì) 算該字符對(duì)應(yīng)的跳轉(zhuǎn)表的地址;
步驟9:根據(jù)步驟8得到的狀態(tài)跳轉(zhuǎn)表的地址,取出下一狀態(tài)號(hào) 作為新的當(dāng)前狀態(tài)號(hào);
步驟10:根據(jù)取到的狀態(tài)號(hào)來計(jì)算存放當(dāng)前狀態(tài)信息項(xiàng)的狀態(tài)信息地址;
步驟11:根據(jù)步驟10得到的狀態(tài)信息表的地址,取出相應(yīng)的狀 態(tài)信息放入當(dāng)前狀態(tài)信息中;
步驟12:根據(jù)得到的狀態(tài)信息判斷輸入的字符是否匹配;
步驟13:記錄匹配的結(jié)果;
步驟14:判斷收到的數(shù)據(jù)包是否全部完成匹配;
步驟15:取下一個(gè)字符;
步驟16:重復(fù)執(zhí)行步驟7到步驟14;
步驟17:當(dāng)整個(gè)數(shù)據(jù)包匹配結(jié)束后,把匹配結(jié)果與原始的數(shù)據(jù)包 重新組合成新的數(shù)據(jù)包;
步驟18:把數(shù)據(jù)包轉(zhuǎn)發(fā)出去,然后初始化當(dāng)前的狀態(tài)號(hào)為0,開 始新的數(shù)據(jù)包匹配。
而且,所述步驟4中接收到的新的數(shù)據(jù)包需要匹配則執(zhí)行所述步 驟5。
而且,所述步驟4中接收到的新的數(shù)據(jù)包不需要匹配,則執(zhí)行所 述步驟18。
而且,所述步驟7中才艮據(jù)當(dāng)前狀態(tài)信息的內(nèi)^的字符不在最小 字符和最大字符之間,則跳轉(zhuǎn)到所述步驟6取下一個(gè)字符。
而且,所述步驟7中才艮據(jù)當(dāng)前狀態(tài)信息的內(nèi)^的字符在最小字 符和最大字符之間,則執(zhí)行所述步驟8。
而且,所述步驟8的根據(jù)當(dāng)前狀態(tài)信息中的狀態(tài)跳轉(zhuǎn)表的位置基 址和字符計(jì)算該字符對(duì)應(yīng)的跳轉(zhuǎn)表地址的方法為
Position (跳轉(zhuǎn)表地址)=狀態(tài)跳轉(zhuǎn)表的位置基址+ (最大字 符-最小字符)x —個(gè)狀態(tài)跳轉(zhuǎn)條目占用的字節(jié)數(shù)。
而且,所述步驟10的根據(jù)取到的狀態(tài)號(hào)來計(jì)算存放當(dāng)前狀態(tài)信息 項(xiàng)的狀態(tài)信息地址的方法為
Position (狀態(tài)信息地址)=狀態(tài)信息表基地址+當(dāng)前狀態(tài)號(hào) x每個(gè)狀態(tài)信息條目占用的字節(jié)數(shù)
而且,所述步驟12根據(jù)得到的狀態(tài)信息判斷輸入的字符如果匹配則執(zhí)行步驟13,如果不匹配則執(zhí)行步驟14;
而且,所述步驟l4中收到的數(shù)據(jù)包如果沒有全部完成匹配,則執(zhí) 行步驟15,如果已全部完成匹配,則執(zhí)行步驟17。
盡管已通過參照實(shí)施例子具體的示出并描述了本發(fā)明,但本領(lǐng)域 的技術(shù)人員將理解,可在其中做出各種形式和細(xì)節(jié)上的改變,而沒有 背離本發(fā)明的精神和范圍。例如,可使用計(jì)算機(jī)編程軟件、固件或硬 件的任意組合來實(shí)現(xiàn)本發(fā)明。作為實(shí)踐本發(fā)明或構(gòu)造根據(jù)本發(fā)明的設(shè) 備的預(yù)備步驟,典型地,根據(jù)本發(fā)明的計(jì)算機(jī)編程代碼(軟件或固件) 將被存儲(chǔ)在一個(gè)或多個(gè)及其可讀存儲(chǔ)介質(zhì)中,如固定(硬)驅(qū)動(dòng)器、 磁盤、光盤、磁帶、諸如ROM和PROM的半導(dǎo)體存儲(chǔ)器等,由此產(chǎn)生 根據(jù)本發(fā)明的產(chǎn)品。通過直接從諸如硬盤、RAM等的存儲(chǔ)裝置執(zhí)行代 碼、通過將代碼從存儲(chǔ)裝置復(fù)制到另一個(gè)存儲(chǔ)裝置、或通過傳送用于 遠(yuǎn)程執(zhí)行的代碼,而使用包含計(jì)算機(jī)編程代碼的產(chǎn)品。可通過組合具 有用來運(yùn)行代碼的適當(dāng)?shù)臉?biāo)準(zhǔn)計(jì)算機(jī)硬件的、包含代碼的一個(gè)或多個(gè) 機(jī)器可讀存儲(chǔ)裝置,而產(chǎn)生用戶實(shí)踐本發(fā)明的方法。用戶實(shí)踐本發(fā)明 的設(shè)備可為一個(gè)或多個(gè)計(jì)算機(jī)和存儲(chǔ)系統(tǒng),其包含或具有對(duì)根據(jù)本發(fā) 明而編碼的計(jì)算機(jī)程序(多個(gè))的網(wǎng)絡(luò)訪問。
權(quán)利要求
1、一種基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配算法,其特征在于,包括如下步驟步驟1依據(jù)動(dòng)態(tài)擴(kuò)充AC算法中跳轉(zhuǎn)函數(shù)goto的方法及對(duì)規(guī)則庫的壓縮方法將輸入的模式匹配規(guī)則集合文件編譯為符合FPGA讀寫規(guī)律的二進(jìn)制規(guī)則庫文件;步驟2將編譯好的二進(jìn)制規(guī)則庫文件加載到FPGA的QDR SRAM,該規(guī)則庫包括狀態(tài)跳轉(zhuǎn)表和狀態(tài)信息表兩部分;步驟3系統(tǒng)初始化后開始接收數(shù)據(jù)包,當(dāng)前系統(tǒng)狀態(tài)號(hào)初始化為0;步驟4判斷接收到的新的數(shù)據(jù)包是否需要匹配;步驟5取出0狀態(tài)的狀態(tài)信息,包括最大及最小有效字符、是否命中的標(biāo)志位、狀態(tài)跳轉(zhuǎn)表的位置基地址,放入當(dāng)前狀態(tài)信息中;步驟6取一個(gè)需要匹配的字符;步驟7根據(jù)當(dāng)前狀態(tài)信息的內(nèi)容判斷取的字符是否在最小字符和最大字符之間;步驟8根據(jù)當(dāng)前狀態(tài)信息中的狀態(tài)跳轉(zhuǎn)表的位置基址和字符計(jì)算該字符對(duì)應(yīng)的跳轉(zhuǎn)表的地址;步驟9根據(jù)步驟8得到的狀態(tài)跳轉(zhuǎn)表的地址,取出下一狀態(tài)號(hào)作為新的當(dāng)前狀態(tài)號(hào);步驟10根據(jù)取到的狀態(tài)號(hào)來計(jì)算存放當(dāng)前狀態(tài)信息項(xiàng)的狀態(tài)信息地址;步驟11根據(jù)步驟10得到的狀態(tài)信息表的地址,取出相應(yīng)的狀態(tài)信息放入當(dāng)前狀態(tài)信息中;步驟12根據(jù)得到的狀態(tài)信息判斷輸入的字符是否匹配;步驟13記錄匹配的結(jié)果;步驟14判斷收到的數(shù)據(jù)包是否全部完成匹配;步驟15取下一個(gè)字符;步驟16重復(fù)執(zhí)行步驟7到步驟14;步驟17當(dāng)整個(gè)數(shù)據(jù)包匹配結(jié)束后,把匹配結(jié)果與原始的數(shù)據(jù)包重新組合成新的數(shù)據(jù)包;步驟18把數(shù)據(jù)包轉(zhuǎn)發(fā)出去,然后初始化當(dāng)前的狀態(tài)號(hào)為0,開始新的數(shù)據(jù)包匹配。
2、 根據(jù)權(quán)利要求1所述的基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配 算法,其特征在于,所述步驟4中接收到的新的數(shù)據(jù)包需要匹配則執(zhí) 行所述步驟5。
3、 根據(jù)權(quán)利要求1所述的基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配 算法,其特征在于,所述步驟4中接收到的新的數(shù)據(jù)包不需要匹配, 則執(zhí)行所述步驟18。
4、 根據(jù)權(quán)利要求1所述的基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配 算法,其特征在于,所述步驟7中根據(jù)當(dāng)前狀態(tài)信息的內(nèi)容取的字符 不在最小字符和最大字符之間,則跳轉(zhuǎn)到所述步驟6取下一個(gè)字符。
5、 根據(jù)權(quán)利要求1所述的基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配 算法,其特征在于,所述步驟7中根據(jù)當(dāng)前狀態(tài)信息的內(nèi)^l的字符 在最小字符和最大字符之間,則執(zhí)行所述步驟8。
6、 根據(jù)權(quán)利要求1所述的基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配 算法,其特征在于,所述步驟8的根據(jù)當(dāng)前狀態(tài)信息中的狀態(tài)跳轉(zhuǎn)表 的位置基址和字符計(jì)算該字符對(duì)應(yīng)的跳轉(zhuǎn)表地址的方法為跳轉(zhuǎn)表地址=狀態(tài)跳轉(zhuǎn)表的位置基址+ (最大字符最小字符) x —個(gè)狀態(tài)跳轉(zhuǎn)條目占用的字節(jié)數(shù)。
7、 根據(jù)權(quán)利要求1所述的基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配 算法,其特征在于,所述步驟10的根據(jù)取到的狀態(tài)號(hào)來計(jì)算存放當(dāng) 前狀態(tài)信息項(xiàng)的狀態(tài)信息地址的方法為狀態(tài)信息地址=狀態(tài)信息表基地址+當(dāng)前狀態(tài)號(hào)x每個(gè)狀態(tài) 信息條目占用的字節(jié)數(shù)
8、 根據(jù)權(quán)利要求1所述的基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配 算法,其特征在于,如果所述步驟12根據(jù)得到的狀態(tài)信息判斷輸入 的字符匹配則執(zhí)行步驟13,如果不匹配則執(zhí)行步驟14;
9、 根據(jù)權(quán)利要求1所述的基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配法,其特征在于,如果所述步驟14中收到的數(shù)據(jù)包沒有全部完成 匹配,則執(zhí)行步驟15,如果已全部完成匹配,則執(zhí)行步驟17。
全文摘要
一種基于現(xiàn)場(chǎng)可編程門陣列的高速模式匹配的方法,該方法通過動(dòng)態(tài)擴(kuò)充AC算法中的跳轉(zhuǎn)函數(shù)goto生成DFA狀態(tài)表,并對(duì)其壓縮后通過硬件的方式實(shí)現(xiàn)內(nèi)容檢測(cè)和應(yīng)用識(shí)別,以滿足用戶對(duì)網(wǎng)絡(luò)應(yīng)用層處理和網(wǎng)絡(luò)信息安全的需要。本發(fā)明涉及基于正則表達(dá)式的規(guī)則描述、狀態(tài)機(jī)技術(shù)的模式匹配引擎、規(guī)則庫壓縮優(yōu)化,DFA模式匹配是一種將時(shí)間復(fù)雜度轉(zhuǎn)換為空間復(fù)雜度的算法,它可并行匹配多個(gè)規(guī)則,而且對(duì)規(guī)則長度無限制,被匹配的特征值可以是非定位的,也可以是定位模式匹配。DFA算法巧妙地將多模式匹配的處理過程轉(zhuǎn)變成了狀態(tài)轉(zhuǎn)換的處理過程,從而實(shí)現(xiàn)了O(n)級(jí)別的匹配速度,所以規(guī)則庫的壓縮算法,既能保證查找速度,又能實(shí)現(xiàn)高效壓縮。
文檔編號(hào)H04L29/06GK101442540SQ20081024113
公開日2009年5月27日 申請(qǐng)日期2008年12月30日 優(yōu)先權(quán)日2008年12月30日
發(fā)明者劉曉燕, 霖 王 申請(qǐng)人:北京暢訊信通科技有限公司