suricata 3.1 源码分析34 (FlowWorker处理流程3 - 流重用)
来源:互联网 发布:华为软件工程师 知乎 编辑:程序博客网 时间:2024/06/03 23:15
上一章提到了一个流重用的概念,这里主要说一下。根据code,所谓流重用仅仅重用了流的thread_id。其他内容都是新建流得来的,具体threa_id有什么作用以后看到了再分析,今天就说一下什么样的流可以被重用。
//这就是判断包所属的流是否能重用的函数int TcpSessionPacketSsnReuse(const Packet *p, const Flow *f, const void *tcp_ssn){ if (p->proto == IPPROTO_TCP && p->tcph != NULL) {/*判断包是不是一次会话中的第一个包,这里的会话可以理解为一次完整的tcp三次握手和四次挥手。*/ if (TcpSessionPacketIsStreamStarter(p) == 1) {/*这里判断包的流向,并根据流向以及对应流中的状态判断该流是否可重用流*/ if (TcpSessionReuseDoneEnough(p, f, tcp_ssn) == 1) { return 1; } } } return 0;}
/*判断包是否是会话的开始*/static int TcpSessionPacketIsStreamStarter(const Packet *p){/*包的flags为TH_SYN返回1*/ if (p->tcph->th_flags == TH_SYN) { SCLogDebug("packet %"PRIu64" is a stream starter: %02x", p->pcap_cnt, p->tcph->th_flags); return 1; }/*中间流且包的标志为TH_SYN|TH_ACK,返回1*/ if (stream_config.midstream == TRUE || stream_config.async_oneside == TRUE) { if (p->tcph->th_flags == (TH_SYN|TH_ACK)) { SCLogDebug("packet %"PRIu64" is a midstream stream starter: %02x", p->pcap_cnt, p->tcph->th_flags); return 1; } } return 0;}
/*通过会话的状态判断流是否可以被重用*/int TcpSessionReuseDoneEnough(const Packet *p, const Flow *f, const TcpSession *ssn){ if (p->tcph->th_flags == TH_SYN) { return TcpSessionReuseDoneEnoughSyn(p, f, ssn); } if (stream_config.midstream == TRUE || stream_config.async_oneside == TRUE) { if (p->tcph->th_flags == (TH_SYN|TH_ACK)) { return TcpSessionReuseDoneEnoughSynAck(p, f, ssn); } } return 0;}
0 0
- suricata 3.1 源码分析34 (FlowWorker处理流程3 - 流重用)
- suricata 3.1 源码分析35 (FlowWorker处理流程4 - 流重用函数)
- suricata 3.1 源码分析32 (FlowWorker处理流程1)
- suricata 3.1 源码分析33 (FlowWorker处理流程2 - FlowHandlePacket)
- suricata 3.1 源码分析30 (packet_pool处理流程)
- suricata 3.1 源码分析3
- suricata 3.1 源码分析21 (数据包处理1)
- suricata 3.1 源码分析22 (数据包处理2)
- suricata 3.1 源码分析13 (流初始化)
- suricata 3.1 源码分析14 (流查找分配)
- suricata 3.1 源码分析15 (流更新)
- suricata 3.1 源码分析31 (RespondReject)
- suricata 3.2 源码分析(IP数据包分片重组流程)
- suricata 3.1 源码分析1
- suricata 3.1 源码分析2
- suricata 3.1 源码分析4
- suricata 3.1 源码分析5
- suricata 3.1 源码分析6
- Lua中的模式
- 蓝鸥iOS从零基础到精通就业-OC语言入门 字典
- golang中fmt的'占位符'使用
- 前面的总结不太好,找了一篇总结的挺好的,仅供学习参考
- 求软键盘出现界面上推的距离可以自己控制的方法
- suricata 3.1 源码分析34 (FlowWorker处理流程3 - 流重用)
- python3 + django + selenium 安装教程
- 01-什么是项目团队
- Jupyter Notebook 的快捷键
- 粘滞会话、会话保持
- thinkphp config数据库配置安装
- 对数据库字段操作的sql
- 安卓Shortcuts修改教程
- 120个微信小程序源码