想在netfilter的框架下在PRE_ROUTING处自己挂载一个优先级高于nat表项的钩子函数
此钩子函数的作用是获取经过此处的所有ip层的报文,获取对应的流信息(五元组标示),将流信息保存在一个数组或者链表里面
对于每个流,统计该流的报文计数(用于其他的作用)
这里有几个问题有点疑问,请各位大牛发表观点
1)在流量很大的情况下,这个流对应的链表或者是数组有可能容量会变得非常大,那么对于每个流的报文计数时流的定位可能需要很长的时间(不管采用hash还是其他的查找方式)
2)流的老化,因为是ip层的报文,我们不知道流何时被终结掉,那么上面维护流的链表中的数据项何时被清除?这里想到的是在流的报文计数的时候对应记载时间,比如最长给5分钟。而后单独起一个线程去扫描该链表,做时间的累减,时间值小于0的从流的链表中删除,这样来做流的管理。
这种方式有个弊端,就是需要对流的链表做互斥,因为上面的流统计计数的时候也要用到这个链表
这样一来,这种加锁解锁互斥的消耗,再加上上面定位的时间的消耗。
这种时间的消耗,对于内核的报文处理,是否可以承受得起?
请各位大牛帮忙看看,多谢!
有关netfilter框架下的钩子函数的疑问
-
- 帖子: 17
- 注册时间: 2016-08-22 15:57
- 系统: ubuntu 14.04 desktop
-
- 论坛版主
- 帖子: 18279
- 注册时间: 2009-08-04 16:33
Re: 有关netfilter框架下的钩子函数的疑问
http://www.netfilter.org/documentation/
Documentation about the netfilter/iptables project
Netfilter FAQ (Frequently Asked Questions)
相關的連結文章
看看 有沒有 能幫到你的內容
Documentation about the netfilter/iptables project
Netfilter FAQ (Frequently Asked Questions)
相關的連結文章
看看 有沒有 能幫到你的內容
-
- 帖子: 17
- 注册时间: 2016-08-22 15:57
- 系统: ubuntu 14.04 desktop
Re: 有关netfilter框架下的钩子函数的疑问
多谢大牛!
这里面好像没有涉及到这方面的问题。
可能我提的这个问题也比较抽象,不是一个可以量化具体的问题。
主要是担心这个处理导致的时延过大导致一些其他的问题。
这里面好像没有涉及到这方面的问题。
可能我提的这个问题也比较抽象,不是一个可以量化具体的问题。
主要是担心这个处理导致的时延过大导致一些其他的问题。
- HuntXu
- 帖子: 5776
- 注册时间: 2007-09-29 3:09
Re: 有关netfilter框架下的钩子函数的疑问
第一个问题常见的是哈希表加链表一起上,第一层的哈希要足够好保证分布性,这个可以自己算极端情况(比如全部哈希之后到同一个链表去,或者一个包就是一个流),这个只能测试才能发现最适合你的是什么样的设置。
第二个的话如果是我会考虑实现一个队列,队列的第一个表示要过期的项目需要被删除。如果不加时间的话,那就直接处理计数的时候将相关的流移动到队列最后,新增流且遇到队列满时自动丢弃头一个。如果加时间的话,那就是处理计数时将流移动到最后且更新时间,不过貌似没有必要,因为头一个元素一定是时间上最远的那个,除非说你觉得时间还不够丢弃头一个的时候要使得队列无限增长下去那就有检查时间的必要。队列的大小不好掌握需要根据你的情况自行调整。不过这个做法只在计数的时候顺带更新一下队列,效率上应该比用多进程全面扫同时加锁靠谱点我觉得。
第二个的话如果是我会考虑实现一个队列,队列的第一个表示要过期的项目需要被删除。如果不加时间的话,那就直接处理计数的时候将相关的流移动到队列最后,新增流且遇到队列满时自动丢弃头一个。如果加时间的话,那就是处理计数时将流移动到最后且更新时间,不过貌似没有必要,因为头一个元素一定是时间上最远的那个,除非说你觉得时间还不够丢弃头一个的时候要使得队列无限增长下去那就有检查时间的必要。队列的大小不好掌握需要根据你的情况自行调整。不过这个做法只在计数的时候顺带更新一下队列,效率上应该比用多进程全面扫同时加锁靠谱点我觉得。
HUNT Unfortunately No Talent...
-
- 帖子: 17
- 注册时间: 2016-08-22 15:57
- 系统: ubuntu 14.04 desktop
Re: 有关netfilter框架下的钩子函数的疑问
多谢多谢!
第一个采用hash的话其实也没有太好的hash算法,可以依据dst ip来做hash比较合适。hash冲突之后再用链表
你所说的第二个其实也是要在第一个的基础上面去做,所以应该没有办法去用队列。我上面说的两种情况实际上操作的都是同一个数据链表,这是最纠结的地方。
不过你提供的这个队列的思想确实不错,问题是好像没有办法和第一个的链表融合在一起。
第一个采用hash的话其实也没有太好的hash算法,可以依据dst ip来做hash比较合适。hash冲突之后再用链表
你所说的第二个其实也是要在第一个的基础上面去做,所以应该没有办法去用队列。我上面说的两种情况实际上操作的都是同一个数据链表,这是最纠结的地方。
不过你提供的这个队列的思想确实不错,问题是好像没有办法和第一个的链表融合在一起。
- langyxxl
- 帖子: 443
- 注册时间: 2012-01-17 22:17
Re: 有关netfilter框架下的钩子函数的疑问
感觉你这个和openvswitch有点像
-
- 帖子: 17
- 注册时间: 2016-08-22 15:57
- 系统: ubuntu 14.04 desktop
Re: 有关netfilter框架下的钩子函数的疑问
openvswitch 是个什么功能的开源软件? 可以大概介绍一下对应的功能吗?
有没有相关的资料可以共享一下?
多谢!
有没有相关的资料可以共享一下?
多谢!