我设置了一个’目标’虚拟机,禁用了iptables并从几个本地’源’机器运行hping(hping -p 80 -i u1000 -c 1000 -S destaddr)(过滤那些OUTPUT链中的RST).
我期待在目标服务器的netstat输出中看到1000条SYN_RECV记录,但我只看到256条最大值(每台“源”机器256条).我似乎在“目标”机器上达到了一些限制,无法找到它的位置. tcp_max_syn_backlog增加到8096.
知道这个限制的设定吗?
基本上,我忽略了应用程序级别(webserver)限制.但这位来自荷兰的优秀绅士们深入挖掘并在此发布了他非常相关的调查结果:
http://blog.dubbelboer.com/2012/04/09/syn-cookies.html
基本上Web服务器(我使用的是Nginx)是将一个常量(listen backlog limit)传递给listen函数,它在这里定义:
https://github.com/git-mirror/nginx/…x_config.h#L97
定义NGX_LISTEN_BACKLOG 511
所以内核限制甚至还没有发挥作用.
编译了Nginx常量,所以我快速检查了apache – 幸运的是它是可配置的:
http://httpd.apache.org/docs/2.0/mod…#listenbacklog
所以我把它设置为8k并得到我需要的东西(好吧,2包丢失:
资源:
hping -S -c 20000 -i u20 -p 80目标
目标:
netstat -nta | grep SYN_RECV |厕所
8192 49152 729088
最后,我原来的256个连接限制实际上是因为我最初向端口22发送了请求(而sshd显然将tcp连接backlog设置为256).