简介
StreamTCP是Suricata中用于实现TCP流跟踪(Tracking)和重组(Reassembly)的模块。
这个模块在Suricata的数据包处理流水线中是处于哪个位置呢?继续以前面介绍的Pcap实时类型的autofp模式为例:
当数据包由抓包线程的ReceivePcap模块获取,再经过线程内下一个模块DecodePcap完成解码后,最终将在TmThreadsSlotProcessPkt中调用tmqh_out,也即上一节介绍的TmqhOutputFlowActivePackets函数,把数据包送完输出队列,让后续线程再去继续处理。
而在对main()的介绍中,我们知道当前模式下,下一级线程配置的模块依次为:StreamTCP、Detect、RespondReject和Output相关模块。因此,StreamTCP将是数据包解码完成后第一个流经的模块。
配置初始化
StreamTcpInitConfig在main()中被调用,完成StreamTCP的配置初始化。
该函数首先会填充模块的全局配置结构TcpStreamCnf,其重要字段包括:
字段 | 含义 |
memcap | stream跟踪功能所能使用的最大内存,默认为32MB。 |
prealloc_sessions | 为每个stream线程预分配的session数量。 |
flags | 标志,目前只用到CHECKSUM_VALIDATION。 |
midstream | 是否允许接手midstream session,默认为关闭。 |
async_oneside | 是否打开异步stream处理,默认为关闭。 |
max_synack_queued | 能存放在队列中的SYN/ACK的最大数量,默认为5. |
reassembly_memcap |
重组功能所能使用的最大内存,默认为64MB。 |
reassembly_depth | 重组深度?默认为1MB。 |
ssn_init_flags | session标志 |
segment_init_flags | segment标志 |
reassembly_toserver_chunk_size | 待填 |
reassembly_tocli |