【发布时间】:2015-06-05 19:50:52
【问题描述】:
我了解停止等待协议,但不确定如何处理特定场景。 使用 stop-and-wait 协议时会发生什么,定时器在 ack 帧到达时到期(发生超时事件)。这种情况是当一个帧(带有 ACK)的往返时间与计时器相同时。
我知道它更具假设性,但这是向我提出的问题。我猜这与发送者所处的状态有关。即阻塞状态或就绪状态
【问题讨论】:
我了解停止等待协议,但不确定如何处理特定场景。 使用 stop-and-wait 协议时会发生什么,定时器在 ack 帧到达时到期(发生超时事件)。这种情况是当一个帧(带有 ACK)的往返时间与计时器相同时。
我知道它更具假设性,但这是向我提出的问题。我猜这与发送者所处的状态有关。即阻塞状态或就绪状态
【问题讨论】:
这是一个实施问题。通常也是最简单的情况是协议或状态机一次处理一个事件。如果在处理 ACK 之前处理了超时,则可能会重新发送消息。然后当 ACK 被处理时,它可以被认为是第二个消息的 ACK,而第二个 ACK 只是一个重复的并被丢弃。在另一边,另一个节点需要检测到第二条消息是否重复并丢弃它或其他不会改变其状态的东西。该其他节点必须为收到的第二条消息发送 ACK,因为它不知道是否没有收到前一个 ACK。
另一种可能是 ACK 在超时之前被处理。为此,超时事件需要具有与已发送消息相关的数据。然后在处理超时事件时,状态机检测到超时对应的消息已经被确认。
为了处理这些特殊情况,您需要使用额外的数据:消息和 ACK 需要有序列号。处理其他情况可能需要其他数据。
您可以在 Tanenbaum 的《计算机网络》一书、第 3 章“数据链路层”和 TCP(不是停止和等待协议)一章中看到此类协议稳健性机制的实现。
【讨论】: