TCP之backlog

TCP之backlog

TCP3次握手

实际上可分为4步

1 客户端发起connect(),发送SYN j

2 服务器从SYN queue中建立条目,响应SYN k, ACK J+1

3 客户端connect()成功返回,响应ACK K+1

4 服务器将socket从SYN queue移入accept queue,accept()成功返回

输入图片说明

backlog解释

为了更好的理解backlog参数,我们必须认识到内核为任何一个给定的监听套接口维护两个队列: 1、未完成连接队列(incomplete connection queue或SYN queue),每个这样的SYN分节对应其中一项:已由某个客户发出并到达服务器,而服务器正在等待完成相应的TCP三路握手过程。这些套接口处于SYN_RCVD状态。 2、已完成连接队列(completed connection queue或accept queue),每个已完成TCP三路握手过程的客户对应其中一项。这些套接口处于ESTABLISHED状态。

未完成队列(incomplete connection queue)的长度现在由**/proc/sys/net/ipv4/tcp_max_syn_backlog**设置,在现在大多数最新linux内核都是默认512,这个设置有效的前提是系统的syncookies功能被禁用,如果系统的syncookies功能被启用,那么这个设置是无效的。Syncookies是在内核编译的时候设置的,查看syncookies是否启动:

cat /proc/sys/net/ipv4/tcp_syncookies

如果是“1”说明已启用,为“0”说明未启用。 那么为syncookies是做什么的呢,为什么它会和未完成队列有关系。简单的说它是为防范SYN Flood攻击的设计。具体请参考“syncookies介绍”(http://baike.baidu.com/view/9033755.htm)

继续看backlog,如果我们给listen的backlog参数设值超过了**/proc/sys/net/core/somaxconn**,那么backlog参数的值为自动被改写为/proc/sys/net/core/somaxconn的值。

#include<sys/socket.h>
int listen(int sockfd, int backlog);

Now it specifies the queue length for completely established sockets waiting to be accepted, instead of the number of incomplete connection requests.

=========END=========

转载于:https://my.oschina.net/xinxingegeya/blog/725635

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值