Q: 半连接队列与全连接队列
A:
- 半连接队列:由tcp_max_syn_backlog决定,开户syncookies时,没有上限
- 全连接队列:由somaxconn(系统级)与backlog(listen函数参数)共同决定,取两者中的较小值
Q: 半连接队列满了如何处理?
A: 丢弃请求
Q: 全连接队列满了如何处理?
- tcp_abort_on_overflow==1 发送reset包
- tcp_abort_on_overflow==0 过一段时间重发syn ack包(次数由tcp_synack_retries决定)
Q: 在client发出ack之后,认为连接已经ESTAB了,可以发送数据吗?server收到数据会如何处理?
A: 可以发送数据,server端会缓存下来直至连接变成ESTABLISHED状态才传输给用户
Q: Recv-Q 与 Send-Q 的含义
A:
Recv-Q | Send-Q | |
---|---|---|
listen | 已使用的全连接队列数 | 全连接队列上限数 |
与非listen | 已收到的但被进程读取的字节数 | 已发送但是未被远程主机确认的字节数 |
参考:
[1]: man 7 tcp
[2]: https://102.alibaba.com/detail?id=140
[3]: https://tools.ietf.org/html/rfc793#section-3.4