suricata 流管理
admin
2024-04-02 05:16:11
0

一、Flow

所有相同元组(协议,源IP,目的IP,源端口,目的端口)的包分组属于同一流。使用flow管理一个会话。

通常我们也指从一端到另一端的一次网络数据传输过程。其包含连接的建立,数据的传输。一条流往往指的是一次完成的数据传输,其包含了该过程中所有的数据包。但是一个连接可以有多个流,即在连接建立之后,可以有多次的数据传输。

二、Flow的管理

suricata实现了流管理机制来回收与重复利用Flow。suricata使用三个线程维护这三个队列(Flow哈希表,Flow备用队列,Flow回收队列)。

其中:

2.1 线程

        ①FlowManager线程:从流表中摘除超时的流放入回收队列,检查空闲队列长度是否为预设值,若过长则释放一部分,若过短则申请一部分。

// 根据配置创建flow_managers线程个数
void FlowManagerThreadSpawn()
{intmax_t setting = 1;(void)ConfGetInt("flow.managers", &setting);if (setting < 1 || setting > 1024) {FatalError(SC_ERR_INVALID_ARGUMENTS,"invalid flow.managers setting %"PRIdMAX, setting);}flowmgr_number = (uint32_t)setting;SCLogConfig("using %u flow manager threads", flowmgr_number);StatsRegisterGlobalCounter("flow.memuse", FlowGetMemuse);// 注册一个全局的原子的flow计数器flow_memusefor (uint32_t u = 0; u < flowmgr_number; u++) {char name[TM_THREAD_NAME_MAX];snprintf(name, sizeof(name), "%s#%02u", thread_name_flow_mgr, u+1);ThreadVars *tv_flowmgr = TmThreadCreateMgmtThreadByName(name,"FlowManager", 0);// 创建线程变量结构体BUG_ON(tv_flowmgr == NULL);if (tv_flowmgr == NULL) {FatalError(SC_ERR_FATAL, "flow manager thread creation failed");}if (TmThreadSpawn(tv_flowmgr) != TM_ECODE_OK) { // 根据生成的线程名创建线程FatalError(SC_ERR_FATAL, "flow manager thread spawn failed");}}return;
}

        ②FlowRecyler线程:从回收队列中摘除Flow,调用注册流输出模块的回掉,清空Flow信息,插入回收队列。

        ③FlowWorker线程

  • 对于新到达的包,在流表中查找其对应Flow结构,若存在则直接引用
  • 若流表中不存在对应此包的Flow结构,则按如下优先级获取一个新的Flow结构
    1. 从空闲队列中取出一个Flow结构
    2. 重新申请一个Flow结构
    3. 从流表中去除一个当前未被引用的Flow结构,清空其内容并重新插入流表

2.2 三种队列

Flow哈希表: 这个是FlowBucket *flow_hash 数组,数据大小为配置中的 flow_config 的 hash_size,其在数组中的每一个FlowBucket元素中都挂了一串之前数据包对应的Flow链队列。

Flow备用队列: static FlowSparePool *flow_spare_pool 备用池链队列,其每一个链pool中都挂载一个备用Flow队列。

Flow回收队列: FlowQueue flow_recycle_q 回收队列,挂载一个备用Flow队列。

2.3 Flow管理流程

①当一个数据包来到时,计算数据包对应的hash值

②在后续的模块中将使用这个hash 在Flow哈希表中找到 FlowBucket ,不同会话的hash值可能相同,所以不是比较hash相同来定位Flow,而是在篮子里顺序查找具有相同五元组和vlan的Flow,找到则利用此Flow

③若Flow哈希表中没有,则在Flow备用队列取出一个Flow, 或是新建一个Flow使用,同时把这个Flow插入到Flow哈希表


 

相关内容

热门资讯

求姓名藏头诗一首,给女朋友的,... 求姓名藏头诗一首,给女朋友的,她叫刘树红要古体诗七言那种,意境要美要押韵你乃本是天生仙,与我相聚下凡...
希望大家给我介绍几本关于人生经... 希望大家给我介绍几本关于人生经历方面的好书,谢谢了!!!《让方向更清晰!!》作者:爱琳·C卡瑟拉《《...
海贼王萨博在德雷斯罗萨回忆里得... 海贼王萨博在德雷斯罗萨回忆里得知艾斯的死讯是在哪集?没有具体说明在哪集,那只是个回忆片段而已。动漫里...
武林外传里佟掌柜儿时的好友说的... 武林外传里佟掌柜儿时的好友说的是什么地方的方言?一楼的,是陕西话那为什么和佟掌柜说的不一样?是陕西话...
用英语以春节为题的手抄报 春节... 用英语以春节为题的手抄报 春节英语手抄报小学生春节英语手抄报教程关于春节的英语手抄报怎么画春节英语手...
大学生研发校徽月饼是什么样子的... 大学生研发校徽月饼是什么样子的?大学生研发“校徽月饼”走红 原料取材学校培育作物。陕西大学生研发“彩...
《潜伏》中,晚秋是个什么样的人... 《潜伏》中,晚秋是个什么样的人?结局如何晚秋有着悲惨的命运,一直深爱着孙红蕾,最后孙红蕾在香港执行任...
我爱上了我的小学女同桌,我13... 我爱上了我的小学女同桌,我13岁13岁 好小的年龄呀!暗恋两年也不错,主要是你们太小了,现在你们懂得...
TVB出过一个动画是在讲一些章... TVB出过一个动画是在讲一些章鱼小丸子的故事的叫什么?【是在一个类似放学ICY的节目播的】章鱼小超人...
谁有周建龙版的 有声小说 盗墓... 谁有周建龙版的 有声小说 盗墓笔记 7 8 部 分享下 谢谢盗吧首页吧规+资源,甭找了,就没这东西周...
当你一个人在深夜发呆的时候 会... 当你一个人在深夜发呆的时候 会听什么歌?推荐几首好听的额你喜欢悲伤的还是节奏性强的啊?
搞笑一家人剧情 搞笑一家人剧情尤美喜欢谁?我觉得才开始尤美喜欢允浩,允浩也喜欢尤美,只是尤美误会是她爸爸杀了开成嫂的...
跪求好听的歌! 跪求好听的歌!英文歌 中文歌都要 重在好听多来点啊下个,路口,见圣诞结 爱似水仙你若...
我只会打字,对电脑编程不懂怎么... 我只会打字,对电脑编程不懂怎么办?这没有其他的办法,只有深造你要学习吗?
百听不厌的50首经典老歌推荐 百听不厌的50首经典老歌推荐百听不厌的50首经典老歌推荐:1、后来2、光辉岁月3、鬼迷心窍4、大海5...
关于防溺水的手抄报,自己防溺水... 关于防溺水的手抄报,自己防溺水的卡通图片,各位亲,急用啊!
怪物猎人XX烬灭刃斩龙怎么打 怪物猎人XX烬灭刃斩龙怎么打你问怎么打没意义,各人打法不一样,比如咬尾巴大回旋人家直接滚过去输出,你...
工笔画淡蓝色怎么调 工笔画淡蓝色怎么调哪个?淡蓝色,画什么的有好多种蓝色,你要哪个 你要往哪上色白色加里面的任意一种蓝色...
缅甸富人区女孩,个个貌美有钱,... 缅甸富人区女孩,个个貌美有钱,为什么很难嫁出去?缅甸富人区女孩,个个貌美有钱,很难嫁出去有两个原因。...
我的家园写一篇童话作文 我的家园写一篇童话作文你可以将时间写成魔法师,把你家园写成童话王国,