第 76 帧中数据包的 ACK 在哪里?

第 76 帧中数据包的 ACK 在哪里?

我正在课堂上学习 Kurose 的书,这个特殊的练习涉及向服务器提交一个 .txt 文件并捕获此传输和服务器的响应。在一个练习中,我必须选择我的电脑发送的前 6 个数据包,从包含 POST 的数据包开始。在我的捕获文件中,这意味着第 71 到第 76 帧。

我必须找到这些数据包的 ACK 才能获得 RTT。除了第 76 帧中的段外,我可以找到所有 ACK。

与其他数据包不同,搜索“这是对帧:76 中段的 ACK”不会产生任何结果。

在对帧 75 和 77 中的段的 ACK 之间发生了一些奇怪的事情。这是段 75 及其 ACK。

在此处输入图片描述

在此处输入图片描述

如果我理解正确,ACK 编号是序列中下一个数据包的序列号,位于已 ACK 数据包之前。如果段 75 的序列号为 5841,段 76 的序列号为 7301,段 77 的序列号为 8761,则 ACK 75 的数据包的 ACK 编号应为 7301,而 ACK 76 的数据包的 ACK 编号应为 8761。但​​是,当我尝试搜索 tcp.ack == 8761 时,我什么也没得到。

只重传了几个数据包,这个数据包似乎不是其中之一。服务器回复了 OK。

捕获文件:https://filebin.net/2thbjvqjymxurg89

为什么会发生这种情况?

答案1

带有 ACK 标志的段中的确认号确认确认号之前的所有内容。无需为每个发送的段都设置一个 ACK​​ 段。您可以有包含多个段的零星确认。

如果接收窗口足够大,可以发送多个段,则只需对发送的多个段进行确认即可。例如,如果接收窗口足够大,可以容纳 10 个段,则可以在发送每个段后进行确认,或者在发送每 10 个段后进行确认(以任意组合进行确认),并且确认不需要有规律,例如在发送 4 个段后、发送 7 个段后、发送 2 个段后等。

相关内容