專利名稱:基于智能有限自動機(jī)的正則表達(dá)式匹配方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電子計算機(jī)網(wǎng)絡(luò)技術(shù),具體是一種基于智能有限自動機(jī)的正則表達(dá)式匹配方法。
背景技術(shù):
N ^ Λ If ^ IlJ % K fp % 統(tǒng)(Network Intrusion Detection and PreventionSystems, NIDS/NIPS)是網(wǎng)絡(luò)安全防御的重要手段,即通過實時監(jiān)測網(wǎng)絡(luò)流量,檢查每個數(shù)據(jù)包的頭部信息和有效載荷(即數(shù)據(jù)包內(nèi)容),識別和阻斷網(wǎng)絡(luò)可疑行為。 NIDS/NIPS的核心是深度數(shù)據(jù)包檢測(De印Packet Inspection, DPI),即采用特征匹配算法,將每個數(shù)據(jù)包內(nèi)容與一組預(yù)定義的特征進(jìn)行匹配。DPI技術(shù)不僅應(yīng)用于NIDS/NIPS,而且還應(yīng)用于應(yīng)用層數(shù)據(jù)包分類、P2P流量識別、基于內(nèi)容的流量計費等。特征匹配算法可分為字符串匹配算法和正則表達(dá)式匹配算法。由于正則表達(dá)式具有豐富靈活的表達(dá)能力,當(dāng)前的主流NIDS/NIPS,例如Snort [2]、Bro [3]、TippingPoint IPSXicso IOS IPS等,已采用正則表達(dá)式來描述復(fù)雜攻擊特征,以及采用正則表達(dá)式匹配算法來替代字符串匹配算法。正則表達(dá)式匹配算法采用有限自動機(jī)來表示一組已知攻擊的特征正則表達(dá)式。有限自動機(jī)分為確定型有限自動機(jī)(Deterministic Finite Automata, DFA)和非確定型有限自動機(jī)(Nondeterministic Finite Automata,NFA)。DFA 具有時間高效等優(yōu)點,即匹配速度快,但是存在存儲空間開銷大等缺點;而NFA具有存儲空間高效等優(yōu)點,但是存在匹配速度慢等缺點。如何設(shè)計一種時空高效的有限自動機(jī)成為正則表達(dá)式匹配算法的關(guān)鍵間題。隨著網(wǎng)絡(luò)帶寬和業(yè)務(wù)流量的迅猛增長,正則表達(dá)式匹配算法面臨高速海量數(shù)據(jù)包處理的高性能挑戰(zhàn)。一方面,正則表達(dá)式匹配算法要求實現(xiàn)10-40(ibpS線速數(shù)據(jù)包處理; 另一方面,正則表達(dá)式匹配算法要求有限自動機(jī)存儲在小容量的快速存儲器(例如片上 SRAM)上,從而進(jìn)一步提高其吞吐量。DFA采用五元組定義,即D = (Q,Σ,S,qQ,F(xiàn)),其中Q 是狀態(tài)集合,Σ是輸入字母表集合,δ是狀態(tài)遷移函數(shù),Q(I是起始狀態(tài),F(xiàn)是接受狀態(tài)集合, 且FeG。當(dāng)輸入字符a時,對于任意狀態(tài)q e Q,根據(jù)狀態(tài)遷移函數(shù)δ,D遷移到下一狀態(tài) q' = δ (q,a)。針對正則表達(dá)式的DFA構(gòu)建,首先采用Thompson構(gòu)造法將正則表達(dá)式轉(zhuǎn)化為NFA,其次采用子集構(gòu)造法將NFA轉(zhuǎn)化為等價的DFA。圖1給出了正則表達(dá)式{. *ab. *cd} 的單獨DFA,其中狀態(tài)空間為{P,Q,R,S,T},字母表為Σ= {a, b,c,d}。例如,起始狀態(tài)為 q0 = P,狀態(tài)遷移函數(shù)為δ (P,a) = Q、δ (Q,b) = R等,且接受狀態(tài)T。在高速網(wǎng)絡(luò)環(huán)境中,隨著特征規(guī)則集日益龐大,DPI采用一組單獨DFA進(jìn)行特征匹配,導(dǎo)致處理時間增加、匹配效率降低,因而DPI采用聯(lián)合DFA來表示一組DFA。但是,聯(lián)合 DFA帶來狀態(tài)空間爆炸問題,即多個單獨DFA的狀態(tài)排列組合來記錄部分匹配結(jié)果,導(dǎo)致聯(lián)合DFA難以存儲在小容量的快速存儲器上執(zhí)行,增加慢速存儲器訪問次數(shù),從而降低正則表達(dá)式匹配算法的吞吐量。圖2給出了正則表達(dá)式{· *ef. *gh}的單獨DFA,其中狀態(tài)空間為{V, W,X,Y,Z},
3字母表為Σ = {e,f,g,h}。圖3給出了正則表達(dá)式{.*ab.*cd}和{.*ef.*gh}的聯(lián)合DFA。 為了清晰起見,圖3省略了其他狀態(tài)到初始狀態(tài)的遷移邊。圖1和圖2顯示,單獨DFA分別包含5個狀態(tài);而圖3顯示,聯(lián)合DFA包含16個狀態(tài)。聯(lián)合DFA的狀態(tài)個數(shù)與正則表達(dá)式中通配符(例如“*”)的個數(shù)密切相關(guān)。由于通配符,即星號“*”,表示任意字符,當(dāng)聯(lián)合 DFA表示正則表達(dá)式{. *ab. *cd}和{. *ef. *gh}時,兩個單獨DFA的狀態(tài)進(jìn)行叉積組合,產(chǎn)生指數(shù)級增長的額外狀態(tài)個數(shù),造成DFA狀態(tài)空間爆炸。為了消除聯(lián)合DFA的狀態(tài)空間爆炸問題,Sm i th等人提出了擴(kuò)展有限自動機(jī) (XFA),即采用輔助變量替代額外狀態(tài)來記錄部分匹配結(jié)果,執(zhí)行簡單操作指令來檢查匹配是否成功。如果聯(lián)合DFA的狀態(tài)個數(shù)小于單獨DFA的狀態(tài)數(shù)之和,則每個單獨DFA是非歧義的;反之,如果每個單獨DFA是非歧義的,則聯(lián)合DFA也是非歧義的。歧義的聯(lián)合DFA采用歧義狀態(tài)來記錄部分匹配結(jié)果的所有排列組合。針對歧義的聯(lián)合DFA,XFA是在DFA狀態(tài)上增加輔助比特變量,消除歧義狀態(tài),并在接受狀態(tài)上執(zhí)行比較指令,檢查輔助比特變量是否設(shè)置。XFA匹配過程是當(dāng)讀入一個字符時,XFA查找當(dāng)前狀態(tài)的相應(yīng)遷移邊,遷移到下一狀態(tài);執(zhí)行下一狀態(tài)的操作指令,檢查輔助變量是否設(shè)置來判斷匹配是否成功。XFA采用七元組定義,即X = (Q,V,Σ,δ,U,(q0, vQ),F(xiàn)),其中Q是狀態(tài)集合,V是輔助變量集合,Σ是輸入字母表,δ :QX Σ—Q是狀態(tài)遷移函數(shù),U :QXV —V是每個狀態(tài)的更新函數(shù),Q0是起始狀態(tài),V0是輔助變量的初始值,F(xiàn)Ee^是接受狀態(tài)集合。DFA是根據(jù)當(dāng)前狀態(tài)和輸入字符來遷移到下一個狀態(tài),而XFA是根據(jù)當(dāng)前狀態(tài)、輔助變量和輸入字符來遷移到下一個狀態(tài)并更新相應(yīng)的輔助變量。例如,對于正則表達(dá)式{· *ab. *cd}和{· *ef. *gh},圖1和圖2中的兩個單獨DFA 的狀態(tài)個數(shù)之和為10,而圖3中的聯(lián)合DFA的狀態(tài)個數(shù)為16,因而聯(lián)合DFA是歧義的。針對正則表達(dá)式{. *ab. *cd},XFA采用1個比特輔助變量Bitl來記錄部分匹配結(jié)果ab ;針對正則表達(dá)式{.*ef.*gh},XFA采用1個比特輔助變量Bit2來記錄部分匹配結(jié)果ef。圖4給出了正則表達(dá)式{· *ab. *cd}和{· *ef· *gh}的聯(lián)合XFA,即采用9個狀態(tài)和2個比特輔助變量,與圖3中的聯(lián)合DFA是等價的,且消除了其狀態(tài)空間爆炸。XFA雖然消除了 DFA狀態(tài)空間爆炸問題,但是存在冗余遷移邊問題,導(dǎo)致存儲空間需求大,從而增加存儲器訪問次數(shù),限制了 XFA的性能。為了簡明指出冗余遷移邊問題,當(dāng)分別讀入字符串為abababcd和abcdabcdabcdefgh,給出圖5和圖6的XFA示例。圖5給出了正則表達(dá)式{.*ab.*cd}的XFA,其中包含5個狀態(tài)和17條遷移邊。當(dāng)讀入字符串a(chǎn)bababcd時,XFA的狀態(tài)遷移序列為P — Q — R — Q — R—Q — R—S — T; 當(dāng)?shù)?次到達(dá)狀態(tài)R時,輔助變量Bitl設(shè)置為1,表示等待到達(dá)狀態(tài)S和T,檢查指令語句來指出匹配成功;由于XFA未記錄到達(dá)狀態(tài)R,即已部分匹配字符串a(chǎn)b,而等待后續(xù)字符串 cd, XFA的遷移狀態(tài)中2次出現(xiàn)重復(fù)狀態(tài)Q和R,導(dǎo)致不必要的狀態(tài)遷移,從而產(chǎn)生額外的存儲器訪問次數(shù)和狀態(tài)查找等開銷。圖6給出了正則表達(dá)式{. *abcd. *efgh}的XFA,其中包含9個狀態(tài)和33條遷移邊。當(dāng)讀入字符串a(chǎn)bcdabcdabcdefgh時,XFA的狀態(tài)遷移序列為0 —1 — 2 — 3 — 4—1 — 2 — 3 —4—i —2 —3 —4 —5 —6 —7 —8,其中狀態(tài)1、2、3和4重復(fù)出現(xiàn)3次;當(dāng)?shù)?次到達(dá)狀態(tài) 3時,輔助變量Bitl設(shè)置為1,表示已部分匹配字符串a(chǎn)bcd,而等待后續(xù)字符串efgh ;由于 XFA未判斷輔助變量Bitl是否設(shè)置,XFA需要遷移不必要的狀態(tài),導(dǎo)致存儲器訪問次數(shù)和狀態(tài)查找等額外開銷。造成不必要的狀態(tài)遷移的根本原因是XFA存在冗余失效遷移邊(見圖 5和圖6中所示的虛線遷移邊),并未判斷輔助變量是否設(shè)置。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是,解決XFA的冗余遷移邊問題,在XFA基礎(chǔ)上,增加輔助變量的判斷指令,消除不必要的狀態(tài)遷移,從而減少XFA的存儲空間開銷和提高其匹配效率。為解決上述問題,本發(fā)明的技術(shù)方案是,基于智能有限自動機(jī)的正則表達(dá)式匹配方法為1)選取合適的正則表達(dá)式規(guī)則集;2)構(gòu)建智能有限自動機(jī)(Smart Finite Automaton, SFA);3)通過智能有限自動機(jī)匹配方法對每個讀入的測試集分別進(jìn)行字符串匹配,并對匹配結(jié)果進(jìn)行統(tǒng)計。所述的正則表達(dá)式規(guī)則集選取方法為,采用100個規(guī)則集,每個規(guī)則集包含100條形式為{. *SubStrl. *SubStr2. . . . *SubStrN}的正則表達(dá)式,其中子串 SubMrl、SubMr2 和 SubMrN等具有相同的長度,測試集為1MB的字符串集。智能有限自動機(jī)的構(gòu)建過程是根據(jù)所選取的合適正則表達(dá)式規(guī)則集,通過智能有限自動機(jī)構(gòu)造方法構(gòu)造有限自動機(jī)并同時生成狀態(tài)集。智能有限自動機(jī)構(gòu)造過程分為兩個步驟1)在擴(kuò)展有限自動機(jī)的分支遷移邊上增加操作指令來判斷是否狀態(tài)遷移,消除不必要的狀態(tài)遷移;2)消除擴(kuò)展有限自動機(jī)中的回退遷移邊。與XFA相比,SFA在遷移邊條數(shù)上減少了 56%,在存儲空間開銷上減少了 44. 1%, 在存儲器訪問次數(shù)上減少了 69. 1%,而在匹配時間上減少了 11%,提高了正則表達(dá)式匹配的時空效率。
圖1正則表達(dá)式{· *ab. *cd}的單獨DFA ;圖2正則表達(dá)式{· *ef. *gh}的單獨DFA ;圖3 正則表達(dá)式{· *ab. *cd}和{· *ef. *gh}的聯(lián)合 DFA ;圖4正則表達(dá)式{· *ab. *cd}和{· *ef. *gh}的的聯(lián)合XFA ;圖5正則表達(dá)式{*ab. *cd}的XFA ;圖 6 正則表達(dá)式{· *abcd. *efgh}的 XFA ;圖7正則表達(dá)式{· *ab. *cd}的SFA ;圖8 正則表達(dá)式{· *abcd. *efgh}的 SFA ;圖9SFA和XFA的遷移邊條數(shù)比較,(a)相同子串長度,不同通配符個數(shù),(b)相同通配符個數(shù),不同子串個數(shù)圖10SFA和XFA的指令條數(shù)比較,(a)相同子串長度,不同通配符個數(shù),(b)相同通配符個數(shù),不同子串個數(shù);
圖IlSFA和XFA的存儲空間開銷比較,(a)相同子串長度,不同通配符個數(shù),(b)相同通配符個數(shù),不同子串個數(shù);圖12SFA和XFA的狀態(tài)遷移次數(shù)比較,(a)相同子串長度,不同通配符個數(shù),(b)相同通配符個數(shù),不同子串個數(shù);圖13SFA和XFA的匹配時間比較,(a)相同子串長度,不同通配符個數(shù),(b)相同通配符個數(shù),不同子串個數(shù)。
具體實施例方式為了解決XFA的冗余遷移邊問題,本文提出了智能有限自動機(jī)(SFA),即在XFA基礎(chǔ)上,增加輔助變量的判斷指令,消除不必要的狀態(tài)遷移,從而減少XFA的存儲空間開銷和提高其匹配效率。SFA的靈感來源是基于對DFA狀態(tài)遷移的觀察如圖1所示,當(dāng)讀入字符串a(chǎn)bababcd時,DFA的狀態(tài)遷移序列為P — Q — R—R—R—R—R—S — T,其中狀態(tài)R 重復(fù)出現(xiàn)5次;由于DFA的狀態(tài)R具有記憶功能,即記錄已部分匹配字符串a(chǎn)b,等待后續(xù)字符串cd,當(dāng)讀入非cd的字符串,DFA始終遷移到狀態(tài)R,而不會回退到R之前的狀態(tài)P或Q。 因此,XFA雖然采用輔助變量和操作指令來消除DFA狀態(tài)空間爆炸問題,但是也刪除了狀態(tài)的記憶功能。基于上述觀察,本文的SFA是利用輔助變量,增加XFA遷移邊的記憶功能,從而避免不必要的狀態(tài)遷移。SFA的構(gòu)建過程是1)在XFA的分支遷移邊上增加操作指令來判斷是否狀態(tài)遷移,從而消除不必要的狀態(tài)遷移;2)消除XFA中回退遷移邊,從而減少XFA的存儲空間開銷。在XFA中,遷移邊分為向前遷移邊(ForwardingiTransition)和交叉遷移邊(Crossing Transition)。向前遷移邊是指從深度為i的節(jié)點指向深度為i+Ι的節(jié)點的遷移邊;而交叉遷移邊是指從深度為i的節(jié)點指向深度為j的節(jié)點的遷移邊,且i <= j。分支遷移邊是指從深度為O的節(jié)點指向深度為1的節(jié)點的向前遷移邊。例如,圖5中的遷移邊a :P — Q和 c:P-S是分支遷移邊?;赝诉w移邊是指從中間狀態(tài)i指向中間狀態(tài)j的交叉遷移邊或者從前綴狀態(tài)指向同一分支的中間狀態(tài)的交叉遷移邊,其i Φ j。前綴狀態(tài)是指設(shè)置輔助變量為1的狀態(tài),中間狀態(tài)是除了初始狀態(tài)、接受狀態(tài)和前綴狀態(tài)的其他狀態(tài)。例如,圖5中的狀態(tài)R是前綴狀態(tài)、狀態(tài)Q和S是中間狀態(tài),遷移邊c :Q — S和a :S — Q是回退遷移邊,而遷移邊c :R — S不是回退遷移邊。因此,在分支遷移邊上,增加判斷操作指令,即if (Bit) transit表示當(dāng)輔助變量Bit設(shè)置為1時執(zhí)行狀態(tài)遷移,或者if ( ! Bit) transit表示當(dāng)輔助變量Bit未設(shè)置為1時執(zhí)行狀態(tài)遷移,從而可判斷是否查找指定的狀態(tài)遷移及下一個狀態(tài)。當(dāng)分支遷移邊的判斷操作指令表示不執(zhí)行狀態(tài)遷移時,SFA保持當(dāng)前狀態(tài)不變,從而減少遷移邊的存儲空間訪問次數(shù),提高正則表達(dá)式匹配的效率。圖7給出了正則表達(dá)式{. *ab. *cd}的SFA,其中包含5個狀態(tài)和13條遷移邊。如圖7所示,在分支遷移邊a:P —Q上增加了判斷操作指令if( ! Bitl) transit,在分支遷移邊c :P — S上增加了判斷操作指令if (Bitl) transit,從而過濾掉不必要的狀態(tài)遷移。與圖5中DFA相比,SFA具有相同的狀態(tài)個數(shù),但是其遷移邊條數(shù)從17減至13。圖8給出了正則表達(dá)式{. *abcd. *efgh}的SFA,其中包含9個狀態(tài)和25條遷移邊。如圖8所示,在分支遷移邊a :0 — 1和e :0 — 5上分別增加了相應(yīng)的判斷操作指令。與圖6中DFA相比,SFA 的遷移邊條數(shù)從33減至25。實驗結(jié)果表明,當(dāng)正則表達(dá)式規(guī)則數(shù)量更多且更復(fù)雜時,SFA雖然在少量遷移邊上增加了判斷操作指令,但是在存儲空間等方面顯著減少。當(dāng)讀入字符串a(chǎn)bababcd時,圖7中SFA的匹配過程是當(dāng)讀入字符a時,由于輔助變量Bitl設(shè)置為0,初始狀態(tài)P執(zhí)行判斷操作指令,遷移到狀態(tài)Q ;當(dāng)讀入字符b時,狀態(tài)Q 遷移到前綴狀態(tài)R,并設(shè)置輔助變量Bitl為1 ;當(dāng)讀入字符a時,狀態(tài)R遷移到初始狀態(tài)P ; 當(dāng)讀入字符b、a和b時,由于輔助變量Bitl設(shè)置為1,初始狀態(tài)P執(zhí)行判處操作指令,不遷移到其他狀態(tài),停留在初始狀態(tài)P ;當(dāng)讀入字符c時,由于輔助變量Bitl設(shè)置為1,初始狀態(tài) P執(zhí)行判處操作指令,遷移到狀態(tài)S ;最后,當(dāng)讀入字符d時,狀態(tài)S遷移到接受狀態(tài)T,并檢查輔助變量是否設(shè)置為1,從而匹配正則表達(dá)式{. *ab. *cd}。因而,圖7中SFA的狀態(tài)遷移序列為P — Q — R — P — P — P — P — S — T,其存儲器訪問次數(shù)僅為5次,而少于XFA的 8次。類似地,當(dāng)讀入字符串a(chǎn)bcdabcdabcdefgh時,圖8中SFA的狀態(tài)遷移序列為0—1 — 2 —3 —4 —0 — 0 —0 — 0 —0 — 0 —0 — 0 —5 —6 —7 —8,其存儲器訪問次數(shù)僅為9次,而少于XFA 的16次。本發(fā)明采用C/C++設(shè)計實現(xiàn)了 XFA和SFA,并運行在CPU為htel CeleronCPU 1.3GHZ、內(nèi)存為512MB的計算機(jī)上。在軟件模擬實驗中,本文在不同通配符(星號*)個數(shù)和不同子串長度的條件下評估正則表達(dá)式匹配算法的時間效率指標(biāo)。空間效率指標(biāo)包括狀態(tài)個數(shù)、遷移邊條數(shù)、指令條數(shù)和存儲空間開銷等;而時間效率指標(biāo)包括狀態(tài)遷移次數(shù)和匹配時間等。在評估數(shù)據(jù)集中,采用100個規(guī)則集,且每個規(guī)則集包含100條形式為{. *SubStrl. *SubStr2. . . . *SubStrN}的正則表達(dá)式,其中子串 SubStrl、SubStr2 和 SubStrN等具有相同的長度,而測試集為1MB的字符串集。表1給出了 XFA和SFA的狀態(tài)個數(shù)。表1 (a)和1 (b)分別是在不同通配符個數(shù)和不同子串長度的條件下XFA和SFA的狀態(tài)個數(shù)。表1顯示,SFA和XFA具有相同的狀態(tài)個數(shù)。
XFASFA1個通配符*8978972個通配符*130013003個通配符*16941694
XFASFA子串長度為4897897子串長度為817001700
(a)
(b)表 1SFA和XFA的遷移邊條數(shù)比較如圖9所示,與XFA相比,SFA在遷移邊條數(shù)上減少了 56% ;隨著星號個數(shù)或子串長度的增加,SFA減少的冗余遷移邊條數(shù)比率也增多,即從 33. 8%增至 56%。圖10給出了 SFA和XFA的指令條數(shù)比較。SFA和XFA均采用相同的操作指令來執(zhí)行狀態(tài)遷移或匹配檢查等,由專用嵌入式硬件(例如GPU/SIMD)支持。圖10表明,與XFA 相比,由于在分支遷移邊上增加額外的判斷操作指令,SFA的操作指令條數(shù)增多;隨著星號個數(shù)的增加,SFA的指令條數(shù)也增加;但是,隨著子串長度的增加,SFA的指令條數(shù)保持恒定不變。圖11給出了 SFA和XFA的存儲空間開銷比較。存儲空間開銷是由狀態(tài)個數(shù)、遷移邊條數(shù)、操作指令條數(shù)和輔助變量個數(shù)所決定的。在相同的實驗條件下,SFA與XFA的狀態(tài)個數(shù)和輔助變量個數(shù)是相同的;SFA的遷移邊條數(shù)少于XFA,而SFA的操作指令條數(shù)多于
7XFA。因而,存儲空間開銷是SFA空間效率的關(guān)鍵指標(biāo)。圖11表明,與XFA相比,SFA在存儲空間開銷上減少了 44. 1%;隨著星號個數(shù)或子串個數(shù)的增加,SFA減少的存儲空間開銷也增多,即從21%增至44. 1%。圖12給出了 SFA和XFA的狀態(tài)遷移次數(shù)比較。狀態(tài)遷移次數(shù)主要反映正則表達(dá)式匹配算法的存儲器訪問次數(shù),即存儲器帶寬需求。由于嵌入式存儲器的帶寬受限和代價昂貴,減少狀態(tài)遷移次數(shù)有助于減少存儲器帶寬需求,從而提高正則表達(dá)式匹配的性能和硬件開銷。圖12表明,與XFA相比,SFA在狀態(tài)遷移次數(shù)上減少了 46.2% -69. 1%。圖13給出了 SFA和XFA的匹配時間比較。本文是在相同硬件平臺和評估數(shù)據(jù)集的條件下,統(tǒng)計SFA和XFA的實際匹配時間。由于受通用硬件平臺的CPU、I/O總線帶寬等限制,基于軟件實現(xiàn)的SFA和XFA難以滿足實際10(ibpS線速數(shù)據(jù)包處理。但是,本文的匹配時間是在相同條件下的仿真匹配時間,可滿足SFA和XFA的性能比較需求。圖13表明, 與XFA相比,SFA在匹配時間上減少了 6. 7 % -11 %。本發(fā)明作為一種基于智能有限自動機(jī)的正則表達(dá)式匹配方法,具有一定的通用性,并且可以通過應(yīng)用該方法的思想改進(jìn)正則表達(dá)式匹配方法??蓱?yīng)用于深度數(shù)據(jù)包檢測, 網(wǎng)絡(luò)入侵檢測系統(tǒng)以及信息安全等領(lǐng)域之中。其具體的實施歸納為一個預(yù)備步驟和兩個實施步驟預(yù)備步驟選取合適的正則表達(dá)式規(guī)則集采用100個規(guī)則集,且每個規(guī)則集包含100條形式為 {. *SubStrl. *SubStr2. . . . *SubStrN}的正則表達(dá)式,其中子串 SubStrl、SubStr2 和 SubStrN等具有相同的長度;而測試集為1MB的字符串集。步驟1 構(gòu)建智能有限自動機(jī)(SFA)SFA的構(gòu)建過程是根據(jù)選取合適的正則表達(dá)式規(guī)則集,通過SFA構(gòu)造方法構(gòu)造有限自動機(jī)并同時生成狀態(tài)集;智能有限自動機(jī)(SFA)構(gòu)造過程分為兩個步驟1)在XFA的分支遷移邊上增加操作指令來判斷是否狀態(tài)遷移,從而消除不必要的狀態(tài)遷移;2)消除XFA中回退遷移邊,從而減少XFA的存儲空間開銷。步驟2 通過SFA匹配算法對每個讀入的測試集分別進(jìn)行字符串匹配,并對匹配結(jié)果進(jìn)行統(tǒng)計以便于對SFA效率進(jìn)行評估。
權(quán)利要求
1.一種基于智能有限自動機(jī)的正則表達(dá)式匹配方法,其特征在于,該方法為1)選取合適的正則表達(dá)式規(guī)則集;2)構(gòu)建智能有限自動機(jī);3)通過智能有限自動機(jī)匹配方法對每個讀入的測試集分別進(jìn)行字符串匹配,并對匹配結(jié)果進(jìn)行統(tǒng)計。
2.根據(jù)權(quán)利要求1所述的基于智能有限自動機(jī)的正則表達(dá)式匹配方法,其特征在于,所述的正則表達(dá)式規(guī)則集選取方法為,采用100個規(guī)則集,每個規(guī)則集包含100條形式為{. *SubStrl. *SubStr2. . . . *SubStrN}的正則表達(dá)式,其中子串 SubStrl、SubStr2 和 SubMrN等具有相同的長度,測試集為1MB的字符串集。
3.根據(jù)權(quán)利要求1所述的基于智能有限自動機(jī)的正則表達(dá)式匹配方法,其特征在于, 智能有限自動機(jī)的構(gòu)建過程為,根據(jù)所選取的合適正則表達(dá)式規(guī)則集,通過智能有限自動機(jī)構(gòu)造算法構(gòu)造有限自動機(jī)并同時生成狀態(tài)集。
4.根據(jù)權(quán)利要求3所述的基于智能有限自動機(jī)的正則表達(dá)式匹配方法,其特征在于, 智能有限自動機(jī)構(gòu)造過程包括兩個步驟1)在擴(kuò)展有限自動機(jī)的分支遷移邊上增加操作指令來判斷是否狀態(tài)遷移,消除不必要的狀態(tài)遷移;2)消除擴(kuò)展有限自動機(jī)中的回退遷移邊。
全文摘要
本發(fā)明公開了一種基于智能有限自動機(jī)(Smart Finite Automaton,SFA)的正則表達(dá)式匹配方法選取合適的正則表達(dá)式規(guī)則集;構(gòu)建智能有限自動機(jī);通過智能有限自動機(jī)匹配方法對每個讀入的測試集分別進(jìn)行字符串匹配,并對匹配結(jié)果進(jìn)行統(tǒng)計。實驗結(jié)果表明,與XFA相比,SFA在存儲空間開銷上減少了44.1%,在存儲器訪問次數(shù)上減少了69.1%,提高了正則表達(dá)式匹配的時空效率。解決了XFA存在的冗余遷移邊問題,能夠有效的節(jié)省存儲空間,同時也提高了XFA的性能。為當(dāng)前網(wǎng)絡(luò)帶寬和業(yè)務(wù)流量迅猛增長環(huán)境下,正則表達(dá)式匹配方法應(yīng)用時面臨的線速數(shù)據(jù)包處理的吞吐量要求和存儲空間需求提供了一種行之有效的解決方案。
文檔編號G06F17/30GK102184197SQ20111010141
公開日2011年9月14日 申請日期2011年4月22日 優(yōu)先權(quán)日2011年4月22日
發(fā)明者張潔坤, 徐析, 李彥彪, 黃昆 申請人:湖南億谷信息科技發(fā)展有限公司