免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10320 | 回复: 10
打印 上一主题 下一主题

tcp_max_syn_backlog 的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-30 18:39 |只看该作者 |倒序浏览
网上随处可以找到下面这些资料
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 就这样设计的,故意弄成这样?

论坛徽章:
0
2 [报告]
发表于 2005-06-30 21:12 |只看该作者

tcp_max_syn_backlog 的疑问

资料过时了吧

论坛徽章:
0
3 [报告]
发表于 2005-06-30 21:26 |只看该作者

tcp_max_syn_backlog 的疑问

不会吧?!
就算过时,也不能相互违背啊,难道新内核都是 TCP_SYNQ_HSIZE*16 >; tcp_max_syn_backlog ???

论坛徽章:
0
4 [报告]
发表于 2012-02-21 21:35 |只看该作者
回复 3# platinum


    老大,这个问题有结论了吗?

论坛徽章:
0
5 [报告]
发表于 2012-10-08 12:05 |只看该作者
楼主描述的问题确实存在,我也遇到了。

SYN_RECV 最高512个。

大量: kernel: possible SYN flooding on port 80. Sending cookies.

net.ipv4.tcp_max_syn_backlog = 8192

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
6 [报告]
发表于 2012-10-08 15:23 |只看该作者
回复 5# higkoo
内核虽然会抱怨,但是不会影响正常的connect。

   

论坛徽章:
0
7 [报告]
发表于 2012-11-02 11:02 |只看该作者
回复 6# 瀚海书香


    问题解决了,实际上并不是内核的问题。服务本身在监听端口时都会指定自身backlog的大小。像常用的Nginxy默认是511,Redis是512。在不指定的情况下才会使用操作系统配置的值。

论坛徽章:
1
技术图书徽章
日期:2013-10-29 15:46:41
8 [报告]
发表于 2012-11-02 11:15 |只看该作者
学习学习啊

论坛徽章:
0
9 [报告]
发表于 2012-11-26 15:28 |只看该作者
本帖最后由 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_SYNQ_HSIZE和tcp_max_syn_backlog到底是什么关系。

论坛徽章:
0
10 [报告]
发表于 2012-12-03 11:36 |只看该作者
明白了,TCP_SYNQ_HSIZE是512个单向链表,最多tcp_max_syn_backlog个半链接分布在这些单向链表里面。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP