鹤壁网站优化,网页搜索框的记录怎么删除,医院行业网站,wordpress个人博客毕业设计TCP建立连接是要进行三次握手#xff0c;但是否完成三次握手后#xff0c;服务器就处理(accept)呢#xff1f;backlog其实是一个连接队列#xff0c;在Linux内核2.2之前#xff0c;backlog大小包括半连接状态和全连接状态两种队列大小。半连接状态为#xff1a;服务器处于…TCP建立连接是要进行三次握手但是否完成三次握手后服务器就处理(accept)呢backlog其实是一个连接队列在Linux内核2.2之前backlog大小包括半连接状态和全连接状态两种队列大小。半连接状态为服务器处于Listen状态时收到客户端SYN报文时放入半连接队列中即SYN queue(服务器端口状态为SYN_RCVD)。全连接状态为TCP的连接状态从服务器(SYNACK)响应客户端后到客户端的ACK报文到达服务器之前则一直保留在半连接状态中当服务器接收到客户端的ACK报文后该条目将从半连接队列搬到全连接队列尾部即 accept queue (服务器端口状态为ESTABLISHED)。在Linux内核2.2之后分离为两个backlog来分别限制半连接(SYN_RCVD状态)队列大小和全连接(ESTABLISHED状态)队列大小。SYN queue 队列长度由 /proc/sys/net/ipv4/tcp_max_syn_backlog 指定默认为2048。Accept queue 队列长度由 /proc/sys/net/core/somaxconn 和使用listen函数时传入的参数二者取最小值。默认为128。在Linux内核2.4.25之前是写死在代码常量 SOMAXCONN 在Linux内核2.4.25之后在配置文件 /proc/sys/net/core/somaxconn 中直接修改或者在 /etc/sysctl.conf 中配置 net.core.somaxconn 128 。可以通过ss命令来显示[rootlocalhost ~]# ss -lState Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN0 128 *:http *:*LISTEN0 128 :::ssh :::*LISTEN0 128 *:ssh *:*LISTEN0 100 ::1:smtp :::*LISTEN0 100 127.0.0.1:smtp *:*在LISTEN状态其中 Send-Q 即为Accept queue的最大值Recv-Q 则表示Accept queue中等待被服务器accept()。另外客户端connect()返回不代表TCP连接建立成功有可能此时accept queue 已满系统会直接丢弃后续ACK请求客户端误以为连接已建立开始调用等待至超时服务器则等待ACK超时会重传SYNACK 给客户端重传次数受限 net.ipv4.tcp_synack_retries 默认为5表示重发5次每次等待30~40秒即半连接默认时间大约为180秒该参数可以在tcp被洪水攻击是临时启用这个参数。查看SYN queue 溢出[rootlocalhost ~]# netstat -s | grepLISTEN102324 SYNs to LISTEN sockets dropped查看Accept queue 溢出[rootlocalhost ~]# netstat -s | grepTCPBacklogDropTCPBacklogDrop:2334参考资料