tcp_max_syn_backlog 的疑问
网上随处可以找到下面这些资料tcp_max_syn_backlog 参数类型:整型
对于那些依然还未获得客户端确认的连接请求﹐需要保存在队列中最大数目。
对于超过 128Mb 内存的系统﹐默认值是 1024 ﹐低于 128Mb 的则为 128。
如果服务器经常出现过载﹐可以尝试增加这个数字。
警告﹗假如您将此值设为大于 1024﹐最好修改 include/net/tcp.h 里面的 TCP_SYNQ_HSIZE ﹐以保持 TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog ﹐并且编进核心之内。
默认是 1024,没错,我改为 2048,还要保持 TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog
为此,我特意看了一下内核里面 include/net/tcp.h
不过,让我很疑惑的是,TCP_SYNQ_HSIZE 的初始设置是 512,如果按照上面的理论,1024 本身就是不对的啊?
为什么?是网上所有的资料都说错了?还是 kernel.org 就这样设计的,故意弄成这样?
tcp_max_syn_backlog 的疑问
资料过时了吧tcp_max_syn_backlog 的疑问
不会吧?!就算过时,也不能相互违背啊,难道新内核都是 TCP_SYNQ_HSIZE*16 >; tcp_max_syn_backlog ??? 回复 3# platinum
老大,这个问题有结论了吗? 楼主描述的问题确实存在,我也遇到了。
SYN_RECV 最高512个。
大量: kernel: possible SYN flooding on port 80. Sending cookies.
net.ipv4.tcp_max_syn_backlog = 8192 回复 5# higkoo
内核虽然会抱怨,但是不会影响正常的connect。
回复 6# 瀚海书香
问题解决了,实际上并不是内核的问题。服务本身在监听端口时都会指定自身backlog的大小。像常用的Nginxy默认是511,Redis是512。在不指定的情况下才会使用操作系统配置的值。 学习学习啊 本帖最后由 ever027 于 2012-11-26 15:33 编辑
但是那位能说说
struct tcp_listen_opt
{
u8 max_qlen_log; /* log_2 of maximal queued SYNs */
int qlen;
int qlen_young;
int clock_hand;
u32 hash_rnd;
struct open_request *syn_table;
}
TCP_SYNQ_HSIZE和tcp_max_syn_backlog到底是什么关系。 明白了,TCP_SYNQ_HSIZE是512个单向链表,最多tcp_max_syn_backlog个半链接分布在这些单向链表里面。
页:
[1]
2