1. 客户端不ack,服务器发送tcp_synack_retries(大概63s)次 SYN+ACK之后会发送rst
一个特殊情况,通过上面的63s,可能导致服务器半连接队列 SYN-Queue满,此时新的SYN连接受tcp_syncookies影响,
tcp_syncookies: 0的时候直接丢弃;1的时候accept-queue 满并且 qlen_young>1直接丢弃,1 生成syncookie继续完成连接过程,比三次握手要复杂点
2. accept-queue满,受tcp_abort_on_overflow影响
tcp_abort_on_overflow:0时,重启SYN+ACK机制,tcp_synack_retries后直接丢弃
tcp_abort_on_overflow:1时,直接回复rst
3. 连接未被listen的端口,服务端直接回复rst
4. 服务端crash,再有客户端数据过来,就直接回复rst
5. so_linger选项会导致 客户端直接发送rst,而不走4次握手断开流程
6. 主动关闭方在关闭时socket接收缓冲区还有未处理数据
在调用close时如果接收缓冲区还有数据,则直接清空并发送rst。
如果发送缓冲区还有数据,就发送完,然后走4次握手断开。