[!citation] > 4.22 TCP 四次挥手,可以变成三次吗? | 小林coding
计算机网络-延迟确认机制
1. 为什么我们需要延迟确认机制
Linux
服务器上,TCP
的延迟确认机制是默认开启的,实际抓包过程当中,发现的三次挥手比四次挥手还要多。TCP
的ACK
报文的网络传输效率并不高,因为有至少20
个字节的IP
头加上至少20
个字节的TCP
头,仅仅就发送一个ACK
报文似乎有些浪费了。- 为了提高传输效率,需要延迟确认机制。
2. 延迟确认机制和四次挥手
2.1 什么是延迟确认机制
- 如果有响应数据需要发送,那么
ACK
就会随着响应数据一起发送给对方。 - 如果没有响应数据需要发送,那么
ACK
会等待一段时间,看看是否有响应数据可以一起发送。 - 如果在等待期间,发现对方的第二个数据报文已经到达了,那么就会立刻发送
ACK
。
2.2 四次挥手变成三次挥手
- 如果在四次挥手过程当中,被动方开启了延迟确认机制,并且,没有多余的数据需要发送,那么,第二次握手(
ACK
消息)和第三次握手(FIN
消息)就会合并到一起,一并发送给对方。
当被动关闭方在 TCP 挥手过程中,如果「没有数据要发送」,同时「没有开启 TCP_QUICKACK(默认情况就是没有开启,没有开启 TCP_QUICKACK,等于就是在使用 TCP 延迟确认机制)」,那么第二和第三次挥手就会合并传输,这样就出现了三次挥手。