TCP/IP backlog
2016-04-24 20:23
405 查看
在linux中,当一个应用创建一个处于listen状态的socket时,会为这个socket指定两条队列。
SYN queue:存放处于syn_rec状态的socket,由内核参数tcp_max_syn_backlog指定。
accept queue:存放处于ESTABLISHED状态的socket,由内核参数somaxconn和应用本身指定,如:redis:tcp-backlog,取somaxconn和tcp-backlog中的最小值。
在accept queue中的socket会被应用程序进行消费。
syn queue未满,而accept queue已满,此时:
1)当tcp第三次握手的ACK到达server,而此时accept queue已经满时,内核会丢失这个ACK包。
2)由于TCP的重传机制,sever端在超时时间内未收到ACK,server会重传SYN+ACK,client端重传ACK包。
3)在/proc/sys/net/ipv4/tcp_synack_retries设定的重试次数超过后还没正常的收到ACK包,就不再重试。
在监听状态的socket
非监听状态的socket
参考文章: http://veithen.github.io/2014/01/01/how-tcp-backlog-works-in-linux.html http://blog.itpub.net/15480802/viewspace-1399303/
SYN queue:存放处于syn_rec状态的socket,由内核参数tcp_max_syn_backlog指定。
accept queue:存放处于ESTABLISHED状态的socket,由内核参数somaxconn和应用本身指定,如:redis:tcp-backlog,取somaxconn和tcp-backlog中的最小值。
在accept queue中的socket会被应用程序进行消费。
syn queue未满,而accept queue已满,此时:
1)当tcp第三次握手的ACK到达server,而此时accept queue已经满时,内核会丢失这个ACK包。
2)由于TCP的重传机制,sever端在超时时间内未收到ACK,server会重传SYN+ACK,client端重传ACK包。
3)在/proc/sys/net/ipv4/tcp_synack_retries设定的重试次数超过后还没正常的收到ACK包,就不再重试。
在监听状态的socket
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 100 *:7000 *:* LISTEN 0 100 *:7800 *:* LISTEN 0 50 *:58201 *:* LISTEN 0 50 *:44761 *:* LISTEN 0 100 *:7001 *:* LISTEN 0 512 *:6265 *:* LISTEN 0 50 *:60026 *:* Recv-Q:处于accept queue的队列长度 Send-Q:accept queue能容纳的总长度
非监听状态的socket
State Recv-Q Send-Q Local Address:Port Peer Address:Port CLOSE-WAIT 1 0 10.11.11.66:45694 10.11.11.227:8800 TIME-WAIT 0 0 10.13.13.66:9800 10.13.13.23:46128 ESTAB 0 0 10.13.13.66:39618 10.13.13.82:6380 ESTAB 0 0 10.13.13.66:7800 10.13.13.24:45343 ESTAB 0 0 10.13.13.66:8201 10.13.13.24:54330 ESTAB 0 0 10.13.13.66:9800 10.13.13.23:44531 ESTAB 0 0 10.11.11.66:43312 10.11.11.183:6001 ESTAB 0 0 10.13.13.66:45206 10.13.13.83:6380 CLOSE-WAIT 1 0 10.11.11.66:52191 10.11.11.227:8800 Recv-Q:The count of bytes not copied by the user program connected to this socket. Send-Q:The count of bytes not acknowledged by the remote host.
参考文章: http://veithen.github.io/2014/01/01/how-tcp-backlog-works-in-linux.html http://blog.itpub.net/15480802/viewspace-1399303/
相关文章推荐
- TCP版backshell的VBS脚本代码
- 使用C语言编写基于TCP协议的Socket通讯程序实例分享
- TCP Wrappers防火墙介绍与封锁IP地址的方法
- c语言多进程tcp服务器示例
- win2003连接限制TCP连接限制
- PowerShell脚本开发之收发TCP消息包
- Nodejs创建TCP服务器 - king0222
- C#实现TCP连接信息统计的方法
- linux shell 脚本实现tcp/upd协议通讯(重定向应用)
- 使用C#实现基于TCP和UDP协议的网络通信程序的基本示例
- Android使用socket创建简单TCP连接的方法
- Android实现TCP客户端接收数据的方法
- Android TCP 文件客户端与服务器DEMO介绍
- Android中实现TCP和UDP传输实例
- python实现可将字符转换成大写的tcp服务器实例
- php实现TCP端口检测的方法
- Java实现Socket的TCP传输实例
- 实现了基于TCP的Java Socket编程实例代码
- Java基于TCP方式的二进制文件传输
- Java基于Tcp协议的socket编程实例