首页 > 解决方案 > 在 3 次握手中,服务器没有收到客户端的 ACK 消息时会发生什么?

问题描述

我了解客户端在 3 次握手期间从服务器接收到 SYN ACK 消息并将 ACK 消息发送到服务器后,客户端和服务器已连接。在它们连接之后,当客户端向服务器发送其他消息时,如果这些消息在客户端在进行 3 次握手时发送的 ACK 消息之前到达服务器会发生什么情况?

标签: networkingtcp

解决方案


如果这些消息在客户端在进行 3 次握手时发送的 ACK 消息之前到达服务器会发生什么?

ACK 只是 TCP 头中的标志以及最新接收到的数据的序列号。它可以包含在一个空数据包中(即没有有效负载,只是 TCP 标头),也可以包含在一个带有有效负载的数据包中。是否接收到带有 ACK 的特定数据包并不重要,只要接收到覆盖数据的 ACK 即可。

这意味着如果客户端发送的初始数据覆盖 TCP 握手的最终 ACK 就足够了。事实上,甚至根本不需要从客户端发送一个独立的 ACK(没有负载)来完成 TCP 握手,但客户端可以在客户端从服务器收到 SYN 和 ACK 后立即开始发送数据。


推荐阅读