作者:李坤明,單位:中國移動智慧家庭運營中心
Hyperscan是英特爾推出的一款高性能的正則表達式匹配庫,非常適用于部署在諸如DPI/IPS/IDS解決方案中。nDPI 是目前應(yīng)用較為廣泛的開源DPI源碼庫,將nDPI源碼進行二次開發(fā)部署到資源受限的路由器產(chǎn)品中時,其核心模塊耗費了大量的內(nèi)存。因而本文將英特爾Hyperscan正則表達式匹配庫集成到nDPI中,來顯著減少其資源消耗并提升其在路由器產(chǎn)品中的檢測性能。
Part 01●??nDPI框架簡介?●
圖1 nDPI框架圖
nDPI是由ntop負責(zé)維護的一款非常流行的開源DPI庫,它同時支持Windows和Unix/Linux兩種系統(tǒng),支持跨平臺體驗[1]。如圖一框架圖所示,nDPI庫主要由網(wǎng)絡(luò)數(shù)據(jù)采集模塊、數(shù)據(jù)預(yù)處理模塊、協(xié)議檢測匹配模塊及特征庫相關(guān)模塊組成。數(shù)據(jù)采集模塊從網(wǎng)卡實時采集數(shù)據(jù)或解析已有的pcap文件;數(shù)據(jù)預(yù)處理模塊負責(zé)對網(wǎng)絡(luò)數(shù)據(jù)進行接收、數(shù)據(jù)分組及數(shù)據(jù)整型及過濾;其中協(xié)議檢測匹配模塊是nDPI最核心的模塊,它根據(jù)現(xiàn)有的協(xié)議規(guī)則特征庫對整型后的報文數(shù)據(jù)進行規(guī)則匹配。匹配算法的性能及匹配過程中對內(nèi)存及CPU等硬件資源的消耗對整個系統(tǒng)至關(guān)重要。
Part 02●??nDPI中Hyperscan的集成?●
圖2 集成了hYperscan的DPI框架圖
Hyperscan與nDPI的集成主要集中在以下兩個方面:
字符串多模匹配
nDPI中一個重要的匹配過程是字符串的多模匹配。字符串的多模匹配可以快速過濾掉無法匹配的規(guī)則以減少需要逐條匹配的規(guī)則數(shù),從而提升匹配的性能。nDPI中使用了Aho-Corasick算法進行多字符串的匹配,由于原生Aho-Corasick算法,需要將所有規(guī)則轉(zhuǎn)化成Trie樹結(jié)構(gòu),因此占用較大的內(nèi)存。而Hyperscan擁有自身優(yōu)化過的匹配引擎進行匹配,大量減少了匹配過程中對內(nèi)存的消耗。我們用Hyperscan替代了這一算法,降低了內(nèi)存消耗及CPU占用率,并且?guī)砹孙@著的性能提升。
Http預(yù)處理
除了引擎的匹配算法的集成,我們在預(yù)處理器模塊中也添加了Hyperscan。在Http預(yù)處理時,利用了Hyperscan搜索相關(guān)關(guān)鍵字來進一步加速預(yù)處理的流程。
Part 03●??內(nèi)存優(yōu)化?●
我們選取了MT7981B芯片+OpenWrt系統(tǒng)作為測試平臺,采用了nDPI自帶的協(xié)議規(guī)則庫文件進行測試,同時以真實網(wǎng)卡采集到數(shù)據(jù)報文作為數(shù)據(jù)輸入。如圖三所示,原生nDPI內(nèi)存消耗較大為56MB,而采用nDPI+Hyperscan的方案下,內(nèi)存消耗降低為5.7MB,內(nèi)存占用僅僅為原生nDPI的十分之一。
圖3 內(nèi)存占用
Part 04●? 結(jié)論?●
經(jīng)過Hyperscan集成后的nDPI在內(nèi)存消耗上遠遠低于原始nDPI?,F(xiàn)有嵌入式網(wǎng)絡(luò)設(shè)備產(chǎn)品中內(nèi)存資源十分緊張,集成Hyperscan后的nDPI組件對內(nèi)存資源的優(yōu)化,有利于DPI及其相關(guān)產(chǎn)品在端側(cè)嵌入式網(wǎng)絡(luò)產(chǎn)品中的部署。
參考文獻
[1]?卞德康.基于深度包檢測的應(yīng)用層協(xié)議識別研究[D].合肥:安徽工業(yè)大學(xué).2017.