ndpi原理

整体原理

  1. 整体框架
  • 包处理, 解析ip和基础端口信息
  • 解析器插件,负责检测协议

nDPI改进机制

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