TCP 3次握手问题

标签 tcp handshake

因此,客户端通过向服务器发送带有 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/

相关文章:

c# - 套接字异常(0x80004005): An existing connection was forcibly closed by the remote host

mqtt - OPC UA数据包格式

Ruby TCP 套接字永远不会得到回复

c# - 仅当逐步调试代码时 Socket.Receive() 才能按预期工作

ios - 无聊的 SSL 握手失败和复制 Identity Cred 时出错

javascript - 处理握手过程中的 websocket 发送而不丢失消息

performance - 使用 TLS 的 Kafka 消费者。性能问题

c# - 无法停止异步 TCP 服务器 Windows 服务

serial-port - 串行端口握手。硬件和无握手之间有什么区别?

c - libnet tcp header 结果全为零