因此,客户端通过向服务器发送带有 seq 的 SYN 数据包来启动 TCP 连接。 # X。然后服务器使用 X+1 的 SYN+ACK 进行响应。当制定关闭连接协议(protocol)时,FIN 数据包也是如此。
所以我的问题是为什么服务器会确认 X+1 而不仅仅是 X?我认为 SYN 和 FIN 数据包没有附带任何数据。这还有其他原因吗?我很困惑为什么服务器会 ACK X+1 而不是 X。
最佳答案
正在发送的序列号是下一个预期的序列号。如果没有增加,则回复将表明数据包未被接受,请重新发送。这将以无限循环结束。
SYN 是一种特殊情况,它本身传输信息。 (它初始化目的地接收的计数。)ACK 将针对下一个预期字节 (SYN + 1)。
ACK 计数并不总是增加,并且可能增加超过 1。考虑此交换,其中数据包 2 被延迟并且乱序到达。
Received ACK 1 2 3 2 4 2 2 5
关于TCP 3次握手问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5085881/