專利名稱::可變步長流分割和多模式匹配的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及通信和計算機(jī)網(wǎng)絡(luò),更具體地涉及在用于內(nèi)容檢查系統(tǒng)應(yīng)用的多模式匹配中使用可變步長(variable-Stride)塊進(jìn)行處理。
背景技術(shù):
:該部分介紹可能有助于更好地理解本發(fā)明的方面。因此,閱讀到的該部分語句就此而論不應(yīng)被理解為承認(rèn)什么是現(xiàn)有技術(shù)或者什么不是現(xiàn)有技術(shù)。多模式匹配是由諸如基于簽名的網(wǎng)絡(luò)入侵檢測和預(yù)防系統(tǒng)(NIDS/NIPS或NIDPS)的內(nèi)容檢查系統(tǒng)使用的關(guān)鍵功能。這樣的系統(tǒng)基于可靠的實時檢測網(wǎng)絡(luò)業(yè)務(wù)中的具體簽名或模式以確定是否業(yè)務(wù)可能夠潛在地對包括主機(jī)的網(wǎng)絡(luò)或網(wǎng)絡(luò)元件有害。典型地,內(nèi)容檢查系統(tǒng)可以同時搜索多個這樣的簽名。當(dāng)線路速率增加超過IOGbps時,用于有效處理多模式匹配的方法日益變得重要。歷史上,通過使用確定的有限自動機(jī)(DFA)來實現(xiàn)模式匹配。DFA是有限狀態(tài)機(jī),其中對于每個狀態(tài)和輸入符號,存在一個狀態(tài)并僅有一個狀態(tài)轉(zhuǎn)換到下一個狀態(tài)。關(guān)于DFA的信息可以在Gill.A的有限狀態(tài)機(jī)理論介紹(IntroductiontotheTheoryofFinite-StateMachines)、McGraw-Hill、1962中發(fā)現(xiàn),其公開內(nèi)容以引用方式并入本文。在基于DFA的模式匹配的基本類型中,每次對網(wǎng)絡(luò)業(yè)務(wù)流處理一個字節(jié)或字符。這樣的DFA要求η個狀態(tài)以處理η個單字節(jié)模式并要求每個狀態(tài)有t個轉(zhuǎn)換,其中t是在模式字母表中符號的數(shù)量。然而,以當(dāng)前網(wǎng)絡(luò)的線路速率處理在每個時鐘處理一個字節(jié)太慢。提高基本DFA吞吐量的一個方法是通過在每個匹配步驟中掃描輸入數(shù)據(jù)流的多個字節(jié)(也就是,塊)。雖然該面向塊的DFA方法相對于面向字節(jié)的DFA與塊中的字節(jié)數(shù)量成比例地加速,但是它帶來其它問題。特別是,由于模式可能在塊中的任意偏移量處開始或結(jié)束,面向塊的DFA可能需要⑴重復(fù)s次,其中s是DFA的塊大小或“步長”,或⑵為每個狀態(tài)提供多個轉(zhuǎn)換。例如,在對于模式匹配的第一個面向塊的DFA方法中,將模式分為S-字節(jié)的塊,并且將塊用于構(gòu)建DFA。這導(dǎo)致相比于用于相同模式的相應(yīng)面向字節(jié)的DFA,DFA的狀態(tài)和轉(zhuǎn)換更少。然而,DFA的s個實例需要并行運行,每個實例接收具有一個字節(jié)偏移量的相同輸入數(shù)據(jù)流(以確保不會遺漏模式)。如果輸入流是...babbaba...,序列···IbaIbbIabIa.··和其一個字節(jié)的移位版本...b|ab|ba|ba|...都需要進(jìn)行處理以確保不會遺漏匹配。利用該方法,以較高的存儲器帶寬用量為代價可實現(xiàn)較高的吞吐量(匹配引擎并行運行s個實例的結(jié)果),其中對存儲器帶寬的需求與塊的大小s成比例增長。或者,可以構(gòu)建單一的DFA,其中轉(zhuǎn)換說明在流中能夠發(fā)生的所有可能的S-字節(jié)模式。通過使用較大的DFA,匹配引擎的單一實例可用于掃描輸入數(shù)據(jù)流而沒有遺漏匹配的可能。在這種情況下吞吐量增加以較高的存儲器用量為代價,而不是以較高的存儲器帶寬為代價。還需要說明的是,來自任意狀態(tài)的轉(zhuǎn)換數(shù)量可達(dá)ts,其中t是字母表的大小。實際上,對于使用英文字母表的NIDS簽名集,t=26,即使對于塊大小s為2個字節(jié)時,存儲器用量也是驚人地高。因此,現(xiàn)有模式匹配方法的基本問題是存在過度的存儲器或存儲器帶寬要求,特別是對于以當(dāng)前和預(yù)期的網(wǎng)絡(luò)接口的線路速率運行的系統(tǒng)。
發(fā)明內(nèi)容在一個實施方式中,本發(fā)明是一種用于將輸入符號流與符號模式進(jìn)行匹配的機(jī)器執(zhí)行的方法。將輸入符號流分割為符號的可變大小的塊以產(chǎn)生至少兩個不同長度的輸入流片段。至少兩個輸入流片段中的每一個與符號模式的模式片段進(jìn)行比較,其中模式片段相比于符號模式具有較少的符號。在另一實施方式中,本發(fā)明是一種用于將輸入符號流進(jìn)行分割的機(jī)器執(zhí)行的方法。在輸入符號流中形成符號的k-gram,其中(k>0)。為每個k-gram計算值。在長度為w的滑動窗中從k-gram值中識別一個或多個特殊值,其中(k<w)。根據(jù)輸入符號流中一個或多個特殊值的位置將輸入符號流劃分為段,其中至少兩個片段具有不同的長度。通過下面的詳細(xì)說明、所附權(quán)利要求、和附圖,本發(fā)明的其它方面、特點和優(yōu)勢會變得更明顯,其中在附圖中相同的附圖標(biāo)記表示相似或相同的元素。圖1是根據(jù)本發(fā)明各種實施方式的橫跨至少兩個自治系統(tǒng)并包括網(wǎng)絡(luò)入侵檢測和預(yù)防系統(tǒng)的通信網(wǎng)絡(luò)的框圖;圖2是圖1的網(wǎng)絡(luò)入侵檢測和預(yù)防系統(tǒng)140的框圖;圖3是圖2的可變步長多模式匹配(VSMPM)系統(tǒng)230的框圖;圖4是基于經(jīng)修改的winnowing過程的本發(fā)明的分割過程的實施例;圖5是描述了與本發(fā)明各種實施方式相關(guān)的頂級過程的流程圖;圖6描述了與本發(fā)明各種實施方式的各種模式的示例性分割;圖7描述了根據(jù)本發(fā)明各種實施方式的圖6的實施例中使用的模式的示例性狀態(tài)轉(zhuǎn)換圖;圖8描述了根據(jù)本發(fā)明各種實施方式的圖2的VSMPM系統(tǒng)230;圖9描述了根據(jù)本發(fā)明各種實施方式的支持圖7的示例性狀態(tài)轉(zhuǎn)換圖的示例性狀態(tài)轉(zhuǎn)換和匹配表;圖10描述了根據(jù)本發(fā)明各種實施方式的用于無核心且不可分割的模式的示例性TCMA存儲表;圖11描述了根據(jù)本發(fā)明各種實施方式的對應(yīng)于輸入流片段的兩個規(guī)則的示例性流圖(a)和(b)。具體實施例方式圖1描述了可以共享業(yè)務(wù)流的兩個自治系統(tǒng)110和120。自治系統(tǒng)110代表私有網(wǎng)絡(luò)、共有網(wǎng)絡(luò)或接入網(wǎng)絡(luò),自治系統(tǒng)120代表不同的私有網(wǎng)絡(luò)、共有網(wǎng)絡(luò)、接入網(wǎng)絡(luò)、或國際互聯(lián)網(wǎng)。每個自治系統(tǒng)包括各種客戶機(jī)、主機(jī)、服務(wù)器、和路由器。具體地,自治系統(tǒng)110包括邊緣路由器130。邊緣路由器130即使不是對流入和流出自治系統(tǒng)110的全部業(yè)務(wù)進(jìn)行路由,也是對流入和流出自治系統(tǒng)110的大部分業(yè)務(wù)進(jìn)行路由,且邊緣路由器130具有阻礙特定業(yè)務(wù)流的能力。邊緣路由器130包括網(wǎng)絡(luò)入侵檢測和預(yù)防系統(tǒng)(NIDPS)140。NIDPS系統(tǒng)140用于監(jiān)測通過邊緣路由器130的業(yè)務(wù)流,并向邊緣路由器130指示哪個業(yè)務(wù)流可能包括可疑或惡意的數(shù)據(jù)。例如,自治系統(tǒng)120中的服務(wù)器195可以向自治系統(tǒng)110中的一個或多個客戶機(jī)或主機(jī)設(shè)備發(fā)送包括病毒或其它惡意代碼和/或數(shù)據(jù)的流。與惡意代碼和/或數(shù)據(jù)相關(guān)的模式能夠被NIDPS系統(tǒng)140檢測。NIDPS系統(tǒng)140或者直接阻礙這些代碼和/或數(shù)據(jù),或者將惡意流的警報發(fā)送給邊緣路由器130。在這種情況下,邊緣路由器130可以通過丟棄攻擊性的分組或阻礙由IP源地址發(fā)送的流等來阻礙流。盡管將NIDPS系統(tǒng)140描述為邊緣路由器130的一部分,但是NIDPS系統(tǒng)140也可以是與路由器聯(lián)合工作的獨立網(wǎng)絡(luò)設(shè)備,或者實現(xiàn)為代理或網(wǎng)關(guān)服務(wù)器的一部分。根據(jù)本發(fā)明,NIDPS系統(tǒng)的其它示例還可出現(xiàn)在其它路由器或網(wǎng)絡(luò)設(shè)備上,例如包括內(nèi)部路由器190、邊緣路由器180、或服務(wù)器170。圖2描述了根據(jù)本發(fā)明一個實施方式的圖1的網(wǎng)絡(luò)入侵檢測和預(yù)防系統(tǒng)140。NIDPS系統(tǒng)140包括處理器210、存儲器220、和可變步長多模式匹配(VSMPM)系統(tǒng)230。VSMPM系統(tǒng)230通過流輸入240從邊緣路由器130接收用于檢測和檢驗的網(wǎng)絡(luò)業(yè)務(wù),并選擇性地通過流輸出250將原始業(yè)務(wù)或凈化后的業(yè)務(wù)子集發(fā)送給邊緣路由器130。VSMPM系統(tǒng)230還將惡意模式檢測警告260輸出給邊緣路由器130。該警告通知邊緣路由器130所提供的業(yè)務(wù)包括一個或多個惡意或異常的模式。在各種實施方式中,流輸入240可包括在VSMPM系統(tǒng)230外部已進(jìn)行預(yù)處理的數(shù)據(jù),從而除去報頭、加密、和在業(yè)務(wù)流中與檢測惡意模式的工作無關(guān)的其它信息。這種預(yù)處理可以包括協(xié)議分析、協(xié)議包裝剝離、和/或載荷重新裝配。本領(lǐng)域技術(shù)人員可以理解的是,可以使用各種替換方法。如前所述,許多與作為現(xiàn)有技術(shù)的面向塊的DFA相關(guān)聯(lián)的問題源于在輸入流中不知道要匹配的潛在的塊模式的位置。要匹配的塊模式可能需要與輸入流中每個相似長度的塊進(jìn)行比較,這會導(dǎo)致處理、存儲器、和/或存儲器帶寬顯著地惡化。然而,當(dāng)這些模式出現(xiàn)在輸入流中時,如果將輸入流分割成與要匹配的模式相一致的塊,可以顯著減少模式匹配復(fù)雜度。例如,假設(shè)在文本串“·..ckbrownfoxjumpedoverth...”中發(fā)現(xiàn)與單詞“over”匹配的問題,盡管人類的視覺系統(tǒng)會容易地檢測出在靠近串的結(jié)尾處存在相似的模式“over”,但是相同的工作對機(jī)器卻很難。具體地,傳統(tǒng)地面向塊的DFA會首先將模式“over”與“clcbr”進(jìn)行比較,然后與“Icbro”進(jìn)行比較,然后與“brow”進(jìn)行比較,等等,連續(xù)地將輸入流移位一個字節(jié)直到將來自輸入流的4字節(jié)串“over”與模板進(jìn)行比較并發(fā)現(xiàn)匹配為止。可以理解的是,如果以某種方式首先對輸入流進(jìn)行合適的分割,會減少問題的復(fù)雜度。例如,如果首先將輸入流“···ckbrownfoxjumpedoverth.·.”分割為“···ck|brownfoxIjumped|over|th...,,,則可以采用幾個不同的匹配方法。例如,在一個方法中,為了確定模式“over”是否出現(xiàn)在流中,可以首先確定是否在串中存在長度為4的任何片段,如果存在,僅將這些串與要匹配的模式進(jìn)行比較?;蛘?,在塊的基礎(chǔ)上,獨立于片段的長度,將η字節(jié)的模式與輸入流的每個片段的頭η個字節(jié)進(jìn)行比較。例如,將“over”連續(xù)與“brown”、“fox”、“jumped”、和最后的“over”進(jìn)行比較,直到發(fā)現(xiàn)匹配。這和將“over”與通過在每次比較中將輸入流移位1個字母得到的大小為4的每個塊進(jìn)行比較要簡單。因此,在本發(fā)明的實施方式中,可以不按逐字節(jié)的方式處理輸入流,而是在較大的自然單元上進(jìn)行處理,其中自然單元是通過在位置上獨立和唯一的片段處理相互進(jìn)行劃分得到的。在本發(fā)明的實施方式中,輸入流和要匹配的模式是唯一的,并被明確分割為可變大小的多字節(jié)塊。隨后使用面向塊的DFA執(zhí)行模式匹配,其中面向塊的DFA使用這些可變大小的塊(或原子單位)作為用于狀態(tài)轉(zhuǎn)換的符號的新字母表。這些原子單位的大于1的平均字節(jié)大小導(dǎo)致模式匹配速度的顯著增加。由于每個狀態(tài)轉(zhuǎn)換橫跨多于一個字節(jié),因此該方法還減少了DFA狀態(tài)和狀態(tài)轉(zhuǎn)換的數(shù)量。下面參照附圖3對該方法進(jìn)行描述。圖3描述了根據(jù)本發(fā)明各種實施方式的圖2的可變步長多模式匹配系統(tǒng)230。VSMPM系統(tǒng)230包括流分割單元310、可變步長塊匹配單元320、和選擇分組丟棄器(dropper)3300在操作中,流分割單元310從流輸入MO中接收輸入數(shù)據(jù),將流分割成片段,并將流片段340輸出至可變步長塊匹配單元320??勺儾介L塊匹配單元320將片段與包括從要匹配的模式中導(dǎo)出的片段的多字節(jié)原子符號的字母表進(jìn)行比較,并使用基于這些多字節(jié)的原子符號來確定特定模式是否存在于輸入流中。如果在輸入流中檢測到惡意模式,可變步長塊匹配單元320輸出警告沈0以指示外部單元相應(yīng)的業(yè)務(wù)是可疑的和/或惡意的和/或必須阻止或丟棄的??蛇x的,在VSMPM系統(tǒng)230的一些實施方式中,可變步長塊匹配單元320可替代地向任選分組丟棄器輸出丟棄控制信號350,以用于在將輸入流發(fā)送給流輸出250之前從輸入流中除去惡意內(nèi)容。在一些實現(xiàn)方式中,VSMPM系統(tǒng)230不提供流輸出。盡管為了簡潔起見,在圖3中僅描述了單個的可變步長塊匹配單元,但是本領(lǐng)域技術(shù)人員可以了解的是,可以提供多個并行實例以支持多模式匹配?;蛘?,在本發(fā)明一些實施方式中,圖3的可變步長塊匹配單元320同時支持多模式匹配。在一個實施方式中,本發(fā)明是分割任意數(shù)據(jù)流的唯一和清楚的方法??勺兇笮KDFA用于模式匹配和模糊性分辨。該分割和可變塊大小DFA處理的組合適用于模式匹配問題。如本領(lǐng)域技術(shù)人員可以理解的是,本發(fā)明可使用多種分割技術(shù)。不失一般性,下面描述一種示例性方法。分害丨丨(seRmentation)本發(fā)明實施方式中使用的分割方案基于被稱為“winnowing(風(fēng)選)”算法的流行的文件指紋識別算法。有關(guān)winnowing算法更多的信息可在S.Schleimer等的“Winnowing用于文件指紋識別的本地算法”、ACMSIGM0D2003中找到,其公開內(nèi)容以引用方式并入本文。也可以使用其它指紋識別方案,但是winnowing方案具有特別適用于本發(fā)明的特定屬性。由于winnowing算法可用于不同的應(yīng)用,因此為本模式和數(shù)據(jù)流塊產(chǎn)生的發(fā)明對算法進(jìn)行修改。Winnowing算法的一個好的特征是與位置是獨立的。這確保了在文件中增加一些新的文本仍會導(dǎo)致在被保留的兩個文件之間原有的匹配。算法按如下步驟工作。首先,計算s個連續(xù)字符的每個塊的哈希值。注意在winnowing論文中,將這些塊稱為“k-gram”,其中k=s。r個字符的流產(chǎn)生(r_s+l)個哈希值。第二,使用大小為w的滑動窗以對窗中的最小哈希值進(jìn)行定位。通過選擇最右側(cè)的最小值來打破這種聯(lián)系。在本發(fā)明中,雖然將這些選擇的哈希值用于winnowing方案中數(shù)據(jù)流的指紋,但是它們用于識別輸入數(shù)據(jù)流片段的分隔符(delimiter)以及要匹配的模式片段的分隔符。圖4描述了分割實例400,其中哈希值的范圍是0至255。注意塊大小或步長s受到滑動窗w=3的大小的限制。圖4包括⑴輸入流410,(ii)k=2字節(jié)的塊哈希,例如塊哈希420和塊哈希430,(iii)選擇的塊哈希,例如塊哈希430,和(iv)分段的輸出流440。在操作中,在輸入流中為每個連續(xù)的k字節(jié)塊計算哈希,并且將w字節(jié)窗中最小的塊哈希值識別為特殊哈希值。在winnowing算法中,選擇這些特殊哈希值以代表用于文件指紋識別目的的哈希值的相對均勻分布的子集。在本發(fā)明中,這些特殊哈希值用于劃分要匹配數(shù)據(jù)的片段。例如,分隔符450將字節(jié)串“rve”從字節(jié)串“r[”中分離出來。應(yīng)用k=2字節(jié)哈希的應(yīng)用和在w=3的窗中選擇最小哈希值的結(jié)果是分段的輸出流440具有長度為2或3字節(jié)的片段。為了在模式匹配中使用,用幾種方式對winnowing算法進(jìn)行修改。由于惡意模式可能較短,因此將塊大小s(受w限制)保持為相對較小,以從模式中獲得有意義的多個塊。在各種實施方式中,將模式分割為至少3個塊。因此,k和w也小(相當(dāng)于要匹配的模式長度的三分之一)。另一方面,較大的塊大小s有利于吞吐量,因此對于要匹配模式的長度,希望w盡可能地大。作為折中,在具有模式大約為9至20字節(jié)的特定實施方式中,k選擇為1或2,并且w的范圍是大約3至8。由于哈希窗w較小,得到片段的步長s(受w限制)也將較小。因此,s字節(jié)的DFA可以利用快速硬件和在上述wirmowing論文中描述的快速哈希函數(shù)來實現(xiàn),快速哈希函數(shù)可使用但不是需要使用Rabin快速哈希技術(shù)。此外,由于本發(fā)明的目的是對輸入數(shù)據(jù)流和模式進(jìn)行分割而不是產(chǎn)生用于匹配的指紋,大的哈希值不是特別有利。8比特或更小的比特就足夠了。這有利于有效和快速的硬件實現(xiàn)。如圖4所示,哈希窗的哈希值(例如,哈希值420對應(yīng)于與字符“se”相關(guān)聯(lián)的2字節(jié)哈希窗)小于256。還注意的是,將分隔符設(shè)置在選擇的最小哈希值之后(例如,分隔符選擇放在87的哈希值之后,其中87的哈希值是對應(yīng)于字符“rve”的窗中最小的哈希值)。這確保任何塊的大小不會長于w,其中k<w+2。Winnowing算法具有對本發(fā)明實施方式十分有用的“自同步”(也就是,上下文獨立)屬性,從而不考慮模式出現(xiàn)在輸入流中的上下文,其中輸入流通常被分割成相同順序的塊(具有一些可提供的頭和尾模式例外,這在下面進(jìn)行描述)。因此,本發(fā)明的分割過程的結(jié)果是在用于構(gòu)造模式匹配的DFA中的原子單元的模式中確定唯一的片段。圖5示出了解釋根據(jù)本發(fā)明各種實施方式的分割和匹配過程的高等級流程圖500。在步驟510中,作為預(yù)處理步驟,首先使用根據(jù)本發(fā)明的分割方法將影響到稍后匹配的模式分割成塊序列??纱鎯@些片段以備稍后使用,或?qū)⑦@些片段用于構(gòu)建面向塊的DFA。在步驟520中,將相似的分割過程應(yīng)用于輸入流。最后,在步驟530中,將從要匹配的模式中得到的片段與從輸入數(shù)據(jù)流中得到的片段進(jìn)行比較以確定有關(guān)的模式是否存在于輸入數(shù)據(jù)流中。步驟530的比較可以通過使用要匹配模式的片段得到的面向塊的DFA完成,其中片段在步驟510中產(chǎn)生。在模式分割中,根據(jù)相對于分割參數(shù)k和w的模式的大小,典型地產(chǎn)生多個片段。將第一個片段稱為“頭”塊,并且將最后一個片段稱為“尾”塊。將兩者中間的全部其它片段稱為“核心”塊。圖6描述了各種模式的分割600的實例。分割600包括要分割的模式610,和從模式分割中得到的頭片段620、核心片段630、尾片段640。注意,實施例采用相似字符和串對概念進(jìn)行解釋,但本發(fā)明也可將它們作為寬泛的符號和片段進(jìn)行處理。還要注意的是,一些短模式可能僅有一個分隔符(也就是,沒有核心片段,模式僅包括頭片段和尾片段)或者根本就沒有分隔符。這兩種模式分別被稱為“無核心模式”和“不可分割模式”。在圖6中,“entire”是無核心模式,“set”是不可分割模式。本發(fā)明的分割方案具有下列屬性屬性1任何片段塊的大小在范圍[l,w]中。尾塊大小在范圍[k-l,w+k_2]中,不可分割模式的大小在范圍[l,w+k-2]中,無核心模式的大小在范圍[w+k-l,2w+k-2]中。屬性2如果模式出現(xiàn)在數(shù)據(jù)流中則對數(shù)據(jù)流進(jìn)行分割,從而導(dǎo)致與模式的核心塊相同的分隔符。注意的是,當(dāng)模式的頭塊和尾塊出現(xiàn)在數(shù)據(jù)流中,由于頭塊會被前綴影響且尾塊會被后綴影響,因此它們可能具有額外的分隔符。然而,核心塊可完全限定為模式并從上下文中隔離出來。這些不變的核心塊可用于縮小在模式匹配中的搜索。解釋如下。假設(shè)圖6中的模式S2出現(xiàn)在數(shù)據(jù)流中。根據(jù)直接在S2之前出現(xiàn)的(w_l=3)個字符,可將頭塊“肌讓”分割成^?。、萟‘肌他”等等。相似地,通過在數(shù)據(jù)流中跟隨S2的(w-1=3)個字符,確定對尾塊“te”的分割。然而,由于所有需要進(jìn)行判斷的字符(也就是,a、u、t和h)是分割過程的一部分,因此要保證在字符“h”之后有一個分隔符。這對于在流中跟隨模式S2的兩個分隔符也是如此,從而分割通常產(chǎn)生兩個核心塊“ent”和“ica”。由于模式的核心塊是不變的,因此他們支持快速模式匹配。然而,需要使用多于僅連續(xù)匹配兩個塊“ent”和“ica”的信息以確定地和模式S2進(jìn)行匹配。所知道的是,如果連續(xù)匹配兩個塊“ent”和“ica”,則可能與S2匹配。為了驗證該匹配,一旦核心塊已經(jīng)匹配,下一步就是找到數(shù)據(jù)流中w字節(jié)的前綴符號和(w+k-幻字節(jié)的后綴符號以和S2的頭塊和尾塊分別進(jìn)行比較??勺儾介L(variable-stride)匹配在預(yù)處理步驟中,一旦已經(jīng)對模式進(jìn)行分割,并將輸入流進(jìn)行相似地分割,下一步包括將輸入流片段與預(yù)確定的模式片段進(jìn)行比較。在本發(fā)明的一個實施方式中,為該目的使用可變步長離散有限自動機(jī)(VS-DFA)。例如,在圖3中,可變步長塊匹配單元320可以按VS-DFA的形式實現(xiàn),這在下面進(jìn)行說明。VS-DFA構(gòu)建服從Aho-CorasickDFA構(gòu)建算法的過程。有關(guān)Aho-CorasickDFA構(gòu)建的更多信息可以在Α.V.Aho和M.J.Coraskic的“有效的串匹配目錄檢索幫助”、ACM通信、1975年第18卷第6期中找到,其公開內(nèi)容以引用方式并入本文。模式的核心塊通過使用分割過程提取,并用作字母表符號以構(gòu)建DFA。因此,VS-DFA的一個特征是其狀態(tài)轉(zhuǎn)換是基于核心塊而不是單個字符。核心塊匹配之后是頭塊和尾塊匹配。DFA的構(gòu)建確保了可利用每個塊一個狀態(tài)轉(zhuǎn)換來檢測全部核心塊序列。在此之后,如果命中,“準(zhǔn)匹配”狀態(tài)會導(dǎo)致最終的驗證步驟。圖7描述了圖6給出的模式的示例性狀態(tài)轉(zhuǎn)換圖700。DFA包括7個狀態(tài)。qO是初始狀態(tài)。qll、ql2、ql4和ql5是準(zhǔn)匹配狀態(tài)。為了避免使圖混亂,沒有示出指向返回初始狀態(tài)的轉(zhuǎn)換失敗情況。VS-DFA的正確性由分割過程的第二屬性保證,具體地,只要模式出現(xiàn)在數(shù)據(jù)流中,其核心塊也會出現(xiàn)在分割的數(shù)據(jù)流中,從而構(gòu)建的DFA能夠確定捕獲核心塊并檢查頭塊和尾塊。構(gòu)建VS-DFA的方法與檢測塊符號序列的傳統(tǒng)DFA構(gòu)建相似。主要區(qū)別在于由于先驗知識可除去一些路徑。構(gòu)建的DFA工作就好像匹配直接在模式主體上開始,而不需要頭塊和尾塊的知識。然而,在構(gòu)建DFA時,頭塊和尾塊的知識接下來要用于除去不必要的狀態(tài)轉(zhuǎn)換。在傳統(tǒng)的DFA中,如果路徑qi—qj消耗的字符串與路徑q0—qk消耗的字符串相同,則需要將從Qk開始的全部轉(zhuǎn)換復(fù)制給qj,除非轉(zhuǎn)換已經(jīng)限定一些轉(zhuǎn)發(fā)路徑。這是由于,在這種情況下,由較短路徑覆蓋的串是由較長路徑覆蓋的串的后綴,并且與較短路徑相同,較長路徑可導(dǎo)致與相同模式的匹配。因此構(gòu)建跳躍轉(zhuǎn)換以解決模式之間的重疊。這如圖7所示,其中由于核心塊序列“IidIentI”與核心塊序列“Ient|ica|”重疊,因此使用從ql5至ql2的跳躍轉(zhuǎn)換。然而,在VS-DFA中,僅當(dāng)路徑qO—qk上的頭塊與qi的輸入項路徑匹配時可以復(fù)制轉(zhuǎn)換。在該實施例中,路徑q0—ql2上的頭塊包括“id|”和“auth|”。它們中的一個與ql的輸入項路徑(也就是,“id|”)匹配,從而需要轉(zhuǎn)換。如果從DFA除去模式“idIent|ic|al”,那么轉(zhuǎn)換ql5—ql2就變得不必要了,并可以安全地刪除。作為上面的一個特殊情況,在傳統(tǒng)的DFA構(gòu)建中,應(yīng)當(dāng)將來自qO的全部轉(zhuǎn)換復(fù)制到所有其它狀態(tài),除了在一些轉(zhuǎn)發(fā)路徑上限定的轉(zhuǎn)換。這些轉(zhuǎn)換也被稱為可重新開始轉(zhuǎn)換。在VS-DFA中,僅在需要時產(chǎn)生可重新開始的轉(zhuǎn)換。在較大的VS-DFA中,可重新開始的轉(zhuǎn)換的數(shù)量較大,并且可能增加對存儲器的需要。幸運的是,來自qO的“開始轉(zhuǎn)換”的總體數(shù)量較小。在特定實施方式中,將“開始轉(zhuǎn)換”存儲在獨立的片上“開始表”中,其中利用VS-DFA并行搜索“開始表”。在這些實施方式中,可除去所有的可重新開始的轉(zhuǎn)換。此外,如果不能發(fā)現(xiàn)來自狀態(tài)的輸出轉(zhuǎn)換,來自開始表的搜索結(jié)果可用于指示出另一路徑。從硬件的角度,參照圖B和圖C,可變步長多模式匹配系統(tǒng)230包括流分割單元(例如,流分割單元310)和可變步長塊匹配單元(例如,可變步長塊匹配單元320)。在各種實施方式中,使用基于對winnowing算法進(jìn)行修改的分割方案實現(xiàn)流分割單元310,并且使用專用的VS-DFA模式匹配器實現(xiàn)可變步長塊匹配單元320。圖8描述了根據(jù)本發(fā)明各種實施方式的圖2的VSMPM系統(tǒng)230。VSMPM系統(tǒng)230包括經(jīng)修改的winnowing模塊810、可變步長塊隊列820、和VS-DFA830。在操作中,首先通過經(jīng)修改的winnowing模塊810將輸入數(shù)據(jù)流(分組載荷)240分割為可變大小的塊,并將其推入可變步長塊隊列820中(使用先入先出(FIFO)隊列實現(xiàn))。隨后從隊列中提取出所述塊并逐一提供給可變步長DFA830。VS-DFA830處理可變步長塊,首先處理核心塊,并且然后根據(jù)頭塊和尾塊對匹配進(jìn)行改善。假設(shè)發(fā)現(xiàn)與相關(guān)模式的匹配,從VS-DFA830輸出“發(fā)現(xiàn)匹配”警告沈0。用于經(jīng)修改的winnowing模塊的電路可以實現(xiàn)為在每個時鐘周期處理多于w個字節(jié)。由于狀態(tài)機(jī)830可能在每個時鐘周期消耗少于w個字節(jié),在兩個單元之間使用FIFO隊列以在它們之間提供較小的短期比例差。在這種實現(xiàn)中,系統(tǒng)吞吐量由狀態(tài)機(jī)確定。在狀態(tài)機(jī)模塊830的各種實施方式中,除了之前描述的開始表(starttable),還提供兩個更多的表以支持?jǐn)?shù)據(jù)結(jié)構(gòu)狀態(tài)轉(zhuǎn)換表和匹配表。在圖9中描述了這些實施例。圖9描述了根據(jù)本發(fā)明各種實施方式的支持表900。支持表900包括狀態(tài)轉(zhuǎn)換表(STT)910和匹配表(MT)920。STT表910本質(zhì)上是哈希表。哈希關(guān)鍵碼是開始狀態(tài)和輸入塊的結(jié)合。哈希值是下一狀態(tài)的地址。在每個周期中,如果發(fā)現(xiàn)查詢的結(jié)合,則獲得存儲在STT表910的相應(yīng)行中的結(jié)束狀態(tài);否則,從開始表獲得下一狀態(tài)。由于轉(zhuǎn)換表是基于哈希表的,因此狀態(tài)號碼(也就是地址)的分配通常是任意的。然而,對于準(zhǔn)匹配狀態(tài),用于它們的具體范圍是預(yù)先分配的。這是由于希望在匹配表中直接計算相應(yīng)輸入項的地址。例如,在匹配表920中,對于匹配狀態(tài)預(yù)先分配范圍ql*(其中*表示任何單一數(shù)字)。狀態(tài)qli對應(yīng)于第i個MT輸入項。特殊情況是ql2與兩個可能的頭/尾對相關(guān)聯(lián)。因此為ql2分配兩個MT輸入項,并且狀態(tài)機(jī)需要為可能的匹配線性地檢測輸入項。故意不分配ql3,從而為ql2保留第三MT輸入項。為了能夠在準(zhǔn)匹配狀態(tài)上進(jìn)行匹配驗證,可以在特定實施方式中保持頭隊列(HQ)。頭隊列存儲塊匹配歷史。使用具有D個輸入項的電路緩沖器實現(xiàn)HQ,其中D是VS-DFA的最長轉(zhuǎn)發(fā)路徑的長度。由于預(yù)先不能知道頭塊的精確長度,因此將每個隊列輸入項設(shè)為w字節(jié)。如果塊小于w字節(jié),那么將其它部分進(jìn)行填充。因此,HQ的大小是(DXw)字節(jié),從而確保持有足夠的歷史以用作將來的參考。MT中的深度字段確定將HQ中哪個輸入項作為頭。可以通過當(dāng)前HQ索引減去深度值來計算深度標(biāo)記。短樽式處理對于長度1>2w+k_2的模式,確保有至少一個用于DFA構(gòu)建的核心塊。然而,當(dāng)w+k-2<1<2w+k-l時,模式變成僅有頭塊和尾塊的無核心模式。具有長度1<w+k-Ι的模式根本沒有分隔符并變成不可分割模式。由于缺少核心塊,VS-DFA不直接適用于這些短模式。相反,在本發(fā)明的各種實施方式中,這些模式可通過較小的三進(jìn)制內(nèi)容尋址存儲器(TCAM)有效地進(jìn)行處理。理想地,TCAM存儲器應(yīng)當(dāng)具有與狀態(tài)機(jī)相同的吞吐量(也就是,每個查詢周期一個塊)。為了達(dá)到這一目的,傳統(tǒng)的方法會多次復(fù)制所述模式,并相對于前面將每個復(fù)制移位一個字節(jié)。然而,本發(fā)明的分割方案對每個無核心模式僅使用一個TCAM輸入項就足夠了。TCAM輸入項的寬度為2w+k-2。將每個輸入項分成兩部分,分別是w字節(jié)和w+k-2字節(jié)。為了存儲無核心模式,將其頭塊與第一部分的右側(cè)對齊,將其尾塊與第二部分的左側(cè)對齊。將輸入項中未使用的字節(jié)標(biāo)記為“不用關(guān)注”。不對不可分割模式進(jìn)行這樣的優(yōu)化。相反,對每個不可分割模式使用{w,w+k-2}中最大的TCAM輸入項。每個輸入項覆蓋可能的移位,其中該模式可出現(xiàn)在數(shù)據(jù)流中。第一輸入項與TCAM輸入項左對齊。后面每個輸入項向右側(cè)移位一字節(jié)。圖10給出了一個實施例。在該實施例中,由于w=4,k=2,TCAM輸入項的寬度為8字節(jié)。如圖所示,將分割成“entIire”的無核心模式“entire”存儲在TCAM輸入項1中。將不可分割模式“set”分散在4個TCAM輸入項中。通過這種安排,為了執(zhí)行匹配,將輸入流按照上述討論的內(nèi)容進(jìn)行分割。在字節(jié)流的末端增加額外的分隔符。在比特流中的每個分隔符處,在分隔符前提取w個字節(jié),在分隔符后提取(w+k-幻個字節(jié)。將組合的串用作密鑰以查詢TCAM存儲器。該方法確保發(fā)現(xiàn)用于任何短模式的正確匹配。幸運地,短模式僅是模式集合的一小部分。減少單字節(jié)塊VS-DFA在吞吐量上的優(yōu)勢在于每個DFA遍歷步驟中相對大的平均步長。對于隨機(jī)的數(shù)據(jù)流,希望的塊大小是(w+l)/2。然而,由之前所述的分割算法處理的特定輸入數(shù)據(jù)流可導(dǎo)致產(chǎn)生獨立于所選擇的哈希函數(shù)和窗參數(shù)的單字節(jié)片段。例如,連續(xù)地重復(fù)處理具有相同單字符的輸入流會導(dǎo)致一系列單字節(jié)片段。這會減少系統(tǒng)吞吐量,且還可能使系統(tǒng)對于特定類型的拒絕服務(wù)(DOS)攻擊是脆弱的。對于之前描述的分割算法,低熵的數(shù)據(jù)流也可能是有問題的。因此,在本發(fā)明各種實施方式中,對哈希值聯(lián)系中斷器(tie-breaker)方法的改進(jìn)可用于緩解出現(xiàn)在片段流中的單字節(jié)塊以及系統(tǒng)吞吐量顯著減少的問題。這通過應(yīng)用一個或兩個附加的片段結(jié)合規(guī)則來實現(xiàn)。由此得到的增強的分割處理可用于本發(fā)明各種實施方式中。結(jié)合規(guī)則1(應(yīng)用于片段流)如果在數(shù)據(jù)流中出現(xiàn)多于一個的連續(xù)單字節(jié)塊,從而,從第一個塊開始,結(jié)合w個單字節(jié)塊以形成新的合并的w字節(jié)塊。如果剩余的塊多于一個,也進(jìn)行結(jié)合。例如,假設(shè)W=4,并且連續(xù)的單字節(jié)塊是IClIc2Ic3Ic4|c5|c6|(假設(shè)cl之前的塊和c6之后的塊大于1個字節(jié))。應(yīng)用該規(guī)則以形成兩個結(jié)合的塊clc2c3c4|c5c6。結(jié)合規(guī)則1消除了所有連續(xù)的單字節(jié)塊,僅剩下一些分散在多字節(jié)塊之間的孤立的單字節(jié)塊。在更壞的情況下,其中單字節(jié)塊和雙字節(jié)塊在數(shù)據(jù)流中彼此交織,結(jié)合規(guī)則1提供1.5的加速要素。在模式上同樣執(zhí)行相似的結(jié)合。然而,對模式中的單字節(jié)塊進(jìn)行盲結(jié)合會導(dǎo)致流和模式的分割以丟失它們的同步。當(dāng)頭幾個或后幾個核心塊是單字節(jié)塊時會發(fā)生歧義。假設(shè)不同的上下文(例如不同的前綴或后綴字節(jié)),結(jié)合規(guī)則1會導(dǎo)致不同的結(jié)果。從而,為了確保算法的正確性,如果開頭的一個或多個原始核心塊是單字節(jié)塊,則不再將其視為核心塊。而是將其推出以作為頭塊的一部分。相似的,對與尾部相鄰的單字節(jié)塊也需要進(jìn)行特定的處理。結(jié)合規(guī)則1(應(yīng)用于樽式)在原頭塊后對所有連續(xù)的單字節(jié)核心塊進(jìn)行結(jié)合以形成新的頭塊。按照與結(jié)合規(guī)則1(應(yīng)用于片段流)的描述相同的方式對其余的核心塊進(jìn)行結(jié)合。在結(jié)合之后,如果最后的核心塊結(jié)合成一個塊,并且其小于w字節(jié),則將其結(jié)合進(jìn)尾塊中。下列實施例描述了結(jié)合規(guī)則1(應(yīng)用于模式)。假設(shè)利用w=3,將模式aaaaacbdddddabc原始分割為aaa|a|a|cbd|d|d|d|d|d|abc0開頭的兩個單字節(jié)塊|a|a|與頭塊結(jié)合。對于其余的塊,將首先的3個連續(xù)的Idl結(jié)合為Idddl,并將最后的兩個連續(xù)的Idl結(jié)合為|dd|。由于塊ddl的長度小于3,其與尾塊結(jié)合。因此在應(yīng)用規(guī)則后,新的分割成為aaaaa|Cbd|ddd|ddabC。在另一情況下,如果將相同的模式原始分割為不同的aaa|a|a|Cbd|d|d|d|d|d|ab|C。在應(yīng)用結(jié)合規(guī)則1之后,新的分割應(yīng)該是aaaaaIcbdIdddIdd|able。由于最后的核心塊|ab|不是結(jié)合的結(jié)果,因此尾塊保持不變。結(jié)合規(guī)則1同時提高了最差情況和期望的吞吐量。結(jié)合的向下趨勢是模式可具有更長的頭塊和尾塊。此外,在應(yīng)用規(guī)則之前,如果它們所有的核心塊是單字節(jié)塊,一些模式甚至可能成為無核心模式。在結(jié)合后,由于最多(w-1)個單字節(jié)塊可結(jié)合到尾塊中,因此最大的尾塊大小可以是(w+k-2)+(w-l)=(2w+k-3)字節(jié)。對于頭塊,大小上沒有上界。由于算法需要對來自數(shù)據(jù)流的潛在的頭塊進(jìn)行緩存以用于稍后的匹配驗證,因此必須限制頭塊的大小。幸運地,頭塊大于w字節(jié)的模式數(shù)量較少。通過復(fù)制模式w次可以解決該問題。對每個復(fù)制的模式在頭塊上進(jìn)行唯一的分割。頭塊分割過程如下在第i個字節(jié)后第一個分隔符,其中(1<i<W)。在第一個分隔符之后,每個w個字節(jié)后設(shè)置一個新的分隔符。當(dāng)完成分割后,將第一個塊保持為新的頭塊,并且將所有其他部分提升為核心塊。在VS-DFA中對每個復(fù)制的模式進(jìn)行編程以作為新模式,即使它們?nèi)匀粚?dǎo)致與相同流片段模式匹配的發(fā)生。例如,假設(shè)利用w=3將模式clc2c3c4c5c6c7c8c9cl0cll初始分割為cl|c2|c3|c4|c5|c6|c7|c8c9cl0|cllo在應(yīng)用結(jié)合規(guī)則1之后,分割的模式變成clc2c3c4c5c6c7|c8c9cl0|cllo新的頭塊甚至大于2w字節(jié)。為了限制頭塊的長度,模式復(fù)制三次,并且每一個接收如下的新分割I(lǐng)clc2c3c4|c5c6c7|c8c9cl0|cll,Iclc2c3c4c5|c6c7|c8c9cl0|cll,和Iclc2c3c4c5c6|c7|c8c9cl0|cll。現(xiàn)在無論在哪個上下文中,模式出現(xiàn)在輸入流中,可以確保通過w個分割中的一個進(jìn)行捕獲??傊?,對于應(yīng)用結(jié)合規(guī)則1之后的具有大的頭塊的模式,頭塊被限制在2w字節(jié)內(nèi),代價是復(fù)制模式w次。在一些實施方式中,以該代價或使用DFA中附加的復(fù)制模式,可以進(jìn)一步限制最大頭塊的大小。消除單字節(jié)塊結(jié)合規(guī)則1消除全部連續(xù)的單字節(jié)塊。然而,剩余的孤立的單字節(jié)塊可仍會減緩處理速度。最差的吞吐量是每個步驟1.5個字符。另一個規(guī)則,結(jié)合規(guī)則2,可用于增強的分割方法的各種實施方式中以消除幾乎所有的單字節(jié)塊。結(jié)合規(guī)則2在應(yīng)用結(jié)合規(guī)則1之后,將每個剩余的單字節(jié)塊結(jié)合到其前面的塊中。對于模式,這僅應(yīng)用于核心塊。并且,由于在數(shù)據(jù)流中尾塊的第一字節(jié)可能成為單字節(jié)塊,因此復(fù)制該模式一次并用新的分割覆蓋這種情況。例如,模式Iclc2c3|c4c5|c6|c7c8|c9cl0cll在應(yīng)用結(jié)合規(guī)則2后變成Iclc2c3Ic4c5c6|c7c8|c9cl0cll。然而,在數(shù)據(jù)流中,模式的尾塊可能被分割為|c9|cl0cll,從而在結(jié)合規(guī)則2應(yīng)用于數(shù)據(jù)流時,還可能會導(dǎo)致分割I(lǐng)Clc2c3Ic4c5c6|c7c8c9|clOcll。因此,將兩種模式分割都應(yīng)當(dāng)被插入到VS-DFA中。然而,在一些情況下,這種復(fù)制是不必要的。例如,對于上述模式,如果k=2,則在c9和ClO的位置上計算winnowing哈希值。如果第一個值大于第二個值,則可以確定在i和j之間沒有分隔符,從而不用考慮在模式后出現(xiàn)什么字符。在這種情況下,不進(jìn)行復(fù)制。結(jié)合規(guī)則2防止DoS攻擊問題,并潛在地增加系統(tǒng)吞吐量。對系統(tǒng)還有其他影響?,F(xiàn)在最大塊的大小為(w+1)字節(jié)。從而在應(yīng)用結(jié)合規(guī)則1后,具有長的頭塊的模式應(yīng)當(dāng)復(fù)制(w+1)次。盡管結(jié)果規(guī)則會導(dǎo)致一些模式復(fù)制,但是它們不會增加VS-DFA的存儲器消耗。相反,由于避免了單字節(jié)狀態(tài)轉(zhuǎn)換,因此它們實際上有助于較低的存儲器消耗。如圖11所示,當(dāng)應(yīng)用到輸入數(shù)據(jù)片段流時,結(jié)合規(guī)則產(chǎn)生增強的片段流。這里,圖11(a)描述了將結(jié)合規(guī)則1應(yīng)用到來自應(yīng)用未增強分割過程的輸入數(shù)據(jù)流。該過程從步驟1110開始。在步驟1120,從負(fù)責(zé)輸入數(shù)據(jù)流的原始分割的系統(tǒng)部分接收系列片段。在步驟1130,將連續(xù)的單字節(jié)片段(塊)結(jié)合到w字節(jié)的片段中,并且在步驟1140中,還將剩余的連續(xù)的單字節(jié)片段集合結(jié)合到單一的片段中。剩余的是孤立的由至少一個多字節(jié)片段相互隔離的單字節(jié)片段。該過程在步驟1150結(jié)束。在圖11(b)中,將結(jié)合規(guī)則2應(yīng)用于來自圖11(a)的過程的流。具體地,該過程從步驟1150開始,在步驟1160中,接收來自結(jié)合規(guī)則1的應(yīng)用的流。在步驟1170,將每個孤立的單字節(jié)片段結(jié)合到其前面的多字節(jié)片段。該過程在步驟1180結(jié)束。本發(fā)明可以體現(xiàn)為用于實現(xiàn)這些方法的方法和裝置的形式。本發(fā)明還可以體現(xiàn)為在有形介質(zhì)上的程序代碼的形式,例如磁記錄介質(zhì)、光記錄介質(zhì)、固態(tài)存儲器、軟盤、CD-ROM、硬盤驅(qū)動器、或任意其它機(jī)器可讀存儲介質(zhì),其中,在將程序代碼裝入諸如計算機(jī)的機(jī)器并執(zhí)行時,機(jī)器變成用于實現(xiàn)本發(fā)明的裝置。本發(fā)明還可以體現(xiàn)為程序代碼的形式實施,例如,或者存儲在存儲介質(zhì)中、裝入機(jī)器和/或由機(jī)器執(zhí)行、或通過一些傳輸介質(zhì)或載體傳輸、例如通過電線或電纜、通過光纖、或通過電磁輻射,其中,當(dāng)將程序代碼裝入諸如計算機(jī)的機(jī)器并執(zhí)行時,機(jī)器變成用于實現(xiàn)本發(fā)明的裝置。當(dāng)在通用目的的處理器上執(zhí)行時,程序代碼片段結(jié)合處理器提供與操作專用邏輯電路相似的唯一設(shè)備??商鎿Q地或可附加地,本發(fā)明或本發(fā)明的部分可以按各種方式實現(xiàn),包括但不局限于,專用集成電路(ASIC)或現(xiàn)場可編程門陣列(FPGA)。這里應(yīng)該理解所有前述的實施方式,無論是處理器、具有軟件的處理器、ASIC、FPGA、獨立邏輯、或者電子或光學(xué)電路都落入所要求的術(shù)語“機(jī)器”的范圍中,并且“機(jī)器實現(xiàn)”應(yīng)被理解為包括,但不局限于,任何的前述實現(xiàn)以及本領(lǐng)域技術(shù)人員認(rèn)為是等效的其他實現(xiàn)技術(shù)。除非明確說明,每個數(shù)值和范圍應(yīng)被解釋為近似的,就像詞“大約”或“近似”在數(shù)值或范圍的值之前。可進(jìn)一步理解的是,在不偏離本發(fā)明范圍的情況下,為了解釋本發(fā)明的本質(zhì),本領(lǐng)域技術(shù)人員可以對所描述和解釋部分的細(xì)節(jié)、材料和安排進(jìn)行各種修改。其中本發(fā)明的范圍由下列權(quán)利要求表示。可以理解的是,這里給出的示例性方法的步驟不是必須要求按照所描述的順序執(zhí)行,這樣方法的步驟的順序僅應(yīng)理解為是示例性的。相似的,在與本發(fā)明的各實施方式相一致的方法中,在這樣的方法中可包括附加的步驟,特定的步驟可省略或合并。盡管下列方法權(quán)利要求的元素(即便有的話)以對應(yīng)于序號的特定順序進(jìn)行引用,但是除非權(quán)利要求的引用關(guān)系暗示執(zhí)行這些元素中的一些或全部的特定順序,這些元素不必須局限于以特定順序執(zhí)行。這里涉及的“一個實施方式”或“實施方式”意味著所描述的與實施方式有關(guān)的特定特征、結(jié)構(gòu)、或特性可包括在本發(fā)明的至少一個實施方式中。出現(xiàn)在說明書各部分的詞組“在一個實施方式中”不是必然涉及同樣的實施方式,也不是必須排除其它實施方式的個別或可替換的實施方式。對術(shù)語“實現(xiàn)方式”也是相同的。盡管在前面討論的許多實施例中使用英語單詞和字符,但是本發(fā)明的分割方法的優(yōu)勢在于其可應(yīng)用于任意輸入字節(jié)流和/或字節(jié)模式。因此,本方案不依賴于流的語義上下文以支持分割。例如,在英文文件中發(fā)現(xiàn)的標(biāo)點符號、空格、大寫字母和或其它上下文元素可用于在這樣的文件中發(fā)現(xiàn)的多字節(jié)字符串之間劃定邊界,本發(fā)明不需要任何這樣的依靠上下文的系統(tǒng),并且從而可適用于任意字節(jié)流。此外,盡管本發(fā)明在包括數(shù)據(jù)字節(jié)的數(shù)據(jù)流的上下文中進(jìn)行描述,但是不局限于二進(jìn)制數(shù)據(jù)的八位組。例如,如果不是8比特的數(shù)據(jù)表示,在可替代的數(shù)據(jù)表示中,十、十二、或任何其它數(shù)量的比特可用于表示符號,從而該發(fā)明可平等地應(yīng)用于可替換的表示。因此,認(rèn)為本發(fā)明普遍地適用于各種任意輸入“符號”流是合適的。此外,同樣地,不需要將這些符號規(guī)定長度為8比特,也不需要將這些符號限制為基本的兩個表示。許多前述的實施方式使用示例性的結(jié)合哈希函數(shù)和最小值過濾器的winnowing函數(shù)以在輸入符號流中從k-gram中選擇特定的哈希值。哈希函數(shù)自身是已知為單向函數(shù)的一類函數(shù),且最小值過濾器是一類可應(yīng)用于一系列數(shù)量以從集合中區(qū)分出一個的過濾器或標(biāo)準(zhǔn)的實例。一般而言,本領(lǐng)域技術(shù)人員可以理解的是,本發(fā)明不局限于實施方式的示例,而是保持下列引用的權(quán)利要求的全部范圍。權(quán)利要求1.一種用于將輸入符號流與符號模式進(jìn)行匹配的機(jī)器執(zhí)行的方法,該方法包括(a)將輸入符號流分割成為符號的可變大小塊以產(chǎn)生至少兩個不同長度的輸入流片段;以及(b)將至少兩個輸入流片段中的每一個與符號模式的模式片段進(jìn)行比較,其中模式片段相比于符號模式具有較少的符號。2.根據(jù)權(quán)利要求1所述的方法,其中步驟(a)包括(al)在輸入符號流中符號的k-gram上執(zhí)行單向函數(shù)以生成與k-gram相關(guān)聯(lián)的值,其中(k>0);(a2)對值進(jìn)行過濾以識別與至少一個k-gram相關(guān)聯(lián)的至少一個特定值;以及(a3)根據(jù)與至少一個特定值相關(guān)聯(lián)的至少一個k-gram在輸入符號流中的位置將輸入符號流劃分為至少兩個片段。3.根據(jù)權(quán)利要求2所述的方法,其中單向函數(shù)是哈希函數(shù);值是哈希值;至少一個特定值是與至少一個k-gram相關(guān)聯(lián)的至少一個特定哈希值;步驟(al)包括產(chǎn)生與大小為w的窗內(nèi)的多個k-gram相對應(yīng)的多個哈希值,其中(k<w);以及步驟(^)包括選擇與至少一個k-gram相關(guān)聯(lián)的至少一個特定哈希值作為窗內(nèi)最小的哈希值。4.根據(jù)權(quán)利要求1所述的方法,其中步驟(a)進(jìn)一步包括將所述符號模式分割成至少頭塊、核心塊、和尾塊,其中所述模式片段對應(yīng)于頭塊、核心塊、和尾塊中的一個。5.根據(jù)權(quán)利要求1所述的方法,其中使用單個的可變步長離散有限自動機(jī)(VS-DFA)執(zhí)行步驟(b)。6.根據(jù)權(quán)利要求5所述的方法,其中使用包括至少兩個核心塊的字母表構(gòu)建VS-DFA。7.根據(jù)權(quán)利要求5所述的方法,其中VS-DFA包括對應(yīng)于至少兩個不同的可能模式匹配中一個的準(zhǔn)狀態(tài),其中在至少兩個不同的可能模式匹配中確定模式匹配是頭塊和尾塊的函數(shù)。8.根據(jù)權(quán)利要求5所述的方法,其中所述符號模式對應(yīng)于第一符號序列;以及使用至少包括模式片段和對應(yīng)于第二符號序列的第二符號模式的片段的字母表來構(gòu)建VS-DFA,第二符號序列與第一符號序列不同。9.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括(C)將至少一個由P個連續(xù)的單符號輸入流片段組成的序列合并到單個P符號輸入流片段,其中(P>1)。10.一種用于將輸入符號流與符號模式進(jìn)行匹配的設(shè)備,該設(shè)備包括(a)將輸入符號流分割成為符號的可變大小塊以產(chǎn)生至少兩個不同長度的輸入流片段的裝置;以及(b)將至少兩個輸入流片段中的每一個與符號模式的模式片段進(jìn)行比較的裝置,其中模式片段相比于符號模式具有較少的符號。全文摘要可變步長多模式匹配設(shè)備根據(jù)修改的winnowing算法對模式進(jìn)行分割,并將流輸入分割可變大小的塊。可變步長模式片段用于確定用于檢測輸入流中的模式的可變步長離散有限自動機(jī)(VS-DFA)的塊符號字母表。應(yīng)用包括網(wǎng)絡(luò)入侵檢測和保護(hù)系統(tǒng)、基因組匹配、和辯論。對winnowing算法的修改包括使用特定的哈希值以確定模式和輸入流的分隔符的位置。分隔符標(biāo)記片段的開始和結(jié)束。在各種實施方式中,將模式分割為頭塊、核心塊和尾塊。該方法給存儲器、存儲器帶寬和處理器循環(huán)提供有效地、確定地、高速的線速率模式匹配。文檔編號H04L29/06GK102395985SQ201080016841公開日2012年3月28日申請日期2010年4月13日優(yōu)先權(quán)日2009年4月17日發(fā)明者H·宋,N·華,T·V·拉克斯曼申請人:阿爾卡特朗訊公司