Ktrie + AC + Hyperscan

1, Ktrie的做用。對於掃描HTTP Request的某一個Field(head/body etc..) 的數據,咱們但願對應的數據能快速找到關注這個field的規則集合,Ktrie解決了這個問題。咱們解析HTTP 的body數據,經過匹配Ktrie中的"b-o-d-y"路徑,找到"y"葉子結點。算法

  初始化:Ktrie的每一個路徑(即從根節點到葉子結點)爲用於掃描的HTTP 某個Field(好比body/header/args etc..),葉子結點存儲了關注此Field的全部規則ID(通過排序),規則內容的地址排序

    建立AC節點。純正則的規則組合起來,用於hyperscan匹配,不涉及AC算法。將帶有模式串的規則中模式串提取出來,做爲Pattern添加到AC節點。數據

    根據全部的Pattern,構建goto表、fail表和output表。狀態數=全部Pattern的字符之和+1(表示狀態0);狀態表=goto[256字符] + failstate+matchlist;初始化全部的狀態表爲-1。集合

    goto表:它的創建相似於創建字典樹。對於每一個Pattern中的每一個字符肯定一個狀態,創建狀態s + Pattern中字符跳轉的下一個狀態。字典

    output表:對於每一個Pattern,最後一個狀態記錄狀態和Pattern的對於關係header

    初始化狀態0的fail表爲0,以前爲-1字符

    fail表:

相關文章
相關標籤/搜索