我正在阅读一本教科书,其中显示了一种类似于 TCP 的简单可靠的数据传输服务:
并且作者说:
协议 rdt2.0 看起来好像可以工作,但不幸的是,它有一个致命的缺陷。特别是,我们没有考虑到 ACK 或 NAK 数据包可能被破坏的可能性。至少,我们需要向 ACK/NAK 数据包添加校验和位,以检测此类错误。更困难的问题是协议应该如何从 ACK 或 NAK 数据包中的错误中恢复。这里的困难在于,如果 ACK 或 NAK 被破坏,发送方无法知道接收方是否正确接收到最后一条传输数据。
我在这里有点困惑,假设接收方发送了一个 ack 数据包,如果这个数据包被损坏,那么它变成 nak 数据包,当发送方收到这个数据包(显示为 nak)并且发送方分析校验和并找到它被破坏了,那么发送方立即知道它只需要反转 nak 来确认,这意味着发送方确实知道接收方是否正确接收到最后一条传输的数据?