与 TCP 中的数据包相比,发送纯 ACK 数据包(没有任何数据)的可靠性有什么区别?

网络工程 ip tcp IP地址
2022-02-08 09:40:30

我正在阅读TCP/IP Illustrated一书,在零窗口部分中,我注意到 TCP 持续计时器的使用——它用于避免在零窗口场景刚刚结束后丢失来自接收器的窗口更新消息。显然,丢失窗口更新消息的可能性更高,因为它是一个“纯 ACK”数据包,而不是具有实际数据的数据包。

有人可以告诉我纯ack包数据包的传递有什么区别吗?谢谢!

1个回答

有人可以告诉我纯ack包和数据包的传递有什么区别吗?

区别只是一个包含数据(应用程序有效负载)而另一个不包含数据。如果数据包包含数据,则需要由接收者确认。如果它不包含数据,则不会被确认。

这意味着只有当 ACK 未完成时,发送方才会识别到数据包的丢失。这不适用于纯窗口更新。

或者在更清晰的场景中:

  • A 向 B 发送 dataA。B 向 A 发送 ACK(dataA)+dataB。B
    将检测到后一个数据包的丢失,因为预期来自 A 的 ACK(dataB)。
  • A 向 B 发送 dataA。B 只发送一个没有数据的 ACK:ACK(dataA)。
    B不会直接检测到后一个数据包的丢失。但是A会错过ACK(dataA)并因此重新传输dataA,导致B再次发送ACK(dataA)。
  • B 已经发送了 ACK(dataA)。它现在发送 ACK(dataA),只更新一个窗口,没有数据。
    A 不会检测这个数据包是否丢失,因为它之前得到了 ACK(dataA)。B 也不会检测此数据包是否丢失,因为它不希望 A 回复它。