国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于FPGA+NPU的高速正則表達(dá)式匹配混合系統(tǒng)及方法與流程

      文檔序號(hào):12464459閱讀:455來源:國知局
      基于FPGA+NPU的高速正則表達(dá)式匹配混合系統(tǒng)及方法與流程

      本發(fā)明主要支持高速網(wǎng)絡(luò)中的深度報(bào)文檢測(cè)技術(shù),主要應(yīng)用于入侵檢測(cè)系統(tǒng)、協(xié)議識(shí)別系統(tǒng)中。



      背景技術(shù):

      名詞解釋

      FPGA:(英語:Field Programmable Gate Array,縮寫為FPGA),現(xiàn)場(chǎng)可編程門陣列。

      NPU:(英語:Network Processing Unit,縮寫為NPU),是一種專門應(yīng)用于網(wǎng)絡(luò)應(yīng)用數(shù)據(jù)包的處理器。

      FSM:(英語:finite state automata,縮寫為FSM),有限狀態(tài)自動(dòng)機(jī)。

      DFA:(英語:deterministic finite automata,縮寫為DFA),確定性有限自動(dòng)機(jī)

      NFA:(英語:nondeterministic finite automata,縮寫為NFA),非確定性有限自動(dòng)機(jī)。

      Hybrid-FA:(英語:hybrid finite automata,縮寫為Hybrid-FA),混合自動(dòng)機(jī)。

      GPU:(英語:graphics processing unit,縮寫為GPU),圖形處理器。

      TCAM:(ternary content addressable memory,縮寫為TCAM),一種三態(tài)內(nèi)容尋址存儲(chǔ)器。

      SDRAM:(Synchronous Dynamic Random Access Memory,縮寫為SDRAM),同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器。

      DDR3SDRAM:(Double-Data-Rate Three Synchronous Dynamic Random Access Memory,縮寫為DDR3SDRAM),第三代雙倍數(shù)據(jù)率同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器,是一種電腦存儲(chǔ)器規(guī)格。RAM:(random access memory,縮寫為RAM),隨機(jī)存取存儲(chǔ)器。

      當(dāng)前的網(wǎng)絡(luò)應(yīng)用越來越依賴于對(duì)報(bào)文負(fù)載部分的處理。這些應(yīng)用從報(bào)文負(fù)載中識(shí)別出相關(guān)特征,并用這些特征進(jìn)行負(fù)載均衡、應(yīng)用層協(xié)議識(shí)別、流量計(jì)費(fèi)、網(wǎng)絡(luò)入侵檢測(cè)等。深度報(bào)文檢測(cè)是特征識(shí)別的核心技術(shù)。預(yù)先給定一個(gè)特征(規(guī)則)集,深度報(bào)文檢測(cè)用該規(guī)則集對(duì)報(bào)文負(fù)載部分逐字節(jié)地進(jìn)行匹配,結(jié)束時(shí)返回匹配結(jié)果,即報(bào)文負(fù)載匹配上哪個(gè)或哪些規(guī)則。

      在早期的時(shí)候,精確的字符串被廣泛地用于深度報(bào)文檢測(cè)中的特征描述。傳統(tǒng)的算法如AC算法、WM算法及SBOM算法是經(jīng)典的高效字符串匹配算法。然而隨著特征越來越復(fù)雜,精確字符串已經(jīng)無法有效地對(duì)特征進(jìn)行描述。正則表達(dá)式以其強(qiáng)大而靈活的特征描述能力,已經(jīng)廣泛地應(yīng)用于網(wǎng)絡(luò)應(yīng)用及設(shè)備中。例如,知名的開源入侵檢測(cè)系統(tǒng)Snort、Bro及應(yīng)用層協(xié)議識(shí)別系統(tǒng)L7-filter均已采用正則表達(dá)式來描述它們的規(guī)則集。在工業(yè)上,網(wǎng)絡(luò)安全設(shè)備如思科安全系統(tǒng)、Cavium的匹配引擎、IBM PowerEN processor上的硬件加速器均支持正則表達(dá)式。

      通常的匹配方法是將正則表達(dá)式規(guī)則集轉(zhuǎn)換成等價(jià)的有限狀態(tài)自動(dòng)機(jī)(FSM,finite state automata),自動(dòng)機(jī)中的每個(gè)狀態(tài)代表一個(gè)匹配的中間過程。匹配引擎每次讀取負(fù)載的一個(gè)字節(jié),查詢自動(dòng)機(jī)的狀態(tài)表,跳轉(zhuǎn)到下一個(gè)活躍狀態(tài)集。若匹配中某個(gè)活躍狀態(tài)對(duì)應(yīng)的給定的某個(gè)規(guī)則,則說明該負(fù)載命中了這條規(guī)則。傳統(tǒng)上有兩種類型的FSM:確定性有限自動(dòng)機(jī)(DFA,deterministic finite automata)和非確定性有限自動(dòng)機(jī)(NFA,nondeterministic finite automata)。NFA的優(yōu)點(diǎn)是空間開銷小,NFA狀態(tài)數(shù)與規(guī)則集的數(shù)量及規(guī)則長(zhǎng)度成線性關(guān)系。缺點(diǎn)是NFA處理的時(shí)間復(fù)雜度高,在任意狀態(tài)NFA可能有多個(gè)活躍狀態(tài),處理一個(gè)字符可能需要多次訪問狀態(tài)表,效率非常低。DFA的優(yōu)點(diǎn)是任意一個(gè)時(shí)刻只有一個(gè)活躍狀態(tài),因此處理一個(gè)字符只需要一次訪存,時(shí)間復(fù)雜度固定為O(1)。但是在NFA生成DFA的過程中會(huì)引入狀態(tài)膨脹、甚至狀態(tài)爆炸,導(dǎo)致空間開銷極大,有時(shí)甚至無法生成完整的DFA。由于NFA的時(shí)間復(fù)雜度由其理論模型決定,在不改變系統(tǒng)結(jié)構(gòu)的情況下很難對(duì)其進(jìn)行改進(jìn)。而DFA匹配邏輯簡(jiǎn)單,當(dāng)前研究主要都集中在基于DFA的匹配中。

      深度報(bào)文檢測(cè)中的正則表達(dá)式匹配目前主要面臨兩個(gè)方面的挑戰(zhàn)。第一個(gè)挑戰(zhàn)來自自動(dòng)機(jī),隨著網(wǎng)絡(luò)應(yīng)用的擴(kuò)展,需要檢測(cè)的規(guī)則數(shù)量越來越多,規(guī)則也越來越復(fù)雜,進(jìn)而導(dǎo)致DFA的規(guī)模越來越大。DFA存儲(chǔ)開銷可能高于當(dāng)前網(wǎng)絡(luò)設(shè)備中的存儲(chǔ)資源,甚至在很多應(yīng)用場(chǎng)合下無法生成完整的DFA。第二個(gè)挑戰(zhàn)來自性能,當(dāng)前因特網(wǎng)鏈路速率正以每年40%至50%的速率持續(xù)增長(zhǎng),而很多深度報(bào)文檢測(cè)應(yīng)用如入侵檢測(cè)系統(tǒng)需要對(duì)報(bào)文的實(shí)時(shí)處理,因此對(duì)正則表達(dá)式匹配提出了線速要求。而深度報(bào)文檢測(cè)本質(zhì)是對(duì)報(bào)文負(fù)載的逐字節(jié)的掃描,本身就是一個(gè)復(fù)雜度極高的過程,因此需要從體系結(jié)構(gòu)、訪存邏輯多方面綜合提升匹配性能。

      對(duì)第一個(gè)挑戰(zhàn),研究人員提出了很多壓縮方法來降低DFA的存儲(chǔ)開銷。DFA狀態(tài)表本質(zhì)是一個(gè)二維的矩陣,矩陣中每一個(gè)表項(xiàng)代表一個(gè)轉(zhuǎn)移邊。Kumar提出的D2FA是最經(jīng)典的DFA壓縮算法,它通過引入默認(rèn)跳轉(zhuǎn)邊來消除不同狀態(tài)間的相同轉(zhuǎn)移邊,大部分DFA壓縮算法都是基于D2FA而改進(jìn)的。D2FA的缺點(diǎn)是沒有性能保證,Becchi在其基礎(chǔ)上通過限定默認(rèn)跳轉(zhuǎn)邊的方向來保證其性能不低于DFA的1/2。盡管當(dāng)前壓縮算法有很好的性能保證,但是它們都是構(gòu)建在DFA的基礎(chǔ)上,它們無法解決狀態(tài)爆炸導(dǎo)致DFA無法生成的問題。針對(duì)狀態(tài)爆炸問題,當(dāng)前學(xué)者提出了多種解決方案,如規(guī)則分組,半確定自動(dòng)機(jī)(hybrid-FA),基于特征分解的自動(dòng)機(jī)(H-FA、XFA、PaCC)等。基于特征分解的自動(dòng)機(jī)主要停留在理論層面無法實(shí)用,而規(guī)則分組會(huì)導(dǎo)致匹配性能的線速下降。本專利將使用半確定自動(dòng)機(jī)hybrid-FA作為正則匹配的的自動(dòng)機(jī)。

      Hybrid-FA是介于NFA和DFA之間的一個(gè)非常實(shí)用的自動(dòng)機(jī)。在NFA轉(zhuǎn)換成DFA的子集合算法中,hybrid-FA中止了那些容易引起爆炸的NFA狀態(tài)的確定化,生成了帶有一個(gè)頭部DFA和若干個(gè)尾部NFA的自動(dòng)機(jī)。Hybrid-FA很好地對(duì)NFA和DFA進(jìn)行了平衡,通過適度終止確定化,避免了DFA的狀態(tài)爆炸;其次通過對(duì)規(guī)則頭部確定化生成頭部DFA,可以使大部分報(bào)文的處理有確定的性能保證,避免了NFA過大的時(shí)間開銷。

      對(duì)第二個(gè)挑戰(zhàn),在以存儲(chǔ)為中心的體系結(jié)構(gòu)下,匹配性能取決于訪存性能。對(duì)給定的規(guī)則集和報(bào)文,訪存次數(shù)是確定的,關(guān)鍵是要提高每次訪存的效率。最好的方法是將自動(dòng)機(jī)全部存儲(chǔ)在高速存儲(chǔ)器上,但是在通用的網(wǎng)絡(luò)設(shè)備中高速存儲(chǔ)器容量非常有限,并且遠(yuǎn)小于自動(dòng)機(jī)的存儲(chǔ)需求。因此,如何利用好網(wǎng)絡(luò)設(shè)備中的高速存儲(chǔ)器是一個(gè)關(guān)鍵問題。另一方面可以從并行的角度入手,通過實(shí)例化多個(gè)并行引擎來對(duì)匹配性能進(jìn)行線速提升。當(dāng)前網(wǎng)絡(luò)設(shè)備中并行資源比較多,如FPGA中并行的硬件資源、通過多核處理器、GPU、多核NPU、TCAM等器件都可以提供并行的資源,當(dāng)前通過挖掘硬件設(shè)備并行性來提高性能的研究也集中在這幾個(gè)方面。但是,單一器件均無法滿足正則表達(dá)式匹配需求。以硬件邏輯為中心的FPGA通常使用NFA作為自動(dòng)機(jī),它將NFA狀態(tài)表編譯成硬件邏輯,對(duì)多個(gè)狀態(tài)的訪問處理都可以在一個(gè)時(shí)鐘周期內(nèi)完成。但是基于NFA的FPGA硬件并行度的提升是以復(fù)制硬件邏輯為代價(jià)的,復(fù)雜的規(guī)則集加上線速的匹配要求會(huì)極大地增加硬件開銷。無法實(shí)時(shí)更新是以硬件邏輯為中心的FPGA的另一個(gè)天生的缺陷,導(dǎo)致其無法應(yīng)用于經(jīng)常需要更新規(guī)則集的應(yīng)用中。通用多核處理器和多核NPU雖然主頻比較高,但是通常它們提供的并行度非常有限。GPU和TCAM一般需要非常規(guī)整的類似于DFA的自動(dòng)機(jī)才能發(fā)揮效能,且它們的存儲(chǔ)資源非常有限。

      深度報(bào)文檢測(cè)中的正則表達(dá)式匹配正面臨著日益嚴(yán)峻的挑戰(zhàn)。首先,隨著網(wǎng)絡(luò)應(yīng)用的擴(kuò)展,深度報(bào)文檢測(cè)中的規(guī)則集的數(shù)量和復(fù)雜度都在急劇提升;其次,網(wǎng)絡(luò)鏈路速率也隨用戶數(shù)量及新技術(shù)的提升而快速增長(zhǎng)。這兩方面的趨勢(shì)都對(duì)正則表達(dá)式提出了越來越嚴(yán)苛的要求,狀態(tài)爆炸是不可避免,要滿足規(guī)則集的擴(kuò)展就只能摒棄傳統(tǒng)的DFA。而當(dāng)前大部分研究都是基于DFA的壓縮技術(shù),且新型自動(dòng)機(jī)的設(shè)計(jì)在理論和實(shí)踐上都有諸多困難需要克服。

      現(xiàn)有的匹配技術(shù)存在的不足:

      1.忽略了實(shí)踐中訪存這一核心因素,訪存時(shí)延是正則表達(dá)式匹配的最重要的決定性因素。

      2.在實(shí)現(xiàn)中過于依賴單一的平臺(tái)和體系結(jié)構(gòu),而每個(gè)平臺(tái)都有自身的缺陷導(dǎo)致無法提供滿意的解決方案。

      3.自動(dòng)機(jī)的設(shè)計(jì)未能與體系結(jié)構(gòu)的設(shè)計(jì)充分結(jié)合,導(dǎo)致這兩個(gè)研究方向有脫節(jié)。

      針對(duì)當(dāng)前研究的不足,我們主要從體系結(jié)構(gòu)設(shè)計(jì)入手。在自動(dòng)機(jī)的設(shè)計(jì)上,我們選擇目前較為成熟且能解決狀態(tài)爆炸問題的hybrid-FA。為最大化地提升hybrid-FA,我們?cè)O(shè)計(jì)了以存儲(chǔ)為中心的FPGA+NPU的混合體系結(jié)構(gòu)。FPGA部分主要解決hybrid-FA的頭部DFA的匹配,NPU主要解決hybird-FA尾部NFA的匹配。FPGA和NPU是流水化處理,報(bào)文首先在FPGA部分進(jìn)行匹配,匹配過程中若有NFA狀態(tài)激活就將當(dāng)前狀態(tài)和剩余的報(bào)文傳遞給NPU,由NPU完成剩余的匹配。通常情況下,NFA狀態(tài)很少激活,或者激活的位置都在報(bào)文比較靠后的位置。因此NPU流水段的任務(wù)量相較FPGA部分非常小,要提升整體匹配性能只要保證FPGA部分匹配性能即可。

      在FPGA部分的設(shè)計(jì)中,為提升并行度,我們實(shí)例化多個(gè)匹配引擎,每個(gè)匹配引擎并行工作。為了提升匹配中的訪存性能,設(shè)計(jì)了兩級(jí)存儲(chǔ)的層次化結(jié)構(gòu)來存儲(chǔ)hybrid-FA的DFA狀態(tài)表。其中FPGA上的RAM作為高速存儲(chǔ)器,存儲(chǔ)DFA中頻繁被訪問的狀態(tài)表項(xiàng),每個(gè)硬件引擎對(duì)應(yīng)一個(gè)專有的RAM塊,硬件引擎之間互不干擾。另外,F(xiàn)PGA中RAM通常是雙端口結(jié)構(gòu),兩個(gè)讀操作可以并行地進(jìn)行。而匹配操作全是讀操作,因此每個(gè)將每個(gè)RAM塊對(duì)應(yīng)兩個(gè)引擎,使性能翻倍。使用外置的DDR3SDRAM作為外置存儲(chǔ)器,存儲(chǔ)hybrid-FA的整個(gè)狀態(tài)表項(xiàng)。在NPU部分,為隱藏訪存時(shí)延,同樣實(shí)例化盡可能多的匹配引擎。



      技術(shù)實(shí)現(xiàn)要素:

      考慮到狀態(tài)爆炸與匹配性能兩方面的要求,采用hybird-FA自動(dòng)機(jī),設(shè)計(jì)了一個(gè)FPGA+NPU的混合體系結(jié)構(gòu)及方法。通過流水化結(jié)構(gòu)將hybrid-FA的DFA部分處理和NFA部分處理分離。DFA部分任務(wù)量大但處理效率高,NFA部分效率低但任務(wù)量也少,以此實(shí)現(xiàn)兩個(gè)流水的均衡。FPGA部分采用層次化存儲(chǔ)和并行引擎的方式最大化提升流水段的性能,NPU部分實(shí)例化盡可能多的引擎來隱藏訪存時(shí)延。該方案可有效地解決狀態(tài)爆炸下匹配性能問題,為高速骨干網(wǎng)絡(luò)安全設(shè)備的深度報(bào)文檢測(cè)提供技術(shù)手段和工具。

      為解決上述技術(shù)問題,技術(shù)方案包括以下系統(tǒng)和方法:

      一、FPGA+NPU的高速正則表達(dá)式匹配混合系統(tǒng)結(jié)構(gòu)

      本發(fā)明的系統(tǒng)結(jié)構(gòu)圖如圖1所示。核心的系統(tǒng)結(jié)構(gòu)主要包括FPGA和NPU兩部分,匹配任務(wù)由FPGA上的硬件引擎和NPU上的軟件引擎協(xié)同完成。硬件引擎由FPGA上硬件邏輯編譯而成,功能固定,軟件引擎指NPU上的匹配線程。本發(fā)明的正則表達(dá)式匹配是以存儲(chǔ)為中心的,即匹配過程是基于訪問自動(dòng)機(jī)狀態(tài)表來驅(qū)動(dòng)的。DDR3SDRAM作為外置存儲(chǔ)器存放hybrid-FA的整個(gè)狀態(tài)表,該狀態(tài)表被所有的硬件引擎和軟件引擎共享。此外對(duì)每個(gè)硬件引擎,我們還用FPGA上的片上RAM為其開辟專用的bank作為一級(jí)緩存,每個(gè)bank均存放訪問頻率最高的前100個(gè)DFA狀態(tài)。FPGA上還有一個(gè)任務(wù)傳送模塊,用于將硬件引擎未完成的匹配任務(wù)傳遞給NPU。對(duì)應(yīng)的NPU上有一個(gè)任務(wù)分配線程,用于將硬件引擎未完成的任務(wù)分配給空閑的線程。自動(dòng)機(jī)的編譯及配置是在系統(tǒng)的主CPU中完成的,未在圖中完整表示。

      二、基于FPGA+NPU混合匹配架構(gòu)的正則表達(dá)式匹配方法

      圖2是本發(fā)明的軟硬件匹配流程圖。匹配流程主要包括硬件引擎和軟件引擎兩個(gè)流水段,對(duì)給定報(bào)文的匹配中只有訪問到邊界狀態(tài)時(shí)才會(huì)激活相應(yīng)的軟件流水段工作。并且,硬件流水段和軟件流水段是松散連接的,并不是一一對(duì)應(yīng)的關(guān)系。硬件流水段只需要把未完成的任務(wù)交給NPU即可,NPU會(huì)將此任務(wù)再分配給空閑的軟件線程。匹配工作從硬件引擎開始,硬件引擎每次從報(bào)文負(fù)載中讀取一個(gè)字符,根據(jù)當(dāng)前DFA狀態(tài)和該字符更新DFA狀態(tài),這個(gè)更新的操作可能發(fā)生在RAM中,也可能發(fā)生在SDRAM中,取決于源DFA狀態(tài)是否為高頻DFA狀態(tài)。每更新一次狀態(tài)就需要判斷當(dāng)前狀態(tài)是否為終止?fàn)顟B(tài),若為終止?fàn)顟B(tài)則將終止?fàn)顟B(tài)對(duì)應(yīng)的規(guī)則ID寫入結(jié)果緩存區(qū)。然后再判斷是否為邊界狀態(tài),如果為邊界狀態(tài)說明NFA狀態(tài)被激活,此時(shí)硬件引擎將當(dāng)前狀態(tài)及剩余任務(wù)發(fā)送給NPU,硬件引擎可以繼續(xù)處理下一個(gè)報(bào)文。

      軟件引擎工作流程如下,首先從NPU的任務(wù)分配線程中領(lǐng)取任務(wù)。隨后每次從負(fù)載中讀取一個(gè)字符,更新DFA狀態(tài)和NFA狀態(tài),NPU的更新操作均需訪問外置的DDR3SDRAM。每次DFA狀態(tài)更新后還要判斷其是否為邊界狀態(tài),若為邊界狀態(tài),則需要將邊界狀態(tài)對(duì)應(yīng)的NFA狀態(tài)集加入到當(dāng)前NFA狀態(tài)集。同硬件引擎,若更新后的DFA狀態(tài)或NFA狀態(tài)中有終止?fàn)顟B(tài)的,則需將終止?fàn)顟B(tài)對(duì)應(yīng)的規(guī)則ID寫入到結(jié)果緩沖區(qū)中。

      該方法主要包括以下步驟:

      第一步、編譯規(guī)則集,生成自動(dòng)機(jī)

      1.1使用KEN THOMPSON在1968年6月計(jì)算機(jī)通訊(Communications of the ACM)第11卷發(fā)表的論文“正則表達(dá)式搜索算法(Regular Expression Search Algorithm)”中提出的正則表達(dá)式編譯算法將正則表達(dá)式模式集編譯成一個(gè)NFA。

      1.2使用Micheal Becchi在2007年ACM CoNEXT會(huì)議中的論文“一個(gè)適用于深度報(bào)文檢測(cè)的混合自動(dòng)機(jī)(A hybrid finite automaton for practical deep packet inspection)”中提出的算法將NFA編譯成混合自動(dòng)機(jī)hybrid-FA。Hybrid-FA的數(shù)據(jù)結(jié)構(gòu)主要包括DFA、NFA和邊界DFA狀態(tài)與NFA狀態(tài)對(duì)應(yīng)關(guān)系。其中DFA是一個(gè)二維數(shù)組,數(shù)組行代表DFA狀態(tài)標(biāo)識(shí),數(shù)組列對(duì)應(yīng)256個(gè)ASCII字符的輸入,數(shù)組元素代表在對(duì)應(yīng)的狀態(tài)和輸入下跳轉(zhuǎn)到的下一個(gè)狀態(tài)。NFA狀態(tài)是以矩陣加鏈表的形式存儲(chǔ),與DFA區(qū)別是每個(gè)矩陣元素是一個(gè)鏈表,該鏈表指向的是下一跳的狀態(tài)集,而不是單個(gè)狀態(tài)。Hybrid-FA中有一類特殊的DFA狀態(tài)叫邊界狀態(tài),每個(gè)邊界狀態(tài)映射到若干個(gè)NFA狀態(tài),當(dāng)邊界狀態(tài)活躍時(shí),其對(duì)應(yīng)的NFA狀態(tài)就被激活。

      1.3為提升匹配效率對(duì)混合自動(dòng)機(jī)的數(shù)據(jù)結(jié)構(gòu)進(jìn)一步改進(jìn)。取每個(gè)DFA狀態(tài)ID前兩位作為標(biāo)識(shí)位,第一位代表該DFA狀態(tài)是否是終止?fàn)顟B(tài),第二位代表該DFA狀態(tài)是否為邊界狀態(tài)。類似地,取NFA狀態(tài)ID的第一位來表示該NFA狀態(tài)是否是終止?fàn)顟B(tài)。

      第二步、求解hybird-FA中經(jīng)常被訪問的DFA狀態(tài),即高頻DFA狀態(tài)

      2.1在實(shí)踐中,對(duì)于高頻DFA狀態(tài)的計(jì)算我們采用了一種簡(jiǎn)便高效的方法。首先,生成隨機(jī)長(zhǎng)度和內(nèi)容的報(bào)文100MB。其次,使用編譯好的hybrid-FA對(duì)隨機(jī)報(bào)文進(jìn)行匹配。統(tǒng)計(jì)匹配過程中每個(gè)DFA狀態(tài)的訪問次數(shù),將前100個(gè)DFA狀態(tài)作為選定的高頻狀態(tài)。在具體的應(yīng)用中,可以直接用實(shí)際應(yīng)用中的報(bào)文進(jìn)行匹配來確定高頻DFA狀態(tài),效果比隨機(jī)報(bào)文更好。

      2.2狀態(tài)標(biāo)識(shí)重分配。由于高頻DFA狀態(tài)標(biāo)識(shí)號(hào)是分散的,為方便高頻狀態(tài)的訪問及配置,需將狀態(tài)的標(biāo)識(shí)ID重新分配。對(duì)DFA狀態(tài)表進(jìn)行100次遍歷,第i次遍歷時(shí)將訪問概率排名第i的表項(xiàng)與當(dāng)前標(biāo)識(shí)ID為i的狀態(tài)表項(xiàng)互換,每次互換需要掃描一次DFA狀態(tài)表項(xiàng),另外如果涉及到邊界狀態(tài)的標(biāo)識(shí)更換,同時(shí)需要更換邊界狀態(tài)與NFA狀態(tài)的對(duì)應(yīng)關(guān)系。

      第三步、混合自動(dòng)機(jī)狀態(tài)表項(xiàng)配置

      3.1混合自動(dòng)機(jī)狀態(tài)表項(xiàng)包括以下幾個(gè)部分,頭部DFA狀態(tài)表、NFA狀態(tài)表、邊界狀態(tài)對(duì)應(yīng)的NFA集合表、終止?fàn)顟B(tài)對(duì)應(yīng)的規(guī)則ID表。其中DFA狀態(tài)表是優(yōu)化訪存的核心,根據(jù)實(shí)際DFA狀態(tài)數(shù)適當(dāng)分配DFA的ID標(biāo)識(shí)的比特位,注意需要留出兩個(gè)比特位作為終止?fàn)顟B(tài)和邊界狀態(tài)的標(biāo)識(shí)。計(jì)算100個(gè)DFA狀態(tài)表項(xiàng)的空間需求,按該空間需求將FPGA的片上RAM劃分成若干個(gè)RAM塊,對(duì)每個(gè)RAM塊實(shí)例化兩個(gè)對(duì)應(yīng)的匹配引擎。

      3.2Hybrid-FA剩余的狀態(tài)表項(xiàng),包括全部的DFA狀態(tài)表、NFA狀態(tài)表、邊界狀態(tài)對(duì)應(yīng)的NFA集合表、終止?fàn)顟B(tài)對(duì)應(yīng)的規(guī)則ID表均配置到外置的DDR3SDRAM中。由于FPGA片上RAM存儲(chǔ)的表項(xiàng)是固定配置的,匹配過程中不存在對(duì)表項(xiàng)的寫或替換操作。另外,每個(gè)RAM塊是塊是專享的,而DDR3SDRAM中的表項(xiàng)是共享的。

      第四步、報(bào)文匹配處理

      報(bào)文處理流程主要包括兩個(gè)步驟,報(bào)文接收與報(bào)文匹配,報(bào)文匹配又分為FPGA部分硬件引擎的匹配和NPU部分的軟件引擎匹配,注意只有在NFA狀態(tài)激活時(shí)才需要進(jìn)行NPU部分的匹配。

      報(bào)文接收需要設(shè)置相應(yīng)的報(bào)文緩存區(qū),設(shè)有m個(gè)硬件引擎,則需開辟m個(gè)報(bào)文緩存區(qū),每個(gè)引擎對(duì)應(yīng)一個(gè)專有的報(bào)文緩存區(qū),另外還需要一個(gè)結(jié)果緩存區(qū)來緩存命中的規(guī)則。報(bào)文緩存區(qū)為循環(huán)隊(duì)列,隊(duì)列寬度設(shè)置為2KB,長(zhǎng)度可以根據(jù)測(cè)試結(jié)果來確定。每個(gè)緩沖區(qū)都包括一個(gè)頭指針和一個(gè)尾指針,分別指向下一個(gè)待處理的報(bào)文和下一個(gè)接收?qǐng)?bào)文的位置。

      4.1報(bào)文接收線程直接從鏈路上捕獲報(bào)文,經(jīng)過如下處理后轉(zhuǎn)存至CPU內(nèi)在中的報(bào)文緩沖區(qū)。

      4.1.1去掉IP和TCP層報(bào)文頭信息,只保留報(bào)文的負(fù)載部分。

      4.1.2對(duì)報(bào)文進(jìn)行填充處理。設(shè)報(bào)文內(nèi)存緩沖區(qū)的長(zhǎng)度為2KB,實(shí)際上報(bào)文長(zhǎng)度不會(huì)超過1560字節(jié),在負(fù)載的尾部填充0,使負(fù)載長(zhǎng)度達(dá)到2KB。

      4.1.3根據(jù)報(bào)文緩沖區(qū)的空閑情況,將報(bào)文分配置空閑率最高的那個(gè)報(bào)文緩沖區(qū),同時(shí)將其當(dāng)前尾指針加1。若所有緩沖區(qū)均滿則說明當(dāng)前已達(dá)到性能上限,丟棄該報(bào)文并記錄報(bào)告。

      4.1.4轉(zhuǎn)4.1.1。

      4.2報(bào)文匹配流程(FPGA部分)

      4.2.1每個(gè)硬件匹配引擎根據(jù)其頭指針,從對(duì)應(yīng)的報(bào)文緩沖區(qū)取出寬度為2K的一段報(bào)文,將初始狀態(tài)0設(shè)置為DFA的當(dāng)前狀態(tài)。

      4.2.2讀取報(bào)文負(fù)載的下一個(gè)字符。

      4.2.3根據(jù)DFA當(dāng)前狀態(tài)和當(dāng)前輸入字符訪問狀態(tài)表。若當(dāng)前狀態(tài)ID小于100,則說明為存放在RAM中的高頻狀態(tài),根據(jù)狀態(tài)ID和輸入字符計(jì)算相應(yīng)地址,并從相應(yīng)RAM中讀取下一跳DFA狀態(tài)標(biāo)識(shí)作為當(dāng)前狀態(tài)。否則,說明當(dāng)前狀態(tài)存放在SDRAM中,根據(jù)當(dāng)前狀態(tài)及輸入字符計(jì)算相應(yīng)地址,并從SDRAM中讀取下一跳DFA狀態(tài)標(biāo)識(shí)作為當(dāng)前狀態(tài)。

      4.2.4判斷當(dāng)前DFA狀態(tài)是否為終止?fàn)顟B(tài)或邊界狀態(tài)。若當(dāng)前狀態(tài)標(biāo)識(shí)的第一個(gè)比特位為1,說明當(dāng)前狀態(tài)為終止?fàn)顟B(tài),根據(jù)狀態(tài)ID從SDRAM的狀態(tài)規(guī)則對(duì)應(yīng)表中讀取相應(yīng)的規(guī)則ID,并將規(guī)則ID寫入到結(jié)果緩存區(qū)中,跳過當(dāng)前報(bào)文,轉(zhuǎn)至4.2.1。若當(dāng)前狀態(tài)標(biāo)識(shí)的第二個(gè)比特位為1,說明當(dāng)前DFA狀態(tài)為邊界狀態(tài),硬件引擎將當(dāng)前DFA狀態(tài)和報(bào)文負(fù)載的未處理部分傳遞給NPU部分,由NPU完成剩余部分的匹配,硬件引擎跳轉(zhuǎn)至4.2.1。

      4.2.5若當(dāng)前字符為報(bào)文負(fù)載的最后一個(gè)字符,說明當(dāng)前報(bào)文匹配完畢,跳轉(zhuǎn)至4.2.1讀取下一個(gè)報(bào)文負(fù)載,否則跳轉(zhuǎn)至4.2.2讀取下一個(gè)字符。

      4.3報(bào)文匹配流程(NPU部分),NPU部分的軟件引擎的匹配與FPGA部分的硬件引擎的匹配是相對(duì)獨(dú)立的流水段,沒有一一對(duì)應(yīng)的關(guān)系。NPU部分實(shí)例化多個(gè)軟件匹配線程及一個(gè)任務(wù)分配線程,硬件引擎將匹配任務(wù)發(fā)送到軟件引擎的緩沖區(qū),任務(wù)分配線程每次從緩沖區(qū)中讀取一個(gè)任務(wù)(即DFA狀態(tài)和報(bào)文負(fù)載對(duì)),然后根據(jù)各匹配線程忙閑情況將該任務(wù)分配到相應(yīng)的匹配線程的任務(wù)緩沖區(qū)。各匹配線程的工作流程如下:

      4.3.1從相應(yīng)的任務(wù)緩沖區(qū)讀取下一個(gè)任務(wù),讀取邊界DFA狀態(tài),并從SDRAM中讀取該邊界狀態(tài)對(duì)應(yīng)的活躍NFA狀態(tài)集,將該DFA狀態(tài)和NFA狀態(tài)集作為當(dāng)前活躍狀態(tài)集。判斷當(dāng)前NFA狀態(tài)集中是否有終止?fàn)顟B(tài),若有則從SDRAM中讀取該NFA狀態(tài)對(duì)應(yīng)的規(guī)則ID,將該規(guī)則ID寫入到結(jié)果緩沖區(qū)中,轉(zhuǎn)4.3.1。否則,轉(zhuǎn)4.3.2。

      4.3.2讀取負(fù)載的下一個(gè)字符。

      4.3.3對(duì)每一個(gè)當(dāng)前活躍的NFA狀態(tài),根據(jù)輸入字符從SDRAM中查找其下一跳NFA狀態(tài)集,并將其作為新的活躍NFA狀態(tài)集。

      4.3.4根據(jù)當(dāng)前DFA狀態(tài)和輸入字符從SDRAM中查找下一跳DFA狀態(tài),并將其作為新的當(dāng)前DFA狀態(tài)。根據(jù)其標(biāo)識(shí)的第一個(gè)比特位判斷其是否為終止?fàn)顟B(tài),若為終止?fàn)顟B(tài)則根據(jù)DFA狀態(tài)標(biāo)識(shí)從SDRAM中讀取其對(duì)應(yīng)的規(guī)則ID,并將規(guī)則ID寫入結(jié)果緩沖區(qū)中,跳過當(dāng)前報(bào)文,轉(zhuǎn)4.3.1。根據(jù)DFA狀態(tài)標(biāo)識(shí)的第二位判斷其是否為邊界狀態(tài),若為邊界狀態(tài),則從SDRAM中讀取對(duì)應(yīng)的NFA狀態(tài)集,并將該NFA狀態(tài)集加入到4.3.3的活躍NFA狀態(tài)集。

      4.3.5根據(jù)狀態(tài)標(biāo)識(shí)的第一比特位判斷當(dāng)前NFA狀態(tài)集中是否有終止?fàn)顟B(tài),若有終止?fàn)顟B(tài)則根據(jù)標(biāo)識(shí)從SDRAM中讀取對(duì)應(yīng)的規(guī)則ID,并將規(guī)則ID寫入結(jié)果緩沖區(qū)中,跳過當(dāng)前報(bào)文,轉(zhuǎn)4.3.1。否則,轉(zhuǎn)4.3.2。

      綜合起來,本發(fā)明可達(dá)到以下效果:

      1.采用hybrid-FA應(yīng)對(duì)規(guī)則數(shù)量和復(fù)雜度提升帶來的狀態(tài)爆炸問題。

      2.使用FPGA+NPU的混合體系結(jié)構(gòu)將hybird-FA中的高效的DFA匹配和低效的NFA匹配分離并且流水。自動(dòng)機(jī)本身的特征保證FPGA部分的硬件引擎處理大部分負(fù)載,NPU部分處理極小一部分負(fù)載。因?yàn)镕PGA和NPU是流水處理的,并且NPU任務(wù)量較小,只要保證FPGA部分的性能即可。

      3.FPGA部分依據(jù)DFA狀態(tài)訪問規(guī)律設(shè)置片上RAM加片外SDRAM的方式構(gòu)建兩級(jí)存儲(chǔ)器,DFA訪問特點(diǎn)保證絕大部分訪存可以在片上RAM完成,因此可極大地提高訪存性能。另外,借助RAM雙端口實(shí)例化2倍的匹配引擎,大大提高并行度。

      附圖說明

      圖1是本發(fā)明的系統(tǒng)結(jié)構(gòu)圖。

      圖2是本發(fā)明的軟硬件匹配流程圖。

      具體實(shí)施方式

      第一步編譯規(guī)則集,生成自動(dòng)機(jī)

      1.1使用KEN THOMPSON在1968年6月計(jì)算機(jī)通訊(Communications of the ACM)第11卷發(fā)表的論文“正則表達(dá)式搜索算法(Regular Expression Search Algorithm)”中提出的正則表達(dá)式編譯算法將正則表達(dá)式模式集編譯成一個(gè)NFA。

      1.2使用Micheal Becchi在2007年ACM CoNEXT會(huì)議中的論文“一個(gè)適用于深度報(bào)文檢測(cè)的混合自動(dòng)機(jī)(A hybrid finite automaton for practical deep packet inspection)”中提出的算法將NFA編譯成混合自動(dòng)機(jī)hybrid-FA。Hybrid-FA的數(shù)據(jù)結(jié)構(gòu)主要包括DFA、NFA和邊界DFA狀態(tài)與NFA狀態(tài)對(duì)應(yīng)關(guān)系。其中DFA是一個(gè)二維數(shù)組,數(shù)組行代表DFA狀態(tài)標(biāo)識(shí),數(shù)組列對(duì)應(yīng)256個(gè)ASCII字符的輸入,數(shù)組元素代表在對(duì)應(yīng)的狀態(tài)和輸入下跳轉(zhuǎn)到的下一個(gè)狀態(tài)。NFA狀態(tài)是以矩陣加鏈表的形式存儲(chǔ),與DFA區(qū)別是每個(gè)矩陣元素是一個(gè)鏈表,該鏈表指向的是下一跳的狀態(tài)集,而不是單個(gè)狀態(tài)。Hybrid-FA中有一類特殊的DFA狀態(tài)叫邊界狀態(tài),每個(gè)邊界狀態(tài)映射到若干個(gè)NFA狀態(tài),當(dāng)邊界狀態(tài)活躍時(shí),其對(duì)應(yīng)的NFA狀態(tài)就被激活。

      1.3為提升匹配效率對(duì)混合自動(dòng)機(jī)的數(shù)據(jù)結(jié)構(gòu)進(jìn)一步改進(jìn)。取每個(gè)DFA狀態(tài)ID前兩位作為標(biāo)識(shí)位,第一位代表該DFA狀態(tài)是否是終止?fàn)顟B(tài),第二位代表該DFA狀態(tài)是否為邊界狀態(tài)。類似地,取NFA狀態(tài)ID的第一位來表示該NFA狀態(tài)是否是終止?fàn)顟B(tài)。

      第二步求解hybird-FA中經(jīng)常被訪問的DFA狀態(tài),即高頻DFA狀態(tài)

      2.1在實(shí)踐中,對(duì)于高頻DFA狀態(tài)的計(jì)算我們采用了一種簡(jiǎn)便高效的方法。首先,生成隨機(jī)長(zhǎng)度和內(nèi)容的報(bào)文100MB。其次,使用編譯好的hybrid-FA對(duì)隨機(jī)報(bào)文進(jìn)行匹配。統(tǒng)計(jì)匹配過程中每個(gè)DFA狀態(tài)的訪問次數(shù),將前100個(gè)DFA狀態(tài)作為選定的高頻狀態(tài)。在具體的應(yīng)用中,可以直接用實(shí)際應(yīng)用中的報(bào)文進(jìn)行匹配來確定高頻DFA狀態(tài),效果比隨機(jī)報(bào)文更好。

      2.2狀態(tài)標(biāo)識(shí)重分配。由于高頻DFA狀態(tài)標(biāo)識(shí)號(hào)是分散的,為方便高頻狀態(tài)的訪問及配置,需將狀態(tài)的標(biāo)識(shí)ID重新分配。對(duì)DFA狀態(tài)表進(jìn)行100次遍歷,第i次遍歷時(shí)將訪問概率排名第i的表項(xiàng)與當(dāng)前標(biāo)識(shí)ID為i的狀態(tài)表項(xiàng)互換,每次互換需要掃描一次DFA狀態(tài)表項(xiàng),另外如果涉及到邊界狀態(tài)的標(biāo)識(shí)更換,同時(shí)需要更換邊界狀態(tài)與NFA狀態(tài)的對(duì)應(yīng)關(guān)系。

      第三步混合自動(dòng)機(jī)狀態(tài)表項(xiàng)配置

      3.1混合自動(dòng)機(jī)狀態(tài)表項(xiàng)包括以下幾個(gè)部分,頭部DFA狀態(tài)表、NFA狀態(tài)表、邊界狀態(tài)對(duì)應(yīng)的NFA集合表、終止?fàn)顟B(tài)對(duì)應(yīng)的規(guī)則ID表。其中DFA狀態(tài)表是優(yōu)化訪存的核心,根據(jù)實(shí)際DFA狀態(tài)數(shù)適當(dāng)分配DFA的ID標(biāo)識(shí)的比特位,注意需要留出兩個(gè)比特位作為終止?fàn)顟B(tài)和邊界狀態(tài)的標(biāo)識(shí)。計(jì)算100個(gè)DFA狀態(tài)表項(xiàng)的空間需求,按該空間需求將FPGA的片上RAM劃分成若干個(gè)RAM塊,對(duì)每個(gè)RAM塊實(shí)例化兩個(gè)對(duì)應(yīng)的匹配引擎。

      3.2Hybrid-FA剩余的狀態(tài)表項(xiàng),包括全部的DFA狀態(tài)表、NFA狀態(tài)表、邊界狀態(tài)對(duì)應(yīng)的NFA集合表、終止?fàn)顟B(tài)對(duì)應(yīng)的規(guī)則ID表均配置到外置的DDR3SDRAM中。由于FPGA片上RAM存儲(chǔ)的表項(xiàng)是固定配置的,匹配過程中不存在對(duì)表項(xiàng)的寫或替換操作。另外,每個(gè)RAM塊是塊是專享的,而DDR3SDRAM中的表項(xiàng)是共享的。

      第四步報(bào)文匹配處理

      報(bào)文處理流程主要包括兩個(gè)步驟,報(bào)文接收與報(bào)文匹配,報(bào)文匹配又分為FPGA部分硬件引擎的匹配和NPU部分的軟件引擎匹配,注意只有在NFA狀態(tài)激活時(shí)才需要進(jìn)行NPU部分的匹配。

      報(bào)文接收需要設(shè)置相應(yīng)的報(bào)文緩存區(qū),設(shè)有m個(gè)硬件引擎,則需開辟m個(gè)報(bào)文緩存區(qū),每個(gè)引擎對(duì)應(yīng)一個(gè)專有的報(bào)文緩存區(qū),另外還需要一個(gè)結(jié)果緩存區(qū)來緩存命中的規(guī)則。報(bào)文緩存區(qū)為循環(huán)隊(duì)列,隊(duì)列寬度設(shè)置為2KB,長(zhǎng)度可以根據(jù)測(cè)試結(jié)果來確定。每個(gè)緩沖區(qū)都包括一個(gè)頭指針和一個(gè)尾指針,分別指向下一個(gè)待處理的報(bào)文和下一個(gè)接收?qǐng)?bào)文的位置。

      4.1報(bào)文接收線程直接從鏈路上捕獲報(bào)文,經(jīng)過如下處理后轉(zhuǎn)存至CPU內(nèi)在中的報(bào)文緩沖區(qū)。

      4.1.1去掉IP和TCP層報(bào)文頭信息,只保留報(bào)文的負(fù)載部分。

      4.1.2對(duì)報(bào)文進(jìn)行填充處理。設(shè)報(bào)文內(nèi)存緩沖區(qū)的長(zhǎng)度為2KB,實(shí)際上報(bào)文長(zhǎng)度不會(huì)超過1560字節(jié),在負(fù)載的尾部填充0,使負(fù)載長(zhǎng)度達(dá)到2KB。

      4.1.3根據(jù)報(bào)文緩沖區(qū)的空閑情況,將報(bào)文分配置空閑率最高的那個(gè)報(bào)文緩沖區(qū),同時(shí)將其當(dāng)前尾指針加1。若所有緩沖區(qū)均滿則說明當(dāng)前已達(dá)到性能上限,丟棄該報(bào)文并記錄報(bào)告。

      4.1.4轉(zhuǎn)4.1.1。

      4.2報(bào)文匹配流程(FPGA部分)

      4.2.1每個(gè)硬件匹配引擎根據(jù)其頭指針,從對(duì)應(yīng)的報(bào)文緩沖區(qū)取出寬度為2K的一段報(bào)文,將初始狀態(tài)0設(shè)置為DFA的當(dāng)前狀態(tài)。

      4.2.2讀取報(bào)文負(fù)載的下一個(gè)字符。

      4.2.3根據(jù)DFA當(dāng)前狀態(tài)和當(dāng)前輸入字符訪問狀態(tài)表。若當(dāng)前狀態(tài)ID小于100,則說明為存放在RAM中的高頻狀態(tài),根據(jù)狀態(tài)ID和輸入字符計(jì)算相應(yīng)地址,并從相應(yīng)RAM中讀取下一跳DFA狀態(tài)標(biāo)識(shí)作為當(dāng)前狀態(tài)。否則,說明當(dāng)前狀態(tài)存放在SDRAM中,根據(jù)當(dāng)前狀態(tài)及輸入字符計(jì)算相應(yīng)地址,并從SDRAM中讀取下一跳DFA狀態(tài)標(biāo)識(shí)作為當(dāng)前狀態(tài)。

      4.2.4判斷當(dāng)前DFA狀態(tài)是否為終止?fàn)顟B(tài)或邊界狀態(tài)。若當(dāng)前狀態(tài)標(biāo)識(shí)的第一個(gè)比特位為1,說明當(dāng)前狀態(tài)為終止?fàn)顟B(tài),根據(jù)狀態(tài)ID從SDRAM的狀態(tài)規(guī)則對(duì)應(yīng)表中讀取相應(yīng)的規(guī)則ID,并將規(guī)則ID寫入到結(jié)果緩存區(qū)中,跳過當(dāng)前報(bào)文,轉(zhuǎn)至4.2.1。若當(dāng)前狀態(tài)標(biāo)識(shí)的第二個(gè)比特位為1,說明當(dāng)前DFA狀態(tài)為邊界狀態(tài),硬件引擎將當(dāng)前DFA狀態(tài)和報(bào)文負(fù)載的未處理部分傳遞給NPU部分,由NPU完成剩余部分的匹配,硬件引擎跳轉(zhuǎn)至4.2.1。

      4.2.5若當(dāng)前字符為報(bào)文負(fù)載的最后一個(gè)字符,說明當(dāng)前報(bào)文匹配完畢,跳轉(zhuǎn)至4.2.1讀取下一個(gè)報(bào)文負(fù)載,否則跳轉(zhuǎn)至4.2.2讀取下一個(gè)字符。

      4.3報(bào)文匹配流程(NPU部分),NPU部分的軟件引擎的匹配與FPGA部分的硬件引擎的匹配是相對(duì)獨(dú)立的流水段,沒有一一對(duì)應(yīng)的關(guān)系。NPU部分實(shí)例化多個(gè)軟件匹配線程及一個(gè)任務(wù)分配線程,硬件引擎將匹配任務(wù)發(fā)送到軟件引擎的緩沖區(qū),任務(wù)分配線程每次從緩沖區(qū)中讀取一個(gè)任務(wù)(即DFA狀態(tài)和報(bào)文負(fù)載對(duì)),然后根據(jù)各匹配線程忙閑情況將該任務(wù)分配到相應(yīng)的匹配線程的任務(wù)緩沖區(qū)。各匹配線程的工作流程如下:

      4.3.1從相應(yīng)的任務(wù)緩沖區(qū)讀取下一個(gè)任務(wù),讀取邊界DFA狀態(tài),并從SDRAM中讀取該邊界狀態(tài)對(duì)應(yīng)的活躍NFA狀態(tài)集,將該DFA狀態(tài)和NFA狀態(tài)集作為當(dāng)前活躍狀態(tài)集。判斷當(dāng)前NFA狀態(tài)集中是否有終止?fàn)顟B(tài),若有則從SDRAM中讀取該NFA狀態(tài)對(duì)應(yīng)的規(guī)則ID,將該規(guī)則ID寫入到結(jié)果緩沖區(qū)中,轉(zhuǎn)4.3.1。否則,轉(zhuǎn)4.3.2。

      4.3.2讀取負(fù)載的下一個(gè)字符。

      4.3.3對(duì)每一個(gè)當(dāng)前活躍的NFA狀態(tài),根據(jù)輸入字符從SDRAM中查找其下一跳NFA狀態(tài)集,并將其作為新的活躍NFA狀態(tài)集。

      4.3.4根據(jù)當(dāng)前DFA狀態(tài)和輸入字符從SDRAM中查找下一跳DFA狀態(tài),并將其作為新的當(dāng)前DFA狀態(tài)。根據(jù)其標(biāo)識(shí)的第一個(gè)比特位判斷其是否為終止?fàn)顟B(tài),若為終止?fàn)顟B(tài)則根據(jù)DFA狀態(tài)標(biāo)識(shí)從SDRAM中讀取其對(duì)應(yīng)的規(guī)則ID,并將規(guī)則ID寫入結(jié)果緩沖區(qū)中,跳過當(dāng)前報(bào)文,轉(zhuǎn)4.3.1。根據(jù)DFA狀態(tài)標(biāo)識(shí)的第二位判斷其是否為邊界狀態(tài),若為邊界狀態(tài),則從SDRAM中讀取對(duì)應(yīng)的NFA狀態(tài)集,并將該NFA狀態(tài)集加入到4.3.3的活躍NFA狀態(tài)集。

      4.3.5根據(jù)狀態(tài)標(biāo)識(shí)的第一比特位判斷當(dāng)前NFA狀態(tài)集中是否有終止?fàn)顟B(tài),若有終止?fàn)顟B(tài)則根據(jù)標(biāo)識(shí)從SDRAM中讀取對(duì)應(yīng)的規(guī)則ID,并將規(guī)則ID寫入結(jié)果緩沖區(qū)中,跳過當(dāng)前報(bào)文,轉(zhuǎn)4.3.1。否則,轉(zhuǎn)4.3.2。

      采用主流FPGA芯片和NPU芯片,在通用規(guī)則集L7、Snort下可達(dá)到20~30Gbps的正則表達(dá)式匹配性能,而當(dāng)前在復(fù)雜規(guī)則集下的單一體系結(jié)構(gòu)中,匹配性能均不超過10Gbps。相較于當(dāng)前正則表達(dá)式匹配結(jié)構(gòu)和方法,本發(fā)明可以將性能提升兩倍以上。本發(fā)明首次提出正則表達(dá)式匹配的混合架構(gòu),在狀態(tài)爆炸的前提下提供高速的匹配性能,目前尚無其它基于FPGA+NPU混合架構(gòu)的正則表達(dá)式匹配技術(shù)的研究成果。

      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1