整体原理
- 整体框架
- 包处理, 解析ip和基础端口信息
- 解析器插件,负责检测协议
nDPI改进机制
- 支持的协议越多,解析的参数越多,检测的时间越久。
- 在检测开始时一次性将所有协议初始化,无需运行过程的penalty。
- 流只解析一次,若第一次匹配不成功,保留流的解析信息。
- 针对未解析的流,nDPI先根据传输层协议类型和端口号,来猜测匹配的协议,提升匹配速度。
- 如果存在一个已经登记号的针对包的端口和协议的解析器,那就优先使用那个。
- 如果没有协议匹配这个包,那么后面的包页不会被检测。
- 一旦有协议匹配,那么就停止检测。
- 每个流需要检测的包的个数根据协议来确定,大多数是2~3个包,最多8个包。
- 使用Aho-Corasick算法来处理字符匹配。
- 内存使用:内存主要用于ndpi的配置和字符串的自动匹配,无自定义配置的情况下,使用210K内存,使用自定义配置时,会上升25KB。
- 记录每个流的信息,每个流大约占用1KB。