TCP 序列和确认号

TCP 序列和确认号

我已经浏览过这里涉及相关主题的其他问题,但我仍然不清楚这一点。

我刚刚读解释TCP 序列和确认号大约在半程处有这张图:

在此处输入图片描述

在页面末尾附近,对最后一步(第 4 步)的解释包括以下文字:

请注意,第 4 行中的段的序列号与第 3 行中的相同,因为 ACK 不占用序列号空间。

因此请记住,生成的任何数据包(只是对先前收到的数据包的确认(换句话说,只设置了 ACK 标志并且不包含任何数据))都不会增加序列号。

我目前正在努力理解这一点:

  • 我可以清楚地看到序列号在发送的数据包中步骤4有相同的序列号作为数据包发送步骤 3
  • 还可以清楚地看到确认号码这些步骤也是一样的
  • 基本上,作者似乎在说步骤4数据包与步骤 3数据包,除了步骤4数据包包含数据/有效载荷。

关于我的前两点,这是正确的吗?(作者说得对吗?)关于我的第三点,这是正确的吗?最后,假设前两个问题的答案基本上是'是的'那么这两个数据包中的数字相同的原因是因为没有从网关服务器

我寻求对此的一般澄清。

答案1

  • 是的,数据包 3 和 4 中的序列号和确认号确实相同。
  • 不,不能保证数据包完全相同。您可能会看到的差异包括:
    • 数据包 4 也可能设置了PSH标志。
    • 如果使用时间戳,它们可能在 3 和 4 之间相差。
    • 校验和很可能会有所不同。
  • 数据包 3 和 4 中的序列号相同的原因是数据包 3 不包含任何有效负载数据。
  • 数据包 3 和 4 中的确认号相同的原因是,在此期间没有从服务器接收到任何数据。

数据包 3 有点多余。如果应用程序在这几微秒内确实向套接字写入了某些内容,则 TCP 层可以决定等待几微秒再发送数据包 4,然后直接发送数据包 4。

我建议使用 Wireshark 检查计算机上的真实流量,这可能有助于了解正在发生的事情。

相关内容