当校验和损坏时,无法知道接收器是否正确接收到最后一条传输数据?

网络工程 tcp
2022-02-21 01:01:19

我正在阅读一本教科书,其中显示了一种类似于 TCP 的简单可靠的数据传输服务:

在此处输入图像描述

在此处输入图像描述

并且作者说:

协议 rdt2.0 看起来好像可以工作,但不幸的是,它有一个致命的缺陷。特别是,我们没有考虑到 ACK 或 NAK 数据包可能被破坏的可能性。至少,我们需要向 ACK/NAK 数据包添加校验和位,以检测此类错误。更困难的问题是协议应该如何从 ACK 或 NAK 数据包中的错误中恢复。这里的困难在于,如果 ACK 或 NAK 被破坏,发送方无法知道接收方是否正确接收到最后一条传输数据。

我在这里有点困惑,假设接收方发送了一个 ack 数据包,如果这个数据包被损坏,那么它变成 nak 数据包,当发送方收到这个数据包(显示为 nak)并且发送方分析校验和并找到它被破坏了,那么发送方立即知道它只需要反转 nak 来确认,这意味着发送方确实知道接收方是否正确接收到最后一条传输的数据?

1个回答

如果这个数据包被破坏,那么它就变成 nak 数据包

这就是你感到困惑的地方。该数据包不会成为 NAK 数据包,它会因为损坏而被丢弃。NAK 是存在问题的积极迹象,这与损坏的数据包不同。

这是一个类比:

你问我“你收到我的信息了吗?”

如果我回答“否”,那就是 NAK。

如果我不回答,或者回答乱七八糟,那就是数据包损坏的情况——你没有得到问题的答案。现在你做什么?