networking - 仅使用 NAK 的数据传输协议(protocol)如何可靠?

标签 networking tcp network-protocols

我一直在学习计算机网络方面的书(这不是作业题)

其中一个问题比较了基于 ACK 和 NAK 的数据传输协议(protocol),重点是对于基于 NAK 的协议(protocol),当接收到第 (x + 1) 个数据包时,接收方可以检测到数据包 x 的丢包.

但是,我的问题是,如果接收方发送的 NAK 在到达发送方之前丢失了,会发生什么情况?发件人不会意识到错误,也不会重新传输。此外,如果数据包是序列中的最后一个数据包怎么办? (没有后续数据包可以测试)

我看不出只有 NAK 的协议(protocol)如何可靠(以正确的顺序传送每个数据包)

最佳答案

我怀疑书中描述的理论背景假设了无限的数据包流,并忽略了 channel 完全禁用等情况。实际上,还有其他构造被定义为 ACK/NAK 协议(protocol)的一部分,或者留给更高或更低层的层协议(protocol)来处理。例如,物理层会提供诸如“ channel 已损坏”之类的指示,并且上面的协议(protocol)可能会发送/接收“流结束”数据包,并使用计时器检测最后一个数据包的 NAK 丢失的情况。这些只是假设的例子,但却是现实生活中协议(protocol)所做的事情。

I do not see how a NAK-only protocol can be reliable (delivers each packet in the correct order)

我敢肯定这本书暗示有某种机制可以按顺序识别数据包。否则,接收方将无法指示哪个数据包正在 NAK,即大多数协议(protocol)在每个数据包/ack/nak 中使用序列号。

关于networking - 仅使用 NAK 的数据传输协议(protocol)如何可靠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17907089/

相关文章:

android - 尝试检索位置修复时等待 'x' 时间量后如何切换提供商?

sockets - 发送到127.0.0.1的数据包是否充分使用了工作连接套接字?

algorithm - 如何利用实时数据的所有可用带宽?

python - 在python中计算IP校验和

security - 如何区分我的客户端应用程序发送的 HTTP 请求和来自 Internet 的其他请求

c# - 具有多个 IP 地址的网络接口(interface)上的 WCF Web 服务发现

ios - 如何在不使用GKPeerPickerController的情况下建立对等连接?

java - 设置 sun.rmi.transport.tcp.maxConnectionThreads

c - 尝试在 C 中发送数据包时 TCP 校验和不正确

tcp - 你如何让 xinetd 与 wait=yes for protocol=tcp 一起工作