【问题标题】:TCP 3-way handshake questionTCP 3 次握手问题
【发布时间】:2011-07-02 10:26:41
【问题描述】:

所以客户端通过向服务器发送一个带有 seq 的 SYN 数据包来启动 TCP 连接。 # X. 然后服务器响应 X+1 的 SYN+ACK。当关闭连接协议生效时,FIN 数据包也是如此。

所以我的问题是为什么服务器 ACK 为 X+1 而不仅仅是 X?我认为 SYN 和 FIN 数据包没有捎带任何数据。还有其他原因吗?我很困惑为什么服务器会 ACK X+1 而不是 X。

【问题讨论】:

标签: tcp handshake


【解决方案1】:

正在发送的序列号是下一个预期的序列号。如果它没有增加,那么回复将表明数据包没有被接受,请重新发送。这将以无限循环结束。

SYN 是一种特殊情况,它本身就可以传输信息。 (它初始化目标上接收到的计数。)ACK 将用于下一个预期字节(SYN + 1)。

ACK 计数并不总是增加,并且可能增加超过 1。考虑这种交换,其中数据包 2 被延迟并无序到达。

收到ACK
  1 2
  3 2
  4 2
  2 5

【讨论】:

  • 如果确认号被指定为(序列号)+N,对于任何 N,协议都可以正常工作。毕竟,接收 ACK 号的一方可以可逆地撤消任何添加的序号为常数。我认为问题是为什么 N 是 1。例如如果 N=1,TCP 实现中是否有可能进行一些微优化?
  • @AmbrozBizjak 可以选择 N 或 N+1。我相信 N+1 使缓冲区地址位置计算更简单。
猜你喜欢
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 2014-12-16
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多