+ -
当前位置:首页 → 问答吧 → 内核nf_conntrack_hash的最大节点个数

内核nf_conntrack_hash的最大节点个数

时间:2010-11-18

来源:互联网

本帖最后由 瀚海书香 于 2010-11-18 09:31 编辑

在1:3的内核空间和应用空间,并且开启PAE的情况下,最多可以存储多少conntrack个连接?
虽然原则上来说,内核可以使用多达64G的内存,但是在nf_conntrack_hash的节点开辟时,使用的函数标志是GFP_ATOMIC,这样一来就无法使用高端内存。也就是说最多的节点个数不会超过 (896M-内核必须的空间)/sizeof(struct nf_conn) ~= 400万

不知道理解的是否正确?有不对的地方欢迎拍砖

作者: 瀚海书香   发布时间: 2010-11-18

直接试一下吧。不是有个选项是可以修改连接表大小的么

作者: Godbach   发布时间: 2010-11-18

本帖最后由 瀚海书香 于 2010-11-18 10:00 编辑

回复 Godbach
>echo "1000000000" > /proc/sys/net/nf_conntrack_max
>cat /proc/sys/net/nf_conntrack_max                 
1000000000
内核这个proc的write方法没有做什么检查,可以随便写的。
所以不知道自己理解的是否正确。

作者: 瀚海书香   发布时间: 2010-11-18

用一些建连工具做一下测试吧。看看连接数实际能达到多少。

或者打 SYNFlood  攻击应该就可以。

作者: Godbach   发布时间: 2010-11-18

回复 Godbach
关键是很难达到这个值吧?
而且我想知道我分析的是否正确?如果是正确的,那基于x86_32产品的并发链接数就应该不会超过这个值。但是为什么很多厂商的宣传值会那么大呢?

作者: 瀚海书香   发布时间: 2010-11-18



QUOTE:
回复  Godbach
关键是很难达到这个值吧?
而且我想知道我分析的是否正确?如果是正确的,那基于x86_32产 ...
瀚海书香 发表于 2010-11-18 10:31


为什么会很难的。
你估计的应该是 400 万项。 Linux 开启连接跟踪的话,新进来的 SYN 包都要分配一个表项的。用攻击工具打上 400 万个 SYN 包,一分钟就够了。

作者: Godbach   发布时间: 2010-11-18