1

我正在尝试在两个单独的客户端和服务器应用程序上实现 Go back N 协议。假设我的序列号必须适合 3 位,因此 2^3 = 8 个最大数字,并且 2^3 - 1 = 7 窗口大小。

我最初发送我的整个窗口。前两个数据包(0 和 1)被正确接收。数据包 2 被丢弃。当 Receiver 收到数据包 3 到 6 时,它期待 2,因此它必须对收到的数据包表示它想要 2。

Sender     Receiver
  0           0
  1           1
  2    (packet dropped)
  3         nack2
  4         nack2
  5         nack2
  6         nack2

当 Sender 收到第一个 nack2 时,它知道已经收到 0 和 1(通过捎带)并向前移动它的窗口,但它还必须从序列号 2 开始重新发送它的窗口(所以 2-3-4-5-6 - 并且可能是 7-0)。当 Sender 收到第二个 nack2 时,它已经发送了这些数据包。由于协议的原因,发送者将再次重新发送他的整个窗口,包括 2。现在接收者可能会收到 2(和其他),但在第二个 nack2 批次中,它将重新接收 2,这是乱序的,将必须 nack 其预期的数据包,依此类推。我在所有这些假设中都是正确的吗?

如果是这样,在我看来,Go Back N 发送的数据包比 Stop and Wait 多得多,尤其是您增加其窗口大小的次数越多。我没有得到什么?

4

1 回答 1

0

我发现这个问题的解决方案是简单地使用更多位来表示序列号,因此具有更大的 MAX。如果您的 MAX 是 2 * Window size,则延迟的 2 不能被误解为正确的 ACK。

于 2012-04-18T16:41:57.457 回答