LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1420|回复: 14

net.ipv4.tcp_max_syn_backlog 不起作用???

[复制链接]
发表于 2010-6-24 20:50:35 | 显示全部楼层 |阅读模式
在redhat(Linux localhost 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:54 EDT 2009 i686 i686 i386 GNU/Linux)把/etc/sysctl.conf有如下两项设置,进行syn半连接测试能起作用,半连接可以到4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096

在gentoo中原始半连接数是256,设置这两项后,进行测试,还是256,请问是什么原因?
 楼主| 发表于 2010-6-25 13:51:03 | 显示全部楼层
没人顶,自己顶
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-25 21:38:41 | 显示全部楼层
再顶。。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-26 16:02:37 | 显示全部楼层
刚刚又在/etc/sysctl.conf中添加了一项:fs.file-max = 100000,从启系统后,ulimit -n 发现文件打开句柄数还是1024,但用ulimit -n 100000后,可打开文件句柄数生效。
是不是修改/etc/sysctl.conf文件没有生效?但在修改/etc/sysctl.conf后,查看/proc目录中相应的值,确实也发生了变化。。请问这个是什么原因??
回复 支持 反对

使用道具 举报

发表于 2010-6-26 21:31:19 | 显示全部楼层
我测试了一下,半连接好像是内核版本的原因,早期版本怎么改也只能达到1024,新版本的内核则都是256,你可以在gentoo上也换2.6.18内核看看哦。

fs.file-max是系统全部能使用的最大数量

ulimit看到的是当前用户会话允许的数量
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-26 22:10:12 | 显示全部楼层
谢谢gruggo
我今天对ubuntu的一台机器也作了类似的测试,ubuntu的内核为2.6.30。结果到也是256。但是有个有个关键的问题,如果系统的半连接数只能达到256的话,那应该怎样调整系统的最大连接数呢,因为如果遇到 ddos攻击的话,如果连接数占满系统就不能提供服务了(已做过测试)。那应该怎么解决这样的问题呢?
回复 支持 反对

使用道具 举报

发表于 2010-6-26 22:18:32 | 显示全部楼层
开了tcp_syncookies效果可以,不过我也暂时没遇到攻击,但是真的攻击来了,就算几千的syn-queue也会立刻被填满,无济于事的,还是前面防火墙来挡吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-27 10:41:27 | 显示全部楼层
Post by druggo;2099849
开了tcp_syncookies效果可以,不过我也暂时没遇到攻击,但是真的攻击来了,就算几千的syn-queue也会立刻被填满,无济于事的,还是前面防火墙来挡吧


tcp_syncookies开了后,半连接数能上来?系统是什么系统?内核的版本呢?
回复 支持 反对

使用道具 举报

发表于 2010-6-27 14:34:35 | 显示全部楼层
当然不能,syncookies是抗synflood的,又不是挖大坑的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-28 13:15:32 | 显示全部楼层
有对/etc/sysctl.conf文件加了下面的选项:
fs.nfs.nlm_udpport = 0

net.core.rmem_max = 524288
net.core.wmem_max = 524288

net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.ipv4.route.gc_thresh = 131072
net.ipv4.route.max_size = 2097152
net.core.somaxconn = 819200
net.ipv4.tcp_max_syn_backlog = 81920
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 30
fs.file-max = 8061540

net.ipv4.tcp_rmem = 40960 873800 1672160
net.ipv4.tcp_wmem = 40960 655360 1672160
net.ipv4.ip_local_port_range = 3000 65000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1


现在系统能够支持的最大半连接数为:512(以前为256)
然后分别对每一个选项后都加0:如net.core.rmem_max = 5242880,从起系统,进行测试,但是最大半连接数仍为512。
注:以上操作在每次修改后都需要从起系统,网上说的sysctl -p直接生效是不对的(至少在我现在的系统上,直接用这个命令不能生效)。


以上测试说明至少说明了两点:
1.系统所支持的半连接数和内核版本版本无关(我的内核为2.6.30),并且系统所能支持的半连接数是可以修改的
2.在上面的某个选项会影响到系统所支持的半连接数。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表