專利名稱:字符串匹配方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明實(shí)施例涉及通信技術(shù)領(lǐng)域,特別涉及一種字符串匹配方法和裝置。
背景技術(shù):
隨著全I(xiàn)P (Internet Protocol,因特網(wǎng)協(xié)議)網(wǎng)絡(luò)、固定移動融合、多重播放等概念的提出,傳統(tǒng)的IP網(wǎng)絡(luò)正在向集數(shù)據(jù)、語音和^f見頻于一體的多業(yè)務(wù)統(tǒng)一承載網(wǎng)轉(zhuǎn)變。但是IP網(wǎng)絡(luò)固有的數(shù)據(jù)傳送方式和本質(zhì)上開》文的特征無法很好地滿足電信級業(yè)務(wù)的需要,在網(wǎng)絡(luò)安全性、可管理性和關(guān)鍵業(yè)務(wù)的QoS( Qualityof Service,服務(wù)質(zhì)量)和QoE ( Quality of Experience,用戶體驗(yàn)質(zhì)量)保證等方面都有待改進(jìn)。為了對一些關(guān)鍵業(yè)務(wù)進(jìn)行精確的業(yè)務(wù)識別和控制,除了按照傳統(tǒng)的方法分析報文頭中的五元組等字段外,還需要對報文的負(fù)荷部分進(jìn)行檢測。DPI ( Deep Packet Inspection,深度報文才企測)技術(shù)作為一種靈活有效的業(yè)務(wù)識別技術(shù)應(yīng)運(yùn)而生。
現(xiàn)在,DPI技術(shù)多采用正則表達(dá)式取代字符串來描述報文特征。正則表達(dá)式是一種形式語言,由常量和算子組成,常量和算子分別指示元字符的集合和在這些集合上的運(yùn)算。和字符串相比,正則表達(dá)式能夠非常靈活、簡單、有效地描述各種特征,使得特征串具有動態(tài)特性,適合各種動態(tài)搜索。例如b, ab, aab, aaab, aaaab,…這一系列的字符串特征可以簡單地用一個正則表達(dá)式a化來表示,字符串可以看作是正則表達(dá)式的一種特例,后續(xù)將兩者統(tǒng)稱為字符串。
判斷輸入內(nèi)容中是否包含字符串表示的規(guī)則的操作稱為字符串匹配,現(xiàn)有技術(shù)提供的一種字符串匹配方法是基于DFA (Deterministic FiniteAutomation,確定性有限狀態(tài)機(jī))方法。
現(xiàn)在,字符串匹配在網(wǎng)絡(luò)設(shè)備中得到越來越多的應(yīng)用,比如在網(wǎng)絡(luò)設(shè)備中對數(shù)據(jù)報文進(jìn)行;險測。 一種趨勢是利用FPGA (Field Programmable GateArray,現(xiàn)場可編程門陣列)、ASIC (Application Specific Integrated Circuit,專用集成電路)實(shí)現(xiàn)基于DFA的字符串匹配系統(tǒng),這些系統(tǒng)依賴于各種存儲器來保存DFA數(shù)據(jù)。現(xiàn)在常用的存儲器有BRAM (Block Random AccessMemoiy,片內(nèi)分塊隨才幾存取存j渚器)、DRAM (Dynamic Random AccessMemory,動態(tài)隨才幾存取存4諸器)、SRAM (Static Random Access Memory,靜態(tài)隨機(jī)存取存儲器)等幾種。在使用較復(fù)雜的字符串規(guī)則集合時,無法用BRAM和SRAM來存儲全部的DFA信息;雖然DRAM可以滿足存儲要求,但DRAM訪問速度慢,滿足不了線速處理的要求,而且頻繁訪問DRAM會成為整個系統(tǒng)的最大瓶頸。
現(xiàn)有技術(shù)的一種匹配方式是采用狀態(tài)遷移表方式存儲狀態(tài)信息,利用存儲的狀態(tài)信息進(jìn)行字符串匹配。狀態(tài)遷移表方式是一種非緊湊存儲方式,其基本的思路是將當(dāng)前狀態(tài)和輸入字符分別作為表的兩個維度,通過這兩個參數(shù)可以唯一確定一個目的狀態(tài)。
但是狀態(tài)遷移表方式對每種可能的輸入字符都需要存儲,即使在某個狀態(tài)上沒有有效輸入字符,也需要一個存儲位置,因此上述存儲方法占用的存儲空間很大,無法用快速存儲器件實(shí)現(xiàn)DFA的完全存儲。
現(xiàn)有技術(shù)的另 一種匹配方式是采用鄰接表方式存儲狀態(tài)信息,利用存儲的狀態(tài)信息進(jìn)行字符串匹配。鄰接表方式是一種緊湊存儲方式?;镜乃悸肥菍δ硞€當(dāng)前狀態(tài),只存儲有效字符對應(yīng)的那些轉(zhuǎn)移邊信息。
但是鄰接表方式存儲的字符不連續(xù),在進(jìn)行字符比較時只能從第一個字符開始,逐個地對存儲的字符進(jìn)行比較,無法實(shí)現(xiàn)高速的字符串匹配處理,無法達(dá)到線速處理的性能要求,因此在高速系統(tǒng)中雖然節(jié)省了存儲空間,仍然很少被用來進(jìn)行字符串匹配。此外,在轉(zhuǎn)移邊個數(shù)比較多時,鄰接表方式的存儲方法節(jié)省的存儲空間非常有限。
現(xiàn)有技術(shù)還提出了一種分級的內(nèi)存結(jié)構(gòu)來存儲狀態(tài)機(jī)信息,并利用存儲的狀態(tài)機(jī)信息進(jìn)行字符串匹配。基本思路是按照訪問速度將BRAM、 SRAM和DRAM從高到低組織起來,層次越高的存儲器速度越高,容量越??;然后按照字符串規(guī)則的使用頻度由高到低的順序,將規(guī)則對應(yīng)的狀態(tài)機(jī)用不同的存
儲器件來存放;使用頻度高的規(guī)則優(yōu)先放在層次較高的存儲器中。
但是該方法對于所有規(guī)則仍然采用單一 的存儲方式,而且同 一個狀態(tài)機(jī)的所有狀態(tài)在某個時刻會同時存儲在同 一存儲器中。在規(guī)則本身比較復(fù)雜時,BRAM中能夠存儲的狀態(tài)機(jī)個數(shù)取決于規(guī)則的復(fù)雜程度。因此在規(guī)則個數(shù)較多或規(guī)則本身較復(fù)雜時,該方法不適用于字符串匹配操作。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種字符串匹配方法和裝置,以實(shí)現(xiàn)對不同的狀態(tài)信息采用不同的存儲方式進(jìn)行存儲,利用存儲的狀態(tài)信息進(jìn)行字符串匹配,提高字符串匹配性能。
為達(dá)到上述目的,本發(fā)明實(shí)施例一方面提供一種字符串匹配方法,包括
根據(jù)預(yù)設(shè)的狀態(tài)屬性閾值對狀態(tài)信息進(jìn)行分類;采用不同存儲方式存儲分類后的每類狀態(tài)信息,所述不同存儲方式的空間效率不同;利用存儲的狀態(tài)信息對接收的字符串進(jìn)行匹配才喿作。
另一方面,本發(fā)明實(shí)施例還提供一種字符串匹配裝置,包括分類模塊,用于根據(jù)預(yù)設(shè)的狀態(tài)屬性閾值對狀態(tài)信息進(jìn)行分類;存儲模塊,用于采用不同存儲方式存儲所述分類模塊分類后的每類狀態(tài)信息,所述不同存儲方式的空間效率不同;匹配模塊,用于利用所述存儲模塊存儲的狀態(tài)信息對接收的字符串進(jìn)行匹配操作。
再一方面,本發(fā)明實(shí)施例還提供一種狀態(tài)信息的編譯方法,包括
將正則表達(dá)式規(guī)則轉(zhuǎn)換為狀態(tài)機(jī);
掃描狀態(tài)機(jī)的每一個狀態(tài)信息,根據(jù)預(yù)設(shè)的狀態(tài)屬性閾值對所述狀態(tài)信息進(jìn)行分類;
采用不同存儲方式存儲分類后的每類狀態(tài)信息,所述不同存儲方式的空間效率不同。
再一方面,本發(fā)明實(shí)施例還提供一種狀態(tài)信息的編譯工具,包括轉(zhuǎn)換模塊,用于將正則表達(dá)式規(guī)則轉(zhuǎn)換為狀態(tài)機(jī);分類模塊,用于掃描所述轉(zhuǎn)換模塊轉(zhuǎn)換的狀態(tài)機(jī)的每一個狀態(tài)信息,根
據(jù)預(yù)設(shè)的狀態(tài)屬性閾值對所述狀態(tài)信息進(jìn)行分類;
存儲模塊,用于采用不同存儲方式存儲分類后的每類狀態(tài)信息,所述不 同存儲方式的空間效率不同。
與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn)本發(fā)明實(shí)施例對狀態(tài)信 息進(jìn)行分類,針對不同種類的狀態(tài)信息釆用不同的存儲方法,并利用存儲的 狀態(tài)信息進(jìn)行字符串匹配。本發(fā)明實(shí)施例既壓縮了整個狀態(tài)信息的存儲空間, 使之能夠滿足當(dāng)前存儲器件的容量限制,又保證了在進(jìn)行字符串匹配時,有 較高的處理性能。
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對實(shí)施例描述中所 需要使用的附圖作簡單地介紹,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施 例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提出的一種字符串匹配方法的流程圖; 圖2為本發(fā)明實(shí)施例提出的一種字符串匹配裝置的結(jié)構(gòu)圖; 圖3為本發(fā)明實(shí)施例提出的另一種字符串匹配裝置的結(jié)構(gòu)圖; 圖4為本發(fā)明實(shí)施例提出的字符串匹配裝置的工作流程示意圖; 圖5為本發(fā)明實(shí)施例狀態(tài)信息的編譯方法的流程圖; 圖6為本發(fā)明實(shí)施例狀態(tài)信息的編譯工具的結(jié)構(gòu)圖。
具體實(shí)施例方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行 清楚、完整地描述,所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是 全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng) 造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
如圖1所示,為本發(fā)明實(shí)施例提出的一種字符串匹配方法的流程圖,包
7括
步驟SlOl,根據(jù)預(yù)設(shè)的狀態(tài)屬性閾值對狀態(tài)信息進(jìn)行分類。
其中,狀態(tài)屬性具體可以為轉(zhuǎn)移邊數(shù)目和狀態(tài)信息的訪問頻度,以及 當(dāng)前狀態(tài)和開始狀態(tài)間的距離中的一種或多種。
在本發(fā)明實(shí)施例的一種實(shí)現(xiàn)方式中,可以預(yù)先設(shè)定一個轉(zhuǎn)移邊個數(shù)閾值, 將DFA狀態(tài)的轉(zhuǎn)移邊數(shù)目和該轉(zhuǎn)移邊個數(shù)閾值進(jìn)行比較,將狀態(tài)信息分為非 緊湊狀態(tài)信息和緊湊狀態(tài)信息。例如可以將小于該轉(zhuǎn)移邊個數(shù)閾值的狀態(tài) 信息分為緊湊狀態(tài)信息,作為第一類狀態(tài)信息;將大于該轉(zhuǎn)移邊個數(shù)閾值的 狀態(tài)信息分為非緊湊狀態(tài)信息,作為第二類狀態(tài)信息。
當(dāng)然本發(fā)明實(shí)施例并不局限于此,如何進(jìn)行分類,分類的個數(shù)并不影響 本發(fā)明實(shí)施例的實(shí)現(xiàn)。
步驟S102,采用不同存儲方式存儲分類后的每類狀態(tài)信息,不同存儲方 式的空間效率不同。
本發(fā)明實(shí)施例將緊湊狀態(tài)信息即第一類狀態(tài)信息存儲在DRAM中,并且 將部分緊湊狀態(tài)信息存儲在BRAM中,將非緊湊狀態(tài)信息即第二類狀態(tài)信息 存儲在SRAM中,DRAM和BRAM的空間效率高于SRAM的空間效率。
步驟S103,利用存儲的狀態(tài)信息對接收的字符串進(jìn)行匹配操作。
其中,利用存儲的狀態(tài)信息對接收的字符串進(jìn)行匹配操作具體可以為
根據(jù)進(jìn)行匹配操作的表示規(guī)則信息,獲得該表示規(guī)則信息對應(yīng)的狀態(tài)信 息。當(dāng)接收的字符串的當(dāng)前字符和該狀態(tài)信息的當(dāng)前字符匹配時,根據(jù)該狀 態(tài)信息的當(dāng)前字符和當(dāng)前狀態(tài)確定目的狀態(tài)的存儲地址。然后,根據(jù)目的狀 態(tài)的存儲地址,確定目的狀態(tài)信息的存儲位置,并根據(jù)該存儲位置讀取該目 的狀態(tài)信息進(jìn)行下一個字符的匹配。
其中,根據(jù)存儲位置讀取目的狀態(tài)信息進(jìn)行下一個字符的匹配具體可以
為
當(dāng)目的狀態(tài)信息存儲在片內(nèi)存儲器時,從片內(nèi)存儲器中讀取該目的狀態(tài) 信息的所有信息進(jìn)行下一個字符的匹配;或者,
當(dāng)目的狀態(tài)信息存儲在片外存儲器時,從片外存儲器中讀取該目的狀態(tài) 8信息的一條信息進(jìn)行下一個字符的匹配。
上述字符串匹配方法,對狀態(tài)信息進(jìn)行分類,針對不同種類的狀態(tài)信息 采用不同的存儲方法,并利用存儲的狀態(tài)信息進(jìn)行字符串匹配。本發(fā)明實(shí)施 例既壓縮了整個狀態(tài)信息的存儲空間,使之能夠滿足當(dāng)前存儲器件的容量限 制,又保證了在進(jìn)行字符串匹配時,有較高的處理性能。
如圖2所示,為本發(fā)明實(shí)施例提出的一種字符串匹配裝置的結(jié)構(gòu)圖,包
括
分類模塊21 ,用于根據(jù)預(yù)設(shè)的狀態(tài)屬性閾值對狀態(tài)信息進(jìn)行分類。
存儲模塊22,用于采用不同存儲方式存儲分類模塊21分類后的每類狀態(tài) 信息,不同存儲方式的空間效率不同。
匹配模塊23,用于利用存儲模塊22存儲的狀態(tài)信息對接收的字符串進(jìn)行 匹配搡作。
其中,匹配模塊23可以包括
狀態(tài)信息獲取子模塊231,用于根據(jù)進(jìn)行匹配操作的表示規(guī)則信息,獲得 該表示規(guī)則信息對應(yīng)的第 一類狀態(tài)信息;
存儲地址確定子^^莫塊232,用于當(dāng)接收的字符串的當(dāng)前字符和狀態(tài)信息的 當(dāng)前字符匹配時,根據(jù)狀態(tài)信息的當(dāng)前字符和當(dāng)前狀態(tài)確定目的狀態(tài)的存儲 地址;
信息讀取子模塊233,用于根據(jù)所述存儲地址確定子模塊232確定的目的 狀態(tài)的存儲地址,確定目的狀態(tài)信息的存儲位置,并根據(jù)該存儲位置讀取目 的狀態(tài)信息;
字符比較子模塊234,用于根據(jù)信息讀取子模塊233讀取的目的狀態(tài)信息 進(jìn)行下一個字符的匹配。
上述字符串匹配裝置,分類模塊21對狀態(tài)信息進(jìn)行分類,指示存儲模塊 22針對不同的狀態(tài)信息采用不同存儲方式,進(jìn)而匹配模塊23可以利用存儲模 塊22存儲的狀態(tài)信息對接收的字符串進(jìn)行匹配操作,不僅壓縮了整個狀態(tài)信 息的存儲空間,使之能夠滿足當(dāng)前存儲器件的容量限制,又提高了字符串匹 配操作的處理速度。
9如圖3所示,為本發(fā)明實(shí)施例提出的另一種字符串匹配裝置的結(jié)構(gòu)圖,本 實(shí)施例以數(shù)據(jù)寺艮文作為字符串的實(shí)例進(jìn)行說明。
本實(shí)施例中,預(yù)先設(shè)定一個轉(zhuǎn)移邊個數(shù)閾值,分類模塊21將DFA狀態(tài) 的轉(zhuǎn)移邊數(shù)目和該轉(zhuǎn)移邊個數(shù)閾值進(jìn)行比較,將狀態(tài)信息分為非緊湊狀態(tài)信 息和緊湊狀態(tài)信息。例如可以將小于該轉(zhuǎn)移邊個數(shù)閾值的狀態(tài)信息分為緊 湊狀態(tài)信息;將大于該轉(zhuǎn)移邊個數(shù)閾值的狀態(tài)信息分為非緊湊狀態(tài)信息。
當(dāng)然本發(fā)明實(shí)施例并不局限于此,如何進(jìn)行分類,分類的個數(shù)并不影響 本發(fā)明實(shí)施例的實(shí)現(xiàn)。
存儲模塊22具體可以在BRAM31、 DRAM32和SRAM33上實(shí)現(xiàn),其中, BRAM 31用于存儲與DFA相關(guān)的部分?jǐn)?shù)據(jù),包括狀態(tài)機(jī)緩存模塊311和狀態(tài)機(jī) 信息存儲模塊312,其中,狀態(tài)機(jī)緩存模塊311保存最近訪問過的DFA信息, 也可以根據(jù)訪問頻度,保存經(jīng)常訪問的DFA信息。如果緩存命中,可以避免 從DRAM中讀取DFA,提高裝置的性能。
狀態(tài)機(jī)信息存儲模塊3112保存每一個DFA在DRAM中的起始存儲地址和 大小,在每次需要裝入DFA緊湊狀態(tài)時使用。
DRAM 32,用于存儲緊湊狀態(tài)信息。
SRAM 33,用于存儲非緊湊狀態(tài)信息。
本實(shí)施例中,匹配模塊23具體可以在引擎34上實(shí)現(xiàn),引擎34是整個字符 串匹配裝置的核心和控制模塊,引擎34包括報文緩存模塊341、比較器342和 控制器343。
報文緩存模塊341,用于接收需要進(jìn)行DFA匹配操作的數(shù)據(jù)報文,以供后 續(xù)進(jìn)行字符比較;
比較器342,用于從報文緩存模塊341中取出單個字符,用于和DFA狀態(tài) 的轉(zhuǎn)移邊上的字符進(jìn)行比較,確定是否是匹配狀態(tài),實(shí)現(xiàn)字符比較子模塊234 的功能;或確定通過當(dāng)前字符可以遷移到的目的狀態(tài)的存儲地址,實(shí)現(xiàn)存儲 地址確定子模塊232的功能;
控制器343主要有以下幾個作用
(1)在接收到一個新報文和需要匹配的規(guī)則編號時,根據(jù)規(guī)則編號在狀
10態(tài)機(jī)緩存模塊311中或是DRAM 32上查找該規(guī)則對應(yīng)的DFA的所有緊湊狀態(tài), 將不在狀態(tài)機(jī)緩存中的緊湊狀態(tài)從DRAM裝入到狀態(tài)機(jī)緩存模塊311中;
(2 )在匹配過程中,根據(jù)比較器342產(chǎn)生的目的狀態(tài)信息的存儲地址, 從狀態(tài)機(jī)緩存模塊31 l存儲的當(dāng)前狀態(tài)機(jī)或SRAM 33中獲取需要比較的轉(zhuǎn)移 邊信息,實(shí)現(xiàn)信息讀取子模塊233的功能;
(3)向外圍模塊(如以太網(wǎng)口、片外存儲器)的控制模塊發(fā)出讀寫等控 制信號。
其中,BRAM31和引擎34可以集成在一個可編程邏輯器件,例如FPGA 上;DRAM32和SRAM33可以集成在一個片外存4渚器上。
本發(fā)明實(shí)施例提供的字符串匹配裝置,在用可編程邏輯器件例如FPGA 實(shí)現(xiàn)基于DFA的正則表達(dá)式匹配裝置時,既有效存儲了所有的DFA,又能保 證該字符串匹配裝置對報文匹配進(jìn)行高速處理。
本發(fā)明實(shí)施例以狀態(tài)屬性為轉(zhuǎn)移邊數(shù)目為例對具體實(shí)現(xiàn)時的操作進(jìn)行詳 細(xì)i兌明。
本發(fā)明實(shí)施例首先設(shè)定一個轉(zhuǎn)移邊個數(shù)閾值,將DFA狀態(tài)的轉(zhuǎn)移邊數(shù)目 和該轉(zhuǎn)移邊個數(shù)閾值進(jìn)行比較,將狀態(tài)信息分為非緊湊狀態(tài)信息和緊湊狀態(tài) 信息。在裝置初始化時,將緊湊狀態(tài)信息存儲在DRAM32中,將非緊湊狀態(tài) 信息存儲在SRAM33中。
假定設(shè)定的轉(zhuǎn)移邊個數(shù)閾值為8,可以設(shè)置BRAM31中的嵌入式內(nèi)存池的 個數(shù)為8,由于狀態(tài)本身的信息需要占用l個內(nèi)存池單元,剩下的7個內(nèi)存池單 元用于存儲狀態(tài)信息對應(yīng)的轉(zhuǎn)移邊。例如有4條轉(zhuǎn)移邊的狀態(tài)會占用連續(xù)的 5個內(nèi)存池單元。從狀態(tài)信息對應(yīng)的內(nèi)存池單元開始,連續(xù)8個內(nèi)存池單元同 時依次送往比較器342進(jìn)行比較,由比較器342決定哪條轉(zhuǎn)移邊是有效的。對 于轉(zhuǎn)移邊數(shù)目在249-255之間的狀態(tài),可以先對轉(zhuǎn)移邊數(shù)目進(jìn)行取反,減少轉(zhuǎn) 移邊,將其轉(zhuǎn)移邊數(shù)目轉(zhuǎn)換到l-7之間。例如[Aabc]這樣的正則表達(dá)式會產(chǎn)生 253條轉(zhuǎn)移邊,只要存儲a、 b、 c三個字符對應(yīng)的轉(zhuǎn)移邊,在轉(zhuǎn)移邊上加上一個 "不相等有效"標(biāo)記,就可以節(jié)省大量存儲空間。
本發(fā)明實(shí)施例在對轉(zhuǎn)移邊信息進(jìn)行存儲,通過編譯工具生成DFA時,直接將目的狀態(tài)編號替換成目的狀態(tài)的存儲地址,采用直接尋址方式,簡化了 引擎獲得狀態(tài)信息的過程。
進(jìn)行匹配操作前,引擎34根據(jù)規(guī)則編號將存在DRAM32中的信息一次讀 入到BRAM 31中,在匹配時引擎34可以 一次從BRAM 31中讀取一個緊湊狀態(tài) 的所有轉(zhuǎn)移邊信息并進(jìn)行比較;引擎34以特定字符作為索引直接讀取非緊湊 狀態(tài)的轉(zhuǎn)移邊信息進(jìn)行比較。
圖3中給出的BRAM31、 DRAM32、 SRAM33只是給出了本發(fā)明實(shí)現(xiàn)存 儲的一種實(shí)施例,但本發(fā)明實(shí)施例并不局限于此。本發(fā)明實(shí)施例不限定使用 何種存儲器件,或者是否使用同一種存儲器件來存儲兩種狀態(tài)。使用的存儲 器件不同,并不影響本發(fā)明實(shí)施例的實(shí)現(xiàn)。同樣,采用不同的器件(如ASIC、 其他存儲器件),或者增加實(shí)現(xiàn)其他功能的模塊,改變模塊的名稱和模塊間 交互的信息,也不會影響本發(fā)明實(shí)施例的實(shí)現(xiàn)。
上述字符串匹配裝置的工作流程示意圖如圖4所示,具體包括
步驟S401,引擎34初始化,將所有DFA的非緊湊狀態(tài)信息存儲到SRAM33 中,并將所有DFA的緊湊狀態(tài)信息存儲到DRAM 32中。
步驟S402,引擎34通過網(wǎng)口控制模塊(圖3中省略)接收需要匹配的數(shù)據(jù) 報文和規(guī)則編號,將該數(shù)據(jù)報文存儲在報文緩存模塊341中,并將需要匹配的 規(guī)則編號送給控制器343。
步驟S403,控制器343根據(jù)規(guī)則編號查詢狀態(tài)機(jī)信息存儲模塊312,獲得 與該規(guī)則編號對應(yīng)的DFA的緊湊狀態(tài)信息在DRAM32上的起始地址和大小。
步驟S404,控制器343檢查所述起始地址對應(yīng)的狀態(tài)信息是否在狀態(tài)機(jī)緩 存模塊311中。如果該狀態(tài)信息在狀態(tài)機(jī)緩存模塊311中,則執(zhí)行步驟S406; 如果該狀態(tài)信息不在狀態(tài)機(jī)緩存模塊311中,則執(zhí)行步驟S405。
步驟S405,控制器343根據(jù)緊湊狀態(tài)信息在DRAM32上的起始地址和大 小,在DRAM32中查找DFA對應(yīng)的緊湊狀態(tài)信息,并將該DFA的所有緊湊狀 態(tài)信息加載到狀態(tài)機(jī)緩存模塊311中,執(zhí)行步驟S406。
步驟S406,控制器343將該起始地址設(shè)置為目的地址,從狀態(tài)機(jī)緩存模塊 311中讀取起始狀態(tài)信息作為當(dāng)前狀態(tài)送給比較器342;同時控制器343通知比較器342從報文緩存模塊341中取數(shù)據(jù)報文準(zhǔn)備進(jìn)行比較,執(zhí)行步驟S407。
步驟S407,比較器342判斷當(dāng)前狀態(tài)的匹配標(biāo)記,如果是匹配狀態(tài)則設(shè)置 比較結(jié)果為匹配,跳轉(zhuǎn)到步驟S413;否則執(zhí)行步驟S408。
步驟S408,比較器342比較數(shù)據(jù)報文的當(dāng)前字符和當(dāng)前狀態(tài)的轉(zhuǎn)移邊信息 中的字符是否匹配。
如果當(dāng)前狀態(tài)信息來自狀態(tài)機(jī)緩存模塊311 ,比較器342將數(shù)據(jù)報文的當(dāng) 前字符和該狀態(tài)信息的所有轉(zhuǎn)移邊信息中的字符同時進(jìn)行比較;如果當(dāng)前狀 態(tài)信息來自SRAM 33,比較器342將該數(shù)據(jù)報文的當(dāng)前字符和轉(zhuǎn)移邊信息中的 字符進(jìn)行比較。如果該數(shù)據(jù)報文的當(dāng)前字符與轉(zhuǎn)移邊信息中的字符不能匹酉己, 設(shè)置比較結(jié)果為不匹配,跳轉(zhuǎn)到步驟S413;如果該數(shù)據(jù)報文的當(dāng)前字符與轉(zhuǎn) 移邊信息中的字符能夠匹配,則才艮據(jù)該轉(zhuǎn)移邊信息中的字符和當(dāng)前狀態(tài)確定 目的狀態(tài)的存儲地址,并將該目的狀態(tài)的存儲地址發(fā)送給控制器343,執(zhí)行步 驟S409。
步驟S409,控制器343根據(jù)目的狀態(tài)的存儲地址,判斷目的狀態(tài)信息是否 存儲在狀態(tài)緩存模塊311中。當(dāng)目的狀態(tài)信息存儲在狀態(tài)緩存模塊311時,執(zhí) 行步驟S410;當(dāng)目的狀態(tài)信息存儲在SRAM33時,執(zhí)行步驟S411。
步驟S410,控制器343從狀態(tài)機(jī)緩存模塊311中一次讀取目的狀態(tài)的匹配 標(biāo)記和所有轉(zhuǎn)移邊信息作為當(dāng)前狀態(tài),執(zhí)行步驟S412。
步驟S411,控制器343從SRAM33中讀取目的狀態(tài)的匹配標(biāo)記和對應(yīng)當(dāng)前 字符的一條轉(zhuǎn)移邊信息作為當(dāng)前狀態(tài),執(zhí)行步驟S412。
步驟S412,如果當(dāng)前字符已經(jīng)是數(shù)據(jù)報文的最后一個字符,則設(shè)置比較 結(jié)果為不匹配,跳轉(zhuǎn)到步驟S413;否則取數(shù)據(jù)報文的下一個字符作為當(dāng)前字 符,跳轉(zhuǎn)到步驟S407。
步驟413,流程結(jié)束,輸出比較結(jié)果。該比較結(jié)果具體可以為接收的數(shù) 據(jù)報文與輸入的規(guī)則編號所對應(yīng)的規(guī)則匹配或不匹配。
上述步驟只是作為一種實(shí)施例來說明利用分類狀態(tài)信息進(jìn)行字符串匹配 的可行性,具體實(shí)現(xiàn)時有可能對其中的步驟進(jìn)行調(diào)整,如增加或刪除一些步 驟,或調(diào)整某些步驟中所做的工作。
13上述字符串匹配方法和裝置,對狀態(tài)機(jī)的狀態(tài)進(jìn)行統(tǒng)計觀察,針對不同 的狀態(tài)采用不同的存儲方法,既壓縮了整個報文匹配空間,使之能夠滿足當(dāng) 前存儲器件的容量限制,又保證了整個裝置在進(jìn)行^^艮文匹配操作時能夠有較 高的處理性能。
如圖5所示,為本發(fā)明實(shí)施例狀態(tài)信息的編譯方法的流程圖,包括 步驟S501,將正則表達(dá)式規(guī)則轉(zhuǎn)換為狀態(tài)機(jī)。
步驟S502,掃描狀態(tài)機(jī)的每一個狀態(tài)信息,才艮據(jù)預(yù)設(shè)的狀態(tài)屬性閾值對 該狀態(tài)信息進(jìn)行分類。
步驟S503,采用不同存儲方式存儲分類后的每類狀態(tài)信息,不同存儲方 式的空間效率不同。
如圖6所示,為本發(fā)明實(shí)施例狀態(tài)信息的編譯工具的結(jié)構(gòu)圖,包括
轉(zhuǎn)換模塊61,用于將正則表達(dá)式規(guī)則轉(zhuǎn)換為狀態(tài)機(jī);
分類模塊62,用于掃描轉(zhuǎn)換模塊61轉(zhuǎn)換的狀態(tài)機(jī)的每一個狀態(tài)信息,根 據(jù)預(yù)設(shè)的狀態(tài)屬性閾值對該狀態(tài)信息進(jìn)行分類;
存儲模塊63,用于采用不同存儲方式存儲分類后的每類狀態(tài)信息,不同 存儲方式的空間效率不同。
本發(fā)明實(shí)施例中以轉(zhuǎn)移邊個數(shù)作為狀態(tài)屬性,用來區(qū)分狀態(tài)。在實(shí)際實(shí) 現(xiàn)時,其他的狀態(tài)屬性,比如狀態(tài)的訪問頻度、狀態(tài)和開始狀態(tài)間的距離等 也可以作為區(qū)分狀態(tài)的依據(jù)。也可以將多個狀態(tài)屬性組合起來作為區(qū)分狀態(tài) 的依據(jù)。使用不同的狀態(tài)屬性,或者使用狀態(tài)屬性的個數(shù)不同,不影響本發(fā) 明實(shí)施例的實(shí)現(xiàn)。
在實(shí)際應(yīng)用中,狀態(tài)不僅包括轉(zhuǎn)移邊屬性字段,還包括其他的屬性字段, 比如標(biāo)識是否為匹配狀態(tài)的標(biāo)記字段等。這些信息是完整的狀態(tài)必須具有的, 在不同應(yīng)用中可能有所區(qū)別。因?yàn)檫@些信息和本發(fā)明用于分類的狀態(tài)屬性無 關(guān),在說明書中省略了。
本發(fā)明實(shí)施例中將狀態(tài)按照轉(zhuǎn)移邊數(shù)區(qū)分成兩類,^f旦是本發(fā)明實(shí)施例并 不局限于此,分類數(shù)目的不同并不影響本發(fā)明實(shí)施例的實(shí)現(xiàn)。
本發(fā)明實(shí)施例對不同狀態(tài)的信息使用不同的存儲方式進(jìn)行存儲,對緊湊
14狀態(tài)信息使用空間效率較高的存儲方式進(jìn)行存儲,以達(dá)到節(jié)省存儲空間的目 的。實(shí)施例中可以采用鄰接表的形式來存儲緊湊狀態(tài)信息,也可以使用其他 的壓縮方法來存儲緊湊狀態(tài)信息,比如將正則表達(dá)式中的字符分類替換為特 殊編碼字符,或者將基于字符比較的狀態(tài)機(jī)劃分為基于比特位或比特位的組 合進(jìn)行比較的多個狀態(tài)機(jī)以減少所需存儲空間。因使用其他存儲方法造成的 存儲格式的不同,不影響本發(fā)明實(shí)施例的實(shí)現(xiàn)。
本發(fā)明實(shí)施例提出的字符串匹配方法還可應(yīng)用于網(wǎng)絡(luò)環(huán)境下高速對數(shù)據(jù)
報文進(jìn)行匹配的情況,在搜索引擎、數(shù)據(jù)庫^r索、自然語言理解等其他使用 狀態(tài)機(jī)的場景中,狀態(tài)機(jī)一般不是用作字符比較,但是上述場景中的狀態(tài)機(jī) 都可以分為"當(dāng)前狀態(tài)"和"目的狀態(tài)"兩種,也都有在滿足一定條件下發(fā) 生從"當(dāng)前狀態(tài)"到"目的狀態(tài)"進(jìn)行狀態(tài)遷移的行為。因此本發(fā)明實(shí)施例 的技術(shù)方案同樣適用于上述場景。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā) 明可以通過硬件實(shí)現(xiàn),也可以借助軟件加必要的通用^5更件平臺的方式來實(shí)現(xiàn)。 基于這樣的理解,本發(fā)明的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟 件產(chǎn)品可以存儲在一個非易失性存儲介質(zhì)(可以是CD-ROM, U盤,移動硬 盤等)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服 務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實(shí)施例所述的方法。
本領(lǐng)域技術(shù)人員可以理解附圖只是一個優(yōu)選實(shí)施例的示意圖,附圖中的 模塊或流程并不 一 定是實(shí)施本發(fā)明所必須的。
本領(lǐng)域技術(shù)人員可以理解實(shí)施例中的裝置中的模塊可以按照實(shí)施例描述 進(jìn)行分布于實(shí)施例的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實(shí)施例的一 個或多個裝置中。上述實(shí)施例的模塊可以合并為一個模塊,也可以進(jìn)一步拆 分成多個子模塊。
上述本發(fā)明實(shí)施例序號僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
以上公開的僅為本發(fā)明的幾個具體實(shí)施例,但是,本發(fā)明并非局限于此, 任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本發(fā)明的保護(hù)范圍。
權(quán)利要求
1、一種字符串匹配方法,其特征在于,包括根據(jù)預(yù)設(shè)的狀態(tài)屬性閾值對狀態(tài)信息進(jìn)行分類;采用不同存儲方式存儲分類后的每類狀態(tài)信息,所述不同存儲方式的空間效率不同;利用存儲的狀態(tài)信息對接收的字符串進(jìn)行匹配操作。
2、 如權(quán)利要求1所述字符串匹配方法,其特征在于,所述利用存儲的狀 態(tài)信息對接收的字符串進(jìn)行匹配操作包括根據(jù)進(jìn)行匹配操作的表示規(guī)則信息,獲得所述表示規(guī)則信息對應(yīng)的狀態(tài) 信息;當(dāng)所述字符串的當(dāng)前字符和所述狀態(tài)信息的當(dāng)前字符匹配時,才艮據(jù)所述 狀態(tài)信息的當(dāng)前字符和當(dāng)前狀態(tài)確定目的狀態(tài)的存儲地址;根據(jù)所述目的狀態(tài)的存儲地址,確定所述目的狀態(tài)信息的存儲位置,并 根據(jù)所述存儲位置讀取所述目的狀態(tài)信息進(jìn)行下一個字符的匹配。
3、 如權(quán)利要求2所述字符串匹配方法,其特征在于,所述根據(jù)存儲位置 讀取所述目的狀態(tài)信息進(jìn)行下一個字符的匹配具體包括當(dāng)所述目的狀態(tài)信息存儲在片內(nèi)存儲器時,從所述片內(nèi)存儲器中讀取所 述目的狀態(tài)信息的所有信息進(jìn)行下一個字符的匹配;或者,當(dāng)所述目的狀態(tài)信息存儲在片外存儲器時,從所述片外存儲器中讀取所 述目的狀態(tài)信息的一條信息進(jìn)行下一個字符的匹配。
4、 如權(quán)利要求1所述字符串匹配方法,其特征在于,所述狀態(tài)屬性具體 為轉(zhuǎn)移邊數(shù)目和狀態(tài)信息的訪問頻度,以及當(dāng)前狀態(tài)和開始狀態(tài)間的距離 中的一種或多種。
5、 一種字符串匹配裝置,其特征在于,包括分類模塊,用于根據(jù)預(yù)設(shè)的狀態(tài)屬性闊值對狀態(tài)信息進(jìn)行分類; 存儲模塊,用于采用不同存儲方式存儲所述分類模塊分類后的每類狀態(tài)信息,所述不同存儲方式的空間效率不同;匹配模塊,用于利用所述存儲模塊存儲的狀態(tài)信息對接收的字符串進(jìn)行匹配操作。
6、 如權(quán)利要求5所述字符串匹配裝置,其特征在于,所述匹配模塊包括 狀態(tài)信息獲取子模塊,用于根據(jù)進(jìn)行匹配操作的表示規(guī)則信息,獲得所述表示規(guī)則信息對應(yīng)的第一類狀態(tài)信息;存儲地址確定子模塊,用于當(dāng)所述接收的字符串的當(dāng)前字符和狀態(tài)信息 的當(dāng)前字符匹配時,才艮據(jù)狀態(tài)信息的當(dāng)前字符和當(dāng)前狀態(tài)確定目的狀態(tài)的存 儲地址;信息讀取子模塊,用于根據(jù)所述存儲地址確定子模塊確定的目的狀態(tài)的 存儲地址,確定所述目的狀態(tài)信息的存儲位置,并根據(jù)所述存儲位置讀取目 的狀態(tài)信息;字符比較子模塊,用于根據(jù)所述信息讀取子模塊讀取的目的狀態(tài)信息進(jìn) 行下一個字符的匹配。
7、 一種狀態(tài)信息的編譯方法,其特征在于,包括 將正則表達(dá)式規(guī)則轉(zhuǎn)換為狀態(tài)機(jī);掃描狀態(tài)機(jī)的每一個狀態(tài)信息,根據(jù)預(yù)設(shè)的狀態(tài)屬性閾值對所述狀態(tài)信 息進(jìn)行分類;采用不同存儲方式存儲分類后的每類狀態(tài)信息,所述不同存儲方式的空 間效率不同。
8、 如權(quán)利要求7所述狀態(tài)信息的編譯方法,其特征在于,所述狀態(tài)屬性 具體為轉(zhuǎn)移邊數(shù)目和狀態(tài)信息的訪問頻度,以及當(dāng)前狀態(tài)和開始狀態(tài)間的 距離中的一種或多種。
9、 一種狀態(tài)信息的編譯工具,其特征在于,包括 轉(zhuǎn)換模塊,用于將正則表達(dá)式規(guī)則轉(zhuǎn)換為狀態(tài)機(jī);分類模塊,用于掃描所述轉(zhuǎn)換模塊轉(zhuǎn)換的狀態(tài)機(jī)的每一個狀態(tài)信息,根 據(jù)預(yù)設(shè)的狀態(tài)屬性閾值對所述狀態(tài)信息進(jìn)行分類;存儲模塊,用于采用不同存儲方式存儲分類后的每類狀態(tài)信息,所述不 同存儲方式的空間效率不同。
全文摘要
本發(fā)明實(shí)施例公開了一種字符串匹配方法和裝置,所述字符串匹配方法包括根據(jù)預(yù)設(shè)的狀態(tài)屬性閾值對狀態(tài)信息進(jìn)行分類;采用不同存儲方式存儲分類后的每類狀態(tài)信息,所述不同存儲方式的空間效率不同;利用存儲的狀態(tài)信息對接收的字符串進(jìn)行匹配操作。本發(fā)明實(shí)施例對狀態(tài)信息進(jìn)行分類,針對不同的狀態(tài)采用不同的存儲方法,既壓縮了整個狀態(tài)信息的存儲空間,使之能夠滿足當(dāng)前存儲器件的容量限制,又保證了在進(jìn)行字符串匹配操作時能夠有較高的處理速度。
文檔編號G06F17/30GK101650718SQ20081014743
公開日2010年2月17日 申請日期2008年8月15日 優(yōu)先權(quán)日2008年8月15日
發(fā)明者勇 王, 浩 王, 趙玉超 申請人:華為技術(shù)有限公司