淺析nDPI中Hyperscan的集成方案
Labs 導讀
Hyperscan是英特爾推出的一款高性能的正則表達式匹配庫,非常適用于部署在諸如DPI/IPS/IDS解決方案中。nDPI 是目前應用較為廣泛的開源DPI源碼庫,將nDPI源碼進行二次開發部署到資源受限的路由器產品中時,其核心模塊耗費了大量的內存。
Part 01、 nDPI框架簡介
圖1 nDPI框架圖
nDPI是由ntop負責維護的一款非常流行的開源DPI庫,它同時支持Windows和Unix/Linux兩種系統,支持跨平臺體驗[1]。如圖一框架圖所示,nDPI庫主要由網絡數據采集模塊、數據預處理模塊、協議檢測匹配模塊及特征庫相關模塊組成。數據采集模塊從網卡實時采集數據或解析已有的pcap文件;數據預處理模塊負責對網絡數據進行接收、數據分組及數據整型及過濾;其中協議檢測匹配模塊是nDPI最核心的模塊,它根據現有的協議規則特征庫對整型后的報文數據進行規則匹配。匹配算法的性能及匹配過程中對內存及CPU等硬件資源的消耗對整個系統至關重要。
Part 02、 nDPI中Hyperscan的集成
圖2 集成了hYperscan的DPI框架圖
Hyperscan與nDPI的集成主要集中在以下兩個方面:
- 字符串多模匹配
nDPI中一個重要的匹配過程是字符串的多模匹配。字符串的多模匹配可以快速過濾掉無法匹配的規則以減少需要逐條匹配的規則數,從而提升匹配的性能。nDPI中使用了Aho-Corasick算法進行多字符串的匹配,由于原生Aho-Corasick算法,需要將所有規則轉化成Trie樹結構,因此占用較大的內存。而Hyperscan擁有自身優化過的匹配引擎進行匹配,大量減少了匹配過程中對內存的消耗。我們用Hyperscan替代了這一算法,降低了內存消耗及CPU占用率,并且帶來了顯著的性能提升。
- Http預處理
除了引擎的匹配算法的集成,我們在預處理器模塊中也添加了Hyperscan。在Http預處理時,利用了Hyperscan搜索相關關鍵字來進一步加速預處理的流程。
Part 03、 內存優化
我們選取了MT7981B芯片+OpenWrt系統作為測試平臺,采用了nDPI自帶的協議規則庫文件進行測試,同時以真實網卡采集到數據報文作為數據輸入。如圖三所示,原生nDPI內存消耗較大為56MB,而采用nDPI+Hyperscan的方案下,內存消耗降低為5.7MB,內存占用僅僅為原生nDPI的十分之一。
Part 04、 結論
經過Hyperscan集成后的nDPI在內存消耗上遠遠低于原始nDPI。現有嵌入式網絡設備產品中內存資源十分緊張,集成Hyperscan后的nDPI組件對內存資源的優化,有利于DPI及其相關產品在端側嵌入式網絡產品中的部署。