1. 什么是Running mode
1.1. 基本概念
Sruciata由线程、线程模块、队列组成。
- 数据包在线程间传递通过队列实现,线程由多个线程模块组成,每个线程模块实现一种功能
- 一个数据包可以由多个线程处理,数据包将通过队列传递到下一个线程。包每次由一个线程处理,但是引擎可以同时处理多个包
- 一个线程可以有一个或多个线程模块,如果包含多个模块,那么一次只能激活一个模块工作。
线程、模块和队列的排列方式称为运行模式
每一种运行模式都会初始化一些threads,queues等。模式的具体任务是由线程模块来完成
可以通过 ./suricata --list-runmodes
查看运行模式,运行模式又细分为autofp
, single
,wokers
1.2. 线程模块
线程模块是对packet处理任务的抽象。线程模块大概有以下几种:
- Receive模块:收集网络数据包,封装成Packet对象后将其传递给Decode线程模块2.
- Decode模块:
- 对Packet按协议4层模型(数据链路层、网络层、传输层、应用层)进行解码,
- 获取协议和负荷信息,解码完成后将 Packet传递给F