您现在的位置: 主页 > 嵌入式操作系统 > Linux > TCP握手过程中建连接的流程和队列
本文所属标签:
为本文创立个标签吧:

TCP握手过程中建连接的流程和队列

来源:网络整理 网络用户发布,如有版权联系网管删除 2018-07-05 


这里有两个队列:syns queue(半连接队列);accept queue(全连接队列)。
三次握手过程中:
第一步: server 收到 client 的 syn 后,把这个连接信息放到半连接队列中,
第二步: 同时回复 syn+ack 给 client
第三步: server 收到 client 的 ack,如果这时全连接队列没满,那么从半连接队列拿出这个连接的信息放入到全连接队列中,否则按tcp_abort_on_overflow指示的执行。
这时如果全连接队列满了并且 tcp_abort_on_overflow 是0的话,server过一段时间再次发送syn+ack给client(也就是重新走握手的第二步),如果client超时等待比较短,client就很容易异常了。

cat /proc/sys/net/ipv4/tcp_abort_on_overflow 0

查看 全连接队列

下面看到的 13 times ,表示全连接队列溢出的次数,隔几秒钟执行下,如果这个数字一直在增加的话肯定全连接队列偶尔满了。

netstat -s |egrep "listen|LISTEN"13 times the listen queue of a socket overflowed54 SYNs to LISTEN sockets dropped

ss -lntState       Recv-Q  Send-Q        Local Address:Port                 Peer Address:PortLISTEN       0        50               *:7999                              *:*  

上面看到的第二列Send-Q 值是50,表示第三列的listen端口上的全连接队列最大为50,第一列Recv-Q为全连接队列当前使用了多少。
全连接队列的大小取决于:min(backlog, somaxconn) . backlog是在socket创建的时候传入的,somaxconn是一个os级别的系统参数。

cat /proc/sys/net/core/somaxconn16384

查看半连接队列

大小取决于:max(64, /proc/sys/net/ipv4/tcp_max_syn_backlog),不同版本的os会有些差异。

cat /proc/sys/net/ipv4/tcp_max_syn_backlog16384

Tomcat和Nginx中的Accept队列参数

Tomcat默认短连接,backlog(Tomcat里面的术语是Accept count)Ali-tomcat默认是200, Apache Tomcat默认100。
Nginx默认是511

参考:
https://mp.weixin.qq.com/s?__biz=MzIzOTU0NTQ0MA==&mid=2247487779&idx=1&sn=0980243dcec05c5df8e2e60937c2c5ed&chksm=e9292c2cde5ea53a7b309e3575c78940a378b358292a3badb828d6c9bb6e8d3997800564b1d5&mpshare=1&scene=23&srcid=0705cNzStWAzvxd5GzatiiNZ#rd

http://www.cnxct.com/something-about-phpfpm-s-backlog/



              查看评论 回复



嵌入式交流网主页 > 嵌入式操作系统 > Linux > TCP握手过程中建连接的流程和队列
 如果 连接 队列

"TCP握手过程中建连接的流程和队列"的相关文章

网站地图

围观()