專利名稱:一種規(guī)則匹配方法、裝置及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù)領(lǐng)域,更具體地說,涉及一種規(guī)則匹配方法、裝置及系統(tǒng)。
背景技術(shù):
目前,IPdnternet Protocol,互聯(lián)網(wǎng)協(xié)議)業(yè)務(wù)的爆炸性發(fā)展及寬帶業(yè)務(wù)的迅猛 增長,給運(yùn)營商帶來了機(jī)遇的同時也帶來了挑戰(zhàn)。DPI (De印Packetlnspection,深度包檢 測)技術(shù)作為一種網(wǎng)絡(luò)設(shè)備增強(qiáng)的過濾器,將用戶管理、安全控制、精細(xì)的業(yè)務(wù)控制等能力 有機(jī)地集成在一起。實(shí)現(xiàn)各類業(yè)務(wù)的動態(tài)感知、策略控制、QoS(Quality of Service,服務(wù) 質(zhì)量)和業(yè)務(wù)的安全保障等功能,它既為運(yùn)營商提供一個電信業(yè)務(wù)的基礎(chǔ)運(yùn)營平臺,也可 以降低運(yùn)營商的資本性支出與運(yùn)營支出。DPI技術(shù)的關(guān)鍵作用是為了識別出網(wǎng)絡(luò)中數(shù)據(jù)的應(yīng)用類別。在DPI技術(shù)中,用于識 別出網(wǎng)絡(luò)中數(shù)據(jù)的應(yīng)用類別的識別技術(shù)包含特征字識別、應(yīng)用層網(wǎng)關(guān)識別、行為模式識別 等。在這些識別技術(shù)中,特征字識別技術(shù)成為目前識別技術(shù)的主要方法之一,而特征字識別 技術(shù)中,規(guī)則匹配技術(shù)是特征字識別的關(guān)鍵技術(shù)。在現(xiàn)有的技術(shù)方案中,規(guī)則匹配技術(shù)的實(shí)現(xiàn)由一個匹配引擎和一個狀態(tài)機(jī)配合完 成。其中,匹配引擎為一個整體的匹配引擎,狀態(tài)機(jī)為由所有規(guī)則組成的規(guī)則集通過編譯器 統(tǒng)一編譯成的一個樹形或網(wǎng)型結(jié)構(gòu)的狀態(tài)機(jī)。上述規(guī)則集包括純字符串規(guī)則、正則表達(dá)式 規(guī)則以及正則表達(dá)式和字符串的混合規(guī)則等多種類型。在對數(shù)據(jù)進(jìn)行匹配規(guī)則時,通過匹 配弓I擎按照所述狀態(tài)機(jī)來實(shí)現(xiàn)規(guī)則匹配。然而,發(fā)明人發(fā)現(xiàn),上述方案至少存在以下問題上述方案中,隨著業(yè)務(wù)發(fā)展,協(xié)議類型越來越多,流量越來越大,協(xié)議特征字的規(guī) 則變得越來越復(fù)雜,規(guī)則數(shù)量越來越多。所以,狀態(tài)機(jī)容量會越來越大,而且分支也越來越 多、狀態(tài)深度越來越大。由于狀態(tài)機(jī)容量大,分支多、狀態(tài)深度大,使得匹配時查找狀態(tài)機(jī)中 所需的規(guī)則時耗費(fèi)系統(tǒng)資源和時間多、性能差,越來越不能適應(yīng)匹配大流量數(shù)據(jù)的要求。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明實(shí)施例提供一種規(guī)則匹配方法、裝置及系統(tǒng),以解決現(xiàn)有技術(shù)存 在的系統(tǒng)資源的耗費(fèi)和時間多、性能較低的問題。本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的一種規(guī)則匹配方法,包括獲取被匹配數(shù)據(jù)的特征特性;根據(jù)所述被匹配數(shù)據(jù)的特征特性從多個狀態(tài)機(jī)中確定目標(biāo)狀態(tài)機(jī);所述多個狀態(tài) 機(jī)分別由多個子規(guī)則集編譯得到,所述多個子規(guī)則集根據(jù)規(guī)則的不同特征特性劃分得到, 每個子規(guī)則集的特征特性用于分別標(biāo)識與其對應(yīng)的狀態(tài)機(jī);通過匹配引擎按照所述目標(biāo)狀態(tài)機(jī)對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配。一種規(guī)則匹配裝置,包括
特征特性獲取單元,用于獲取被匹配數(shù)據(jù)的特征特性;目標(biāo)狀態(tài)機(jī)確定單元,用于根據(jù)所述被匹配數(shù)據(jù)的特征特性確定多個狀態(tài)機(jī)中的一個為目標(biāo)狀態(tài)機(jī);所述多個狀態(tài)機(jī)分別由多個子規(guī)則集編譯得到,所述多個子規(guī)則集由 規(guī)則根據(jù)規(guī)則不同的特征特性劃分得到,每個子規(guī)則集的特征特性用于分別標(biāo)識每個狀態(tài) 機(jī);匹配引擎,用于按照所述目標(biāo)狀態(tài)機(jī)對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配。一種規(guī)則匹配系統(tǒng),包括,規(guī)則匹配裝置以及狀態(tài)機(jī)生成裝置;所述狀態(tài)機(jī)生成裝置包括特征特性劃分單元,用于根據(jù)規(guī)則的不同特征特性將規(guī)則劃分得到多個子規(guī)則 集;編譯單元,用于對所述特征特性劃分單元劃分得到的所述子規(guī)則集分別編譯得到 多個狀態(tài)機(jī),每個子規(guī)則集的特征特性用于分別標(biāo)識每個狀態(tài)機(jī);所述規(guī)則匹配裝置包括特征特性獲取單元用于獲取被匹配數(shù)據(jù)的特征特性;目標(biāo)狀態(tài)機(jī)確定單元用于根據(jù)所述被匹配數(shù)據(jù)的特征特性確定多個狀態(tài)機(jī)中的 一個為目標(biāo)狀態(tài)機(jī);匹配引擎,用于按照所述目標(biāo)狀態(tài)機(jī)對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配。從上述的技術(shù)方案可以看出,本發(fā)明實(shí)施例將所需要的規(guī)則按照其不同的特征特 性類型分為了多個子規(guī)則集,編譯每個子規(guī)則集以生成與之對應(yīng)的狀態(tài)機(jī)。在進(jìn)行規(guī)則匹 配時,根據(jù)被匹配數(shù)據(jù)的不同特征特性,查找相應(yīng)的狀態(tài)機(jī)并啟動設(shè)定匹配引擎。由于本發(fā) 明實(shí)施例將現(xiàn)有技術(shù)中的整體的狀態(tài)機(jī)劃分成多個相對較小的狀態(tài)機(jī),有效地減小了狀態(tài) 機(jī)中的規(guī)則集的大小,使得狀態(tài)機(jī)的分支減少、狀態(tài)深度變小。從而可以有效地減少規(guī)則匹 配的匹配周期,節(jié)省了系統(tǒng)資源的耗費(fèi)和時間,進(jìn)而提高了匹配效能。
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可 以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例一種規(guī)則匹配方法的流程圖;圖2為本發(fā)明實(shí)施例一種規(guī)則匹配裝置的結(jié)構(gòu)示意圖;圖3為本發(fā)明實(shí)施例一種規(guī)則匹配系統(tǒng)結(jié)構(gòu)示意圖;圖4為本發(fā)明實(shí)施例一種規(guī)則匹配系統(tǒng)中狀態(tài)機(jī)生成單元結(jié)構(gòu)示意圖;圖5為本發(fā)明實(shí)施例一種規(guī)則匹配系統(tǒng)中特征特性劃分單元結(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ù)的范圍。本發(fā)明實(shí)施例公開了一種規(guī)則匹配方法,以解決現(xiàn)有技術(shù)存在的系統(tǒng)資源的耗費(fèi) 和時間多、性能較低的問題。具體過程如圖1所示,包括以下步驟步驟S11、獲取被匹配數(shù)據(jù)的特征特性; 在本發(fā)明實(shí)施例中,當(dāng)在對被匹配數(shù)據(jù)進(jìn)行規(guī)則特征匹配時,獲取被匹配數(shù)據(jù)的 特征特性。從而,可以確定被匹配數(shù)據(jù)的特征特性是屬于諸如特殊符號、表達(dá)式、特殊字符 串或特殊語法的組合等中的哪一種或多種。比如,在本發(fā)明實(shí)施例中,被匹配數(shù)據(jù)可以是一 種表達(dá)式,其特征特性為“表達(dá)式”。步驟S12、根據(jù)所述被匹配數(shù)據(jù)的特征特性從多個狀態(tài)機(jī)中確定目標(biāo)狀態(tài)機(jī);所 述多個狀態(tài)機(jī)分別由多個子規(guī)則集編譯得到,所述多個子規(guī)則集根據(jù)規(guī)則的不同特征特性 劃分得到,每個子規(guī)則集的特征特性用于分別標(biāo)識與其對應(yīng)的狀態(tài)機(jī);在本發(fā)明實(shí)施例中,預(yù)先將所有規(guī)則匹配所用到的規(guī)則按照其特征特性的不同進(jìn) 行分類形成子規(guī)則集。所述特征特性可以是規(guī)則的屬性,這樣,就可以按照規(guī)則的屬性的不 同劃分子規(guī)則集,比如,可以是特殊符號、表達(dá)式、特殊字符串或特殊語法的組合等。比如, 有的規(guī)則屬于特殊符號,這一類的規(guī)則被劃分到特征特性為特殊符號的子規(guī)則集中;同理, 有的規(guī)則屬于表達(dá)式,有的規(guī)則屬于特殊字符串,有的規(guī)則屬于特殊語法的組合,將這些規(guī) 則分別根據(jù)其所屬的特征特性劃分到相應(yīng)的子規(guī)則集中。在本發(fā)明實(shí)施例中,同時具有多 種屬性的規(guī)則還可以同時屬于其他的特征特性的子規(guī)則集。在本發(fā)明實(shí)施例中,將具有相同特征特性的規(guī)則劃分到同一子規(guī)則集中,從而分 別形成所有的規(guī)則的特征特性的各種子規(guī)則集。在根據(jù)特征特性的不同將所有規(guī)則進(jìn)行分類并將其劃入相應(yīng)的子規(guī)則集中之后, 將每個子規(guī)則集分別編譯成狀態(tài)機(jī),由于每個狀態(tài)機(jī)中的規(guī)則都具有相同的特征特性,所 述相同的特征特性即為該狀態(tài)機(jī)的特征特性,而每個狀態(tài)機(jī)的特征特性都不相同,所以,使 用特征特性可以標(biāo)識狀態(tài)機(jī)。也就是說,每個狀態(tài)機(jī)可以通過其規(guī)則子集特征特性的不同 而區(qū)分,比如可以分為特殊符號的狀態(tài)機(jī)、表達(dá)式的狀態(tài)機(jī)等。由于有的規(guī)則有可能同時具 有多個特征特性,所以狀態(tài)機(jī)也可以同時具有多種特征特性,比如某一規(guī)則含有xyzkj,這 種特征屬于特殊符號;同時,它還含有ab. *cd,這種特征屬于表達(dá)式,因此這時的狀態(tài)機(jī)同 時屬于特殊字符和表達(dá)式兩種情況。因?yàn)?,根?jù)規(guī)則的特征特性不同劃分為多個子規(guī)則集,將每個子規(guī)則集分別編譯 成狀態(tài)機(jī),每個子規(guī)則集的特征特性用于標(biāo)識狀態(tài)機(jī);所以,特征特性與狀態(tài)機(jī)之間有對應(yīng) 關(guān)系。另外,在使用匹配引擎進(jìn)行規(guī)則匹配時,由于特征特性可以標(biāo)識狀態(tài)機(jī),所以根據(jù)被 匹配數(shù)據(jù)中的特征特性不同,能夠查找到相應(yīng)的狀態(tài)機(jī),即目標(biāo)狀態(tài)機(jī)。比如,當(dāng)所述被匹 配數(shù)據(jù)為表達(dá)式的時候,可以根據(jù)所述數(shù)據(jù)的特征特性(如表達(dá)式),找到目標(biāo)狀態(tài)機(jī),即, 標(biāo)識為表達(dá)式的表達(dá)式狀態(tài)機(jī)。步驟S13、通過匹配引擎按照所述目標(biāo)狀態(tài)機(jī)對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配。在找到目標(biāo)狀態(tài)機(jī)后,預(yù)設(shè)的匹配引擎按照所述目標(biāo)狀態(tài)機(jī)對所述被匹配數(shù)據(jù)進(jìn) 行規(guī)則匹配。比如,在本發(fā)明實(shí)施例中,可以是由匹配引擎可以按照表達(dá)式狀態(tài)機(jī)對被匹配 的表達(dá)式進(jìn)行規(guī)則匹配。在本發(fā)明實(shí)施例的技術(shù)方案中,分別由規(guī)則分類后的子規(guī)則集形成多個狀態(tài)機(jī),在規(guī)則匹配時,先獲取被匹配數(shù)據(jù)的特征特性,然后使用與所述特征特性相對應(yīng)的狀態(tài)機(jī) 對所述被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配。與現(xiàn)有技術(shù)中使用由所有規(guī)則形成的一個整體的狀態(tài) 機(jī)的技術(shù)方案相比,本發(fā)明實(shí)施例中,由于通過子規(guī)則集形成的狀態(tài)機(jī)的體積較小,所以這 樣的狀態(tài)機(jī)的狀態(tài)分支也較少,狀態(tài)深度也較小,從而使得匹配規(guī)則時的匹配周期較少,進(jìn) 而,有效地提高了匹配規(guī)則時的匹配效能。在本發(fā)明的另一實(shí)施例中,當(dāng)需要更新升級規(guī)則時,可以根據(jù)新規(guī)則的特征特性重新劃分并更新與該新規(guī)則特征特性對應(yīng)的子規(guī)則集,重新編譯更新后的子規(guī)則集生成新 的狀態(tài)機(jī)。在本發(fā)明實(shí)施例中,當(dāng)需要更新規(guī)則的時候,可以根據(jù)新規(guī)則的特征特性更新與 該規(guī)則特征特性對應(yīng)的子規(guī)則集,在需要更新規(guī)則的子規(guī)則集中完成規(guī)則的更新后,只需 要重新編譯更新規(guī)則后的子規(guī)則集,然后生成新的狀態(tài)機(jī)即可完成對狀態(tài)機(jī)的升級。比如, 使用本發(fā)明實(shí)施例的技術(shù)方案,當(dāng)需要加入新的表達(dá)式規(guī)則時,根據(jù)需要加入的新規(guī)則的 特征特性(如表達(dá)式),確定需要更新的子規(guī)則集為表達(dá)式子規(guī)則集;然后更新所述表達(dá)式 子規(guī)則集,重新編譯更新后的表達(dá)式子規(guī)則集,生成新的表達(dá)式狀態(tài)機(jī)。在現(xiàn)有技術(shù)中,要完成對表達(dá)式規(guī)則的增加,需要對包含有所有規(guī)則的整體規(guī)則 集進(jìn)行更新,然后對所述整體規(guī)則集進(jìn)行重新編并生成新的整體狀態(tài)機(jī)。與現(xiàn)有技術(shù)相比, 本發(fā)明實(shí)施例不需要重新編譯沒有更新規(guī)則的子規(guī)則集。本發(fā)明實(shí)施例中更新并編譯的子 規(guī)則集的體積要小于現(xiàn)有技術(shù)中的整體規(guī)則集。所以,在本發(fā)明實(shí)施例中,在對狀態(tài)機(jī)進(jìn)行 升級時,只要重新編譯更新了規(guī)則的子規(guī)則集來生成新的狀態(tài)機(jī)即可實(shí)現(xiàn)升級,不需要像 現(xiàn)有技術(shù)中那樣要對包括了全部規(guī)則的規(guī)則集進(jìn)行編譯。從而節(jié)省了升級狀態(tài)機(jī)時的編譯 時間和系統(tǒng)資源。在本發(fā)明實(shí)施例中,所述設(shè)定匹配引擎可以為多個匹配引擎中與所述目標(biāo)狀態(tài)機(jī) 的特征特性相對應(yīng)的匹配引擎。其中,所述匹配引擎可以為多個。所述多個匹配引擎分別 通過特征特性與目標(biāo)狀態(tài)機(jī)相關(guān)聯(lián),從而,可以在對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配時,根據(jù)目標(biāo) 狀態(tài)機(jī)的特征特性,啟動相應(yīng)的匹配引擎。比如,特征特性為特殊符號、表達(dá)式、特殊字符串 和特殊語法的組合的各個狀態(tài)機(jī),可以分別根據(jù)其特征特性的不同對應(yīng)有匹配引擎。在本 發(fā)明實(shí)施例中,每個狀態(tài)機(jī)都有相應(yīng)的匹配引擎;具體的,狀態(tài)機(jī)可以和與其相應(yīng)的匹配引 擎一一對應(yīng),也可以由全部狀態(tài)機(jī)中的多個狀態(tài)機(jī)對應(yīng)一個匹配引擎。在匹配規(guī)則時,根據(jù)被匹配數(shù)據(jù)的特征特性查找相應(yīng)的目標(biāo)狀態(tài)機(jī)并啟動與所述 狀態(tài)機(jī)對應(yīng)的匹配引擎。比如,被匹配數(shù)據(jù)為表達(dá)式時,目標(biāo)狀態(tài)機(jī)為表達(dá)式狀態(tài)機(jī),由于 表達(dá)式狀態(tài)機(jī)有其所關(guān)聯(lián)的匹配引擎,從而可以啟動相關(guān)聯(lián)的匹配引擎。在本發(fā)明實(shí)施例 中,表達(dá)式狀態(tài)機(jī)與匹配引擎關(guān)聯(lián)具體的方式可以為根據(jù)目標(biāo)狀態(tài)機(jī)的特征特性生成索 引值,所述索引值與所述目標(biāo)狀態(tài)機(jī)關(guān)聯(lián)的匹配引擎相對應(yīng),從而可以在規(guī)則匹配時,通過 所述索引值確定與目標(biāo)狀態(tài)機(jī)相關(guān)聯(lián)的匹配引擎,使用所述匹配引擎配合所述目標(biāo)狀態(tài)機(jī) 對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配。在本發(fā)明實(shí)施例中,通過為每個狀態(tài)機(jī)設(shè)置與其關(guān)聯(lián)的匹配引擎,然后在對數(shù)據(jù) 進(jìn)行規(guī)則匹配時,根據(jù)規(guī)則的特征查找相應(yīng)的狀態(tài)機(jī)并啟動與所述狀態(tài)機(jī)對應(yīng)的匹配引擎。在本發(fā)明實(shí)施例中,所述匹配引擎與所述狀態(tài)機(jī)之間由索引值形成對應(yīng)關(guān)系,具體可以是,索引值可以為將所述狀態(tài)機(jī)特征特性哈希(Hash)取值或循環(huán)冗余校驗(yàn)取值的 結(jié)果。比如,將表達(dá)式狀態(tài)機(jī)的“表達(dá)式”這一特征特性哈希取值,得到的值即可以為索引 值,通過所述索引值與設(shè)定的對應(yīng)匹配引擎相對應(yīng),從而可以將表達(dá)式狀態(tài)機(jī)與設(shè)定的匹 配引擎相關(guān)聯(lián)。本發(fā)明實(shí)施例通過將用于標(biāo)識狀態(tài)機(jī)的特征特性生成索引值,由此可以方便地將 狀態(tài)機(jī)和相應(yīng)的匹配引擎關(guān)聯(lián)起來,從而可以在對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配時,當(dāng)根據(jù)被 匹配數(shù)據(jù)的特征特性確定了目標(biāo)狀態(tài)機(jī)后,可以啟動與所述目標(biāo)狀態(tài)機(jī)相應(yīng)的匹配引擎, 進(jìn)而可以使用所述匹配引擎配合所述目標(biāo)狀態(tài)機(jī)完成對被匹配數(shù)據(jù)的規(guī)則匹配。在本發(fā)明實(shí)施例中,通過為每個狀態(tài)機(jī)設(shè)置關(guān)聯(lián)指定的匹配引擎,使得在規(guī)則匹 配時可以并行運(yùn)行多個匹配引擎,進(jìn)而可以并行對多個被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配。比如,在 被匹配數(shù)據(jù)為多個時,其中包括有特殊字符和表達(dá)式,由于分別設(shè)有特殊字符狀態(tài)機(jī)關(guān)聯(lián) 的匹配引擎和表達(dá)式狀態(tài)機(jī)的匹配引擎時匹配規(guī)則,所以,可以同時進(jìn)行特殊字符規(guī)則匹 配和表達(dá)式規(guī)則匹配。與本發(fā)明的上一實(shí)施例相比,本發(fā)明實(shí)施例因?yàn)榭梢圆⑿械膶Χ鄠€ 具有不同特征特性的被匹配數(shù)據(jù)同時進(jìn)行規(guī)則匹配,從而進(jìn)一步的提高了匹配的性能。
在本發(fā)明的另一實(shí)施例中,上述實(shí)施例中所述多個匹配引擎中包括有需根據(jù)所述 被匹配數(shù)據(jù)的特征特性觸發(fā)激活的匹配引擎。在本發(fā)明實(shí)施例中,可以將使用頻率較少且狀態(tài)為不工作超過設(shè)定時間的匹配引 擎休眠,以降低系統(tǒng)功耗。當(dāng)對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配時,在確定目標(biāo)狀態(tài)機(jī)后,查找目 標(biāo)狀態(tài)機(jī)根據(jù)其特征特性設(shè)有相對應(yīng)的匹配引擎,當(dāng)其所對應(yīng)的匹配引擎的狀態(tài)為休眠 時,激活所述匹配引擎。本發(fā)明實(shí)施例通過將使用頻率較少且狀態(tài)為不工作超過設(shè)定時間的匹配引擎休 眠,并在其被使用到時將其激活的技術(shù)方案,降低了匹配引擎的系統(tǒng)功耗,節(jié)約了系統(tǒng)資 源。在本發(fā)明的另一實(shí)施例中,可以將所述狀態(tài)機(jī)規(guī)則集中多個規(guī)則的相同部分提取 出來;在使用具有相同部分的多個規(guī)則對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配時,先使用相同部分匹 配,然后再使用多個規(guī)則中每個規(guī)則的不相同部分分別匹配。例如,假設(shè)狀態(tài)機(jī)的規(guī)則集中有三條規(guī)則分別為字符串“油^‘^^‘^^”;則可 以將多個規(guī)則的相同部分“a”提取出來,匹配時先匹配“a”,如果不滿足,則后續(xù)不再用這 三個字符串進(jìn)行匹配;如果滿足,則再分別用每個規(guī)則不相同部分(如“bc”、“de”、“fg”) 對被匹配數(shù)據(jù)進(jìn)行匹配,從而不需要每次匹配都用“a”匹配一次。通過提取狀態(tài)機(jī)中的多個規(guī)則的相同部分,使得在對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配 時,只需要使用多個具有相同部分的規(guī)則的相同部分匹配一次,然后分別使用所述多個具 有相同部分的規(guī)則的部分匹配即可。從而避免了使用多個具有相同部分的規(guī)則的相同部分 多次匹配,進(jìn)而提高了匹配效率。在本發(fā)明的另一實(shí)施例中,所述預(yù)先根據(jù)規(guī)則的特征特性不同劃分為多個子 規(guī)則集,包括將引起狀態(tài)爆炸的語法組合的規(guī)則使用NFA(Non-deterministic Finite Automata,非確定有限自動機(jī))的方式處理或?qū)⑺鲆?guī)則進(jìn)行重寫處理,然后根據(jù)處理后 的該規(guī)則的特征特性劃分到相應(yīng)的規(guī)則集中。具體地說,一條或一組規(guī)貝I」,如果它生成的DFA(DeterministicFiniteAutomaton,確定有限自動機(jī))與對應(yīng)的NFA相比較,其狀態(tài)之比呈指數(shù)時,稱之為狀 態(tài)爆炸。比如規(guī)則.*A. *B. *C(. *表示任意個字符,該規(guī)則表示A前面可以有任意個字符, A、B之間、B、C之間也可以有任意個字符),對其本身而言,由于其交互性很強(qiáng),所以當(dāng)其與 其他規(guī)則同處于一個規(guī)則集中時,有可能引起狀態(tài)爆炸。另外,規(guī)則A{m,n}B(表示A后面 可以跟m到η個B),當(dāng)η值較大時,可能引起狀態(tài)爆炸。對于此類規(guī)則,在本發(fā)明實(shí)施例中, 可以集中使用NFA的方式處理。具體地,可以使用計數(shù)器來處理{m,η},這樣,當(dāng)計數(shù)器值在 [m,n]區(qū)間內(nèi)任一值時都符合該語法,即只用一個單元即可實(shí)現(xiàn)原來多分支的情況,不需要 再增加n-m條分支。本發(fā)明實(shí)施例在預(yù)先根據(jù)規(guī)則的特征特性不同劃分為多個子規(guī)則集的時候,可以 將規(guī)則中的引起狀態(tài)爆炸的語法組合的規(guī)則使用NFA的方式處理或?qū)⑺鲆?guī)則進(jìn)行重寫 處理。從而有效地控制狀態(tài)數(shù),節(jié)約存儲容量。在本發(fā)明實(shí)施例中,所述預(yù)先根據(jù)規(guī)則的特征特性不同劃分為多個子規(guī)則集,還 可以包括將由.*和純字符串組成的規(guī)則采用.*切割方式處理,然后將該規(guī)則劃分到純字 符串的規(guī)則集中。
比如,有兩條規(guī)則P和Q,其中,P = (·*Α· *Β· *C),Q = (· *Χ· *Υ· *Ζ)。假設(shè)字符串 P的長度(除.*外)為s,P中有η個.*(如規(guī)則P中現(xiàn)在有3個.*,即η = 3)。在Α,B, C與X,Y,Z這些.*分隔的子串其前綴都不相同的情況下,Q中每個子串(Χ,Υ,Ζ)每增加一 個字符(例如X原先為ab,現(xiàn)在增加一個字符為abc),狀態(tài)數(shù)增加η個;每增加一個.* (如 原來P從(.*AB. *C)變?yōu)?.*A. *B. *C),A、B間增加了一個.*),狀態(tài)數(shù)增加(s+Ι)個。如 果規(guī)則集中有k條規(guī)則含有.*,且每條有χ個.*,則這些規(guī)則生成的DFA有xk個狀態(tài)。對 于此類規(guī)則(只含有.*語法的正則),在本發(fā)明實(shí)施例中,采用.*切割方式將字符串切割 為A,B, C,X,Y,Z六個子串,再將這些子串一起進(jìn)行編譯,因?yàn)樵瓉硪?guī)則中的.*表示任意 字符,因此,采用切割后的子串匹配也能起到與原來規(guī)則同樣的匹配效果。因?yàn)橹皇O伦址?串,所以編譯速度會有很大提升。在本發(fā)明實(shí)施例中,還可以通過每個子串的位置(如子串 在報文中的位置,或子串相互之間的位置等)進(jìn)行標(biāo)記,從而保證了最終整體匹配的精確。在本發(fā)明實(shí)施例中,通過使用.*切割方式對由.*和純字符串組成的規(guī)則進(jìn)行編 譯前的預(yù)處理,將正則表達(dá)式間接轉(zhuǎn)換為了字符串進(jìn)行處理,從而降低了編譯器的消耗,提 高了匹配引擎的匹配性能。在本發(fā)明實(shí)施例中,所述預(yù)先根據(jù)規(guī)則的特征特性不同劃分為多個子規(guī)則集,還 可以包括將語法使用狀態(tài)機(jī)耗費(fèi)資源多的規(guī)則,劃分到一個規(guī)則集中,并使用獨(dú)立資源處 理該規(guī)則集中的規(guī)則。所述獨(dú)立資源可以包括與非門或計數(shù)器等。例如,規(guī)則[a 0](表示非0),在本發(fā) 明實(shí)施例中,可以使用非門實(shí)現(xiàn),即,通過使用一個非門加一個比較器(與常量0的比較)。 通過將所述獨(dú)立的資源可以作為公共資源給多個匹配引擎使用。從而可以減少匹配規(guī)則時 對狀態(tài)機(jī)資源的耗費(fèi),提高了匹配引擎的匹配性能。參見圖2,本發(fā)明實(shí)施例還提供了一種規(guī)則匹配裝置30,包括特征特性獲取單元 31、目標(biāo)狀態(tài)機(jī)確定單元32和匹配引擎33。所述特征特性獲取單元31,用于獲取被匹配數(shù)據(jù)的特征特性;
所述目標(biāo)狀態(tài)機(jī)確定單元32,用于根據(jù)所述被匹配數(shù)據(jù)的特征特性確定多個狀態(tài) 機(jī)中的一個為目標(biāo)狀態(tài)機(jī);所述多個狀態(tài)機(jī)分別由多個子規(guī)則集編譯得到,所述多個子規(guī) 則集根據(jù)規(guī)則不同的特征特性劃分得到,每個子規(guī)則集的特征特性用于分別標(biāo)識每個狀態(tài) 機(jī);匹配引擎33 用于按照所述目標(biāo)狀態(tài)機(jī)對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配。其中,在本發(fā)明實(shí)施例中,當(dāng)在對被匹配數(shù)據(jù)進(jìn)行規(guī)則特征匹配時,特征特性獲取單元31獲取被匹配數(shù)據(jù)的特征特性。從而,可以確定被匹配數(shù)據(jù)的特征特性是屬于諸如特 殊符號、表達(dá)式、特殊字符串或特殊語法的組合等中的哪一種或多種。本發(fā)明實(shí)施例中使用到的狀態(tài)機(jī)由多個子規(guī)則集編譯得到,所述多個子規(guī)則集根 據(jù)規(guī)則不同的特征特性劃分得到,例如特征特性可以是特殊符號、表達(dá)式等。此外,本發(fā)明 實(shí)施例還可以對子規(guī)則集進(jìn)行更新,生成新的狀態(tài)機(jī),來滿足匹配需求。本發(fā)明實(shí)施例中,匹配引擎33可以是一個,或者多個,每個匹配引擎可以與一個 或多個狀態(tài)機(jī)進(jìn)行對應(yīng)。當(dāng)存在多個匹配引擎時,可以并行運(yùn)行多個匹配引擎以加快匹配 速度;同時,在平時也可以將使用頻率較少且狀態(tài)為不工作超過設(shè)定時間的匹配引擎休眠, 以達(dá)到降低系統(tǒng)功耗的目的;在需要使用的時候再激活相關(guān)匹配引擎。匹配引擎在進(jìn)行規(guī)則匹配時,可以提取所述狀態(tài)機(jī)的規(guī)則集中具有相同部分的多 個規(guī)則的相同部分,在使用所述具有相同部分的多個規(guī)則進(jìn)行規(guī)則匹配時,先使用所述相 同部分匹配一次,然后使用所述多個規(guī)則中每個規(guī)則的不相同部分分別匹配。在本發(fā)明實(shí)施例的技術(shù)方案中,分別由規(guī)則分類后的子規(guī)則集形成多個狀態(tài)機(jī), 在規(guī)則匹配時,先獲取被匹配數(shù)據(jù)的特征特性,然后使用與所述特征特性相對應(yīng)的狀態(tài)機(jī) 對所述被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配。與現(xiàn)有技術(shù)中使用由所有規(guī)則形成的一個整體的狀態(tài)機(jī) 的技術(shù)方案相比,本發(fā)明實(shí)施例中,由子規(guī)則集形成的狀態(tài)機(jī)的體積較小,所以狀態(tài)機(jī)的狀 態(tài)分支較少,狀態(tài)深度也較小,從而使得匹配規(guī)則時的匹配周期較少,進(jìn)而,有效地提高了 匹配規(guī)則時的匹配效能。參見圖3,本發(fā)明實(shí)施例還提供了一種規(guī)則匹配系統(tǒng),包括規(guī)則匹配裝置30,狀 態(tài)機(jī)生成裝置40 ;其中,所述規(guī)則匹配裝置30可以為采用圖3所示實(shí)施例中的裝置,在此不再贅 述;所述狀態(tài)機(jī)生成裝置40包括特征特性劃分單元41,用于根據(jù)規(guī)則的不同特征特性將規(guī)則劃分得到多個子規(guī)則 集,每個子規(guī)則集的特征特性用于分別標(biāo)識每個狀態(tài)機(jī);編譯單元42,用于對所述特征特性劃分單元41劃分得到的所述子規(guī)則集分別編 譯得到多個狀態(tài)機(jī);其中,所述特征特性劃分單元41在根據(jù)規(guī)則不同特征特性進(jìn)行劃分時,可以參考 上述實(shí)施例中的各種劃分方法,在此不再贅述。參見圖4,本發(fā)明實(shí)施例中,所述狀態(tài)機(jī)生成裝置還包括規(guī)則更新單元43,用于對規(guī)則進(jìn)行更新,更新后的規(guī)則再經(jīng)過特征特性劃分單元 進(jìn)行劃分后生成更新后的子規(guī)則集,再將利用編譯單元生成更新后的狀態(tài)機(jī)。參見圖5,本發(fā)明實(shí)施例中,所述特征特性劃分單元41還包括
爆炸規(guī)則子劃分單元411,用于將引起狀態(tài)爆炸的語法組合的規(guī)則使用NFA的方式處理或?qū)⑺鲆?guī)則進(jìn)行重寫處理,然后根據(jù)處理后的該規(guī)則的特征特性劃分到相應(yīng)的規(guī) 則集中;字符串切割子劃分單元412,用于將由.*和純字符串組成的規(guī)則采用.*切割方式 處理,然后將該規(guī)則劃分到純字符串的規(guī)則集中;資源消耗子劃分單元413,用于將語法使用狀態(tài)機(jī)消耗資源多的規(guī)則,劃分到一個 規(guī)則集中。需要說明的是,本發(fā)明實(shí)施例中裝置及系統(tǒng)中的各個單元可以通過各種硬件處理 電路實(shí)現(xiàn)(如CPU、FPGA、MCU等)及其附屬電路實(shí)現(xiàn),當(dāng)采用集成處理芯片進(jìn)行處理時,每 個芯片也可以實(shí)現(xiàn)一個或多個本發(fā)明實(shí)施例中的邏輯單元,在此并不限定。在本發(fā)明實(shí)施例的技術(shù)方案中,分別由規(guī)則分類后的子規(guī)則集形成多個狀態(tài)機(jī), 在規(guī)則匹配時,先獲取被匹配數(shù)據(jù)的特征特性,然后使用與所述特征特性相對應(yīng)的狀態(tài)機(jī) 對所述被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配。與現(xiàn)有技術(shù)中使用由所有規(guī)則形成的一個整體的狀態(tài)機(jī) 的技術(shù)方案相比,本發(fā)明實(shí)施例中,由子規(guī)則集形成的狀態(tài)機(jī)的體積較小,所以狀態(tài)機(jī)的狀 態(tài)分支較少,狀態(tài)深度也較小,從而使得匹配規(guī)則時的匹配周期較少,進(jìn)而,有效地提高了 匹配規(guī)則時的匹配效能。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以 通過計算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機(jī)可讀取存儲介質(zhì) 中,所述程序在執(zhí)行時,可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲介質(zhì)可為 磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機(jī)存儲記憶體(Random Access Memory, RAM)等。對所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。 對這些實(shí)施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的 一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明 將不會被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一 致的最寬的范圍。
權(quán)利要求
一種規(guī)則匹配方法,其特征在于,包括獲取被匹配數(shù)據(jù)的特征特性;根據(jù)所述被匹配數(shù)據(jù)的特征特性從多個狀態(tài)機(jī)中確定目標(biāo)狀態(tài)機(jī);所述多個狀態(tài)機(jī)分別由多個子規(guī)則集編譯得到,所述多個子規(guī)則集根據(jù)規(guī)則的不同特征特性劃分得到,每個子規(guī)則集的特征特性用于分別標(biāo)識與其對應(yīng)的狀態(tài)機(jī);通過匹配引擎按照所述目標(biāo)狀態(tài)機(jī)對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配。
2.根據(jù)權(quán)利要求1所述的規(guī)則匹配方法,其特征在于,還包括升級狀態(tài)機(jī)時,根據(jù)更新規(guī)則的特征特性重新劃分并更新對應(yīng)的子規(guī)則集,重新編譯 更新后的子規(guī)則集生成新的狀態(tài)機(jī)。
3.根據(jù)權(quán)利要求1所述的規(guī)則匹配方法,其特征在于,所述匹配引擎為在多個匹配引 擎中與所述目標(biāo)狀態(tài)機(jī)的特征特性相關(guān)聯(lián)的匹配引擎;所述關(guān)聯(lián)具體為根據(jù)目標(biāo)狀態(tài)機(jī)的特征特性生成索引值,由所述索引值對應(yīng)與所述目標(biāo)狀態(tài)機(jī)關(guān)聯(lián)的 匹配引擎;所述關(guān)聯(lián)用于通過所述索引值確定與目標(biāo)狀態(tài)機(jī)相關(guān)聯(lián)的匹配引擎;使用所述匹配引 擎配合所述目標(biāo)狀態(tài)機(jī)對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配;所述索引值包括將所述特征特性哈希 取值或循環(huán)冗余校驗(yàn)取值的結(jié)果。
4.根據(jù)權(quán)利要求3所述的規(guī)則匹配方法,其特征在于,所述多個匹配引擎中包括需根 據(jù)所述被匹配數(shù)據(jù)的特征特性觸發(fā)激活的匹配引擎。
5.根據(jù)權(quán)利要求1至4中任一所述的規(guī)則匹配方法,其特征在于,還包括提取所述狀 態(tài)機(jī)的規(guī)則集中具有相同部分的多個規(guī)則的相同部分,在使用所述具有相同部分的多個規(guī) 則進(jìn)行規(guī)則匹配時,先使用所述相同部分匹配一次,然后使用所述多個規(guī)則中每個規(guī)則的 不相同部分分別匹配。
6.根據(jù)權(quán)利要求5所述的規(guī)則匹配方法,其特征在于,所述預(yù)先根據(jù)規(guī)則的特征特性 不同劃分為多個子規(guī)則集,包括將引起狀態(tài)爆炸的語法組合的規(guī)則使用NFA的方式處理或?qū)⑺鲆?guī)則進(jìn)行重寫處理, 然后根據(jù)處理后的該規(guī)則的特征特性劃分到相應(yīng)的規(guī)則集中;或者,將由.*和純字符串組成的規(guī)則采用.*切割方式處理,然后將該規(guī)則劃分到純字符串 的規(guī)則集中;或者,將語法使用狀態(tài)機(jī)耗費(fèi)資源多的規(guī)則,劃分到一個規(guī)則集中,并使用獨(dú)立資源處理該 規(guī)則集中的規(guī)則。
7.一種規(guī)則匹配裝置,其特征在于,包括特征特性獲取單元,用于獲取被匹配數(shù)據(jù)的特征特性;目標(biāo)狀態(tài)機(jī)確定單元,用于根據(jù)所述被匹配數(shù)據(jù)的特征特性確定多個狀態(tài)機(jī)中的一個 為目標(biāo)狀態(tài)機(jī);所述多個狀態(tài)機(jī)分別由多個子規(guī)則集編譯得到,所述多個子規(guī)則集由規(guī)則 根據(jù)規(guī)則不同的特征特性劃分得到,每個子規(guī)則集的特征特性用于分別標(biāo)識每個狀態(tài)機(jī);匹配引擎,用于按照所述目標(biāo)狀態(tài)機(jī)對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配。
8.根據(jù)權(quán)利要求7所述的規(guī)則匹配裝置,其特征在于,所述匹配引擎通過提取所述狀 態(tài)機(jī)的規(guī)則集中具有相同部分的多個規(guī)則的相同部分,在使用所述具有相同部分的多個規(guī)則進(jìn)行規(guī)則匹配時,先使用所述相同部分匹配一次,然后使用所述多個規(guī)則中每個規(guī)則的 不相同部分分別匹配。
9.一種規(guī)則匹配系統(tǒng),其特征在于,包括如權(quán)利要求7-8任一所述的規(guī)則匹配裝置;以及, 狀態(tài)機(jī)生成裝置,所述狀態(tài)機(jī)生成裝置包括特征特性劃分單元,用于根據(jù)規(guī)則的不同特征特性將規(guī)則劃分得到多個子規(guī)則集,每 個子規(guī)則集的特征特性用于分別標(biāo)識每個狀態(tài)機(jī);編譯單元,用于對所述特征特性劃分單元劃分得到的所述子規(guī)則集分別編譯得到多個 狀態(tài)機(jī)。
10.根據(jù)權(quán)利要求9所述的規(guī)則匹配系統(tǒng),其特征在于,所述特征特性劃分單元還包括規(guī)則更新單元,用于對規(guī)則進(jìn)行更新,使得更新后的爆炸規(guī)則子劃分單元,用于將引起狀態(tài)爆炸的語法組合的規(guī)則使用NFA的方式處理或 將所述規(guī)則進(jìn)行重寫處理,然后根據(jù)處理后的該規(guī)則的特征特性劃分到相應(yīng)的規(guī)則集中;字符串切割子劃分單元,用于將由.*和純字符串組成的規(guī)則采用.*切割方式處理,然 后將該規(guī)則劃分到純字符串的規(guī)則集中;資源消耗子劃分單元,用于將語法使用狀態(tài)機(jī)消耗資源多的規(guī)則,劃分到一個規(guī)則集中。
全文摘要
本發(fā)明實(shí)施例公開了一種規(guī)則匹配方法、裝置及系統(tǒng),其中所述規(guī)則匹配方法包括獲取被匹配數(shù)據(jù)的特征特性;根據(jù)所述被匹配數(shù)據(jù)的特征特性從多個狀態(tài)機(jī)中確定目標(biāo)狀態(tài)機(jī);所述多個狀態(tài)機(jī)分別由多個子規(guī)則集編譯得到,所述多個子規(guī)則集根據(jù)規(guī)則的不同特征特性劃分得到,每個子規(guī)則集的特征特性用于分別標(biāo)識與其對應(yīng)的狀態(tài)機(jī);通過匹配引擎按照所述目標(biāo)狀態(tài)機(jī)對被匹配數(shù)據(jù)進(jìn)行規(guī)則匹配。本發(fā)明實(shí)施例有效地減小了狀態(tài)機(jī)中的規(guī)則集的大小,使得狀態(tài)機(jī)的分支減少、狀態(tài)深度變小。從而可以有效地減少規(guī)則匹配的匹配周期,節(jié)省了系統(tǒng)資源的耗費(fèi)和時間,進(jìn)而提高了匹配效能。
文檔編號H04L29/06GK101841546SQ20101017634
公開日2010年9月22日 申請日期2010年5月17日 優(yōu)先權(quán)日2010年5月17日
發(fā)明者吳富強(qiáng), 孫靈燕, 曾佳, 王曉波 申請人:華為技術(shù)有限公司