停止和等待协议——当计时器等于往返时间时会发生什么

Stop and wait protocol - what will happen when timer equals roundtrip time

我了解停止等待协议,但不确定如何处理特定情况。 当使用停止和等待协议时会发生什么,定时器在 ack 帧到达时到期(超时事件发生)。这种情况是当一个帧(带有ACK)的往返时间与定时器相同时。

我知道这更像是假设,但这是有人问我的问题。我猜这与发件人所处的状态有关。即阻塞状态或就绪状态

这是一个实施问题。通常,也是最简单的情况,是协议或状态机一次处理一个事件。如果在处理ACK之前超时,则可能会重发消息。然后,当处理 ACK 时,它可以被视为第二条消息的 ACK,而第二条 ACK 只是一个重复的 ACK 并被丢弃。另一方面,另一个节点需要检测到第二条消息被重复并丢弃它或其他不会改变其状态的东西。该其他节点必须为收到的第二条消息发送 ACK,因为它不知道是否未收到前一个 ACK​​。

另一种可能是ACK在超时前被处理。为此,超时事件需要具有与已发送消息相关的数据。然后在处理超时事件时,状态机检测到超时对应的消息已经被ACK'ed。

为了处理这些特殊情况,您需要使用额外的数据:消息和ACK 需要有序列号。处理其他情况可能需要其他数据。

您可以在 Tanenbaum 的计算机网络一书第 3 章数据 Link 层和 TCP(不是停止和等待协议)一章中看到此类协议稳健性机制的实现。