博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP之backlog
阅读量:6611 次
发布时间:2019-06-24

本文共 1203 字,大约阅读时间需要 4 分钟。

hot3.png

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介绍”(

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

#include
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

你可能感兴趣的文章
动态载入 DLL
查看>>
OD使用教程9 - 调试篇09|解密系列
查看>>
随便记录一些东西
查看>>
动态代理模式
查看>>
Android笔记之在onCreate中执行View.getWidth()和View.getHeight()得到的结果均为0的解决方案...
查看>>
PS1修改xshell命令行样式
查看>>
odoo中的ORM操作
查看>>
asp.net 自带ajax 控件的小实例
查看>>
SQL Server 2008中的新日期数据类型
查看>>
【转】Jsduck一个纯净的前端文档生成神器
查看>>
redux学习日志:关于react-redux
查看>>
Java中操作时间比较好用的类
查看>>
流量时代到来?
查看>>
degree
查看>>
深度优先搜索——迷宫问题(华为oj)
查看>>
部署Tomcat的一些问题
查看>>
十封信写得真好!
查看>>
JS属性的操作需要注意哪些事项?
查看>>
20151223:Web:审核:登陆
查看>>
最精确的解释:cdecl与stdcall的区别
查看>>