我一直在研究一本关于计算机网络的书(这不是家庭作业问题)
其中一个问题比较了基于 ACK 和 NAK 的数据传输协议,重点是对于基于 NAK 的协议,当接收到第 (x + 1) 个数据包时,可以通过接收到的数据包 x 的数据包丢失来检测。
但是,我的问题是,如果接收方发送的 NAK 在到达发送方之前丢失了怎么办?发件人不会意识到错误,也不会重新传输。此外,如果数据包是序列中的最后一个呢?(没有后续的数据包可以测试)
我看不出纯 NAK 协议如何可靠(以正确的顺序传送每个数据包)
我一直在研究一本关于计算机网络的书(这不是家庭作业问题)
其中一个问题比较了基于 ACK 和 NAK 的数据传输协议,重点是对于基于 NAK 的协议,当接收到第 (x + 1) 个数据包时,可以通过接收到的数据包 x 的数据包丢失来检测。
但是,我的问题是,如果接收方发送的 NAK 在到达发送方之前丢失了怎么办?发件人不会意识到错误,也不会重新传输。此外,如果数据包是序列中的最后一个呢?(没有后续的数据包可以测试)
我看不出纯 NAK 协议如何可靠(以正确的顺序传送每个数据包)
我怀疑书中描述的理论背景假设了无限的数据包流,并忽略了通道完全禁用等条件。在实践中,还有其他结构被定义为 ACK/NAK 协议的一部分,或者由更高或更低层协议来处理。例如,物理层会提供诸如“通道中断”之类的指示,并且可能上面的协议发送/接收“流结束”数据包,并使用计时器检测最后一个数据包的 NAK 丢失的情况。这些只是假设的例子,但是现实生活中的协议所做的事情的类型。
我看不出纯 NAK 协议如何可靠(以正确的顺序传送每个数据包)
我确信这本书暗示有某种机制可以按顺序识别数据包。否则,接收方将无法指示它正在 NAK'ing 哪个数据包,即大多数协议在每个数据包/ack/nak 中使用一个序列号。
仅 NAK 协议可以通过让接收器在发送 NAK 时启动计时器并在重新传输丢失的数据包之前计时器超时时重新传输 NAK 来实现可靠性。