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表: