netty-backlog了解
摘自<netty权威指南>
backlog 指定了内核为此套接口排队的最大连接个数。对于给定的监听套接口,内核要维护两个队列: 未连接队列和已连接队列
int listen(int fd,int backlog);
backlog 的值即为未连接队列和已连接队列的和(摘自 《TCP/IP详解卷3-第14.5章》
):
- 未完成连接队列(so_q0len), 一个SYN已经到达,但三次握手还没有完成的连接中的数量
- 已完成连接队列(so_q1len),三次握手已完成,内核正等待进程执行accept的调用中的数量
TCP三次握手流程及相应状态:
- client 发送 SYN 到 server,将状态修改为 SYN_SEND,如果 server 收到请求,则将状态修改为 SYN_RCVD,并把该请求放到 so_q0len 队列中。
- server回复 SYN + ACK 给 client,如果 client 收 到请求,则将状态修改为 ESTABLISHED,并发送 ACK 给 server 。
- server 收到 ACK,将状态修改为 ESTABLISHED,并把该请求从 so_q0len 中放到 so_q1len 中。