服务器通常在三次握手中以 SYN ACK 进行响应。
如果它只是用 ACK 响应,会发生什么?
答案1
客户端将等待 SYN 数据包,一段时间后将超时。
相关的 RFC 是http://www.faqs.org/rfcs/rfc793.html
三次握手的主要原因是防止旧的重复连接启动造成混乱。为了解决这个问题,设计了一种特殊的控制消息,即重置。如果接收 TCP 处于非同步状态(即 SYN-SENT、SYN-RECEIVED),它会在收到可接受的重置后返回到 LISTEN。如果 TCP 处于同步状态之一(ESTABLISHED、FIN-WAIT-1、FIN-WAIT-2、CLOSE-WAIT、CLOSING、LAST-ACK、TIME-WAIT),它会中止连接并通知其用户。我们将在下面的“半开”连接中讨论后一种情况。
RFC 允许服务器单独发送 ACK 和 SYN,但指出它们可以组合成单个数据包。实际上,我相信所有常见实现都会组合服务器 SYN 和 ACK。
...
Stevens† 有一个状态转换图。这表明客户端将超时并进入 CLOSED 状态,并且可能会尝试重新建立连接。
如果任一端在达到连接 ESTABLISHED 状态之前接收到数据包,它们将分别处于 SYN_SENT 或 SYN_RCVD 状态,并且它们将发送重置(RST)并且(我认为)转到 CLOSED 或 LISTEN 状态。
† ISBN 0-201--63346-9