回退N自动重传请求

17 Mar 2025 | 6 分钟阅读

在理解 Go-Back-N ARQ 的工作原理之前,我们先回顾一下滑动窗口协议。众所周知,滑动窗口协议与停止等待协议不同。在停止等待协议中,发送方一次只能发送一个帧,并且在收到之前发送帧的确认之前不能发送下一个帧,而在滑动窗口协议中,可以一次发送多个帧。滑动窗口协议的变体包括 Go-Back-N ARQ 和选择性重复 ARQ。让我们来理解一下“什么是 Go-Back-N ARQ”。

什么是 Go-Back-N ARQ?

在 Go-Back-N ARQ 中,N 是发送方的窗口大小。假设我们说 Go-Back-3,这意味着在等待接收方确认之前,可以一次发送三个帧。

它使用了协议流水线(protocol pipelining)的原理,即在收到第一个帧的确认之前可以发送多个帧。如果我们有五个帧,并且概念是 Go-Back-3,这意味着在等待第一个帧的确认之前,可以发送三个帧,即帧 1、帧 2、帧 3。

在 Go-Back-N ARQ 中,帧被顺序编号,因为 Go-Back-N ARQ 一次发送多个帧,这需要编号方法来区分帧与另一帧,而这些编号被称为序列号。

一次可以发送的帧数完全取决于发送方窗口的大小。因此,我们可以说“N”是在收到接收方确认之前可以发送的帧数。

如果在约定的时间内没有收到某个帧的确认,则当前窗口中的所有帧都将被重新传输。假设我们发送了第 5 帧,但没有收到第 5 帧的确认,并且当前窗口包含三个帧,那么这三个帧将被重新传输。

出站帧的序列号取决于发送方窗口的大小。假设发送方窗口大小为 2,我们要发送十个帧,那么序列号将不是 1,2,3,4,5,6,7,8,9,10。让我们通过一个例子来理解。

  • N 是发送方的窗口大小。
  • 如果发送方窗口的大小是 4,则序列号将是 0,1,2,3,0,1,2,3,0,1,2,依此类推。

用于生成二进制序列 00,01,10,11 的序列号的位数是 2。

Go-Back-N ARQ 的工作原理

假设有一个发送方和一个接收方,我们假设有 11 帧要发送。这些帧表示为 0,1,2,3,4,5,6,7,8,9,10,这些是帧的序列号。主要是,序列号由发送方窗口大小决定。但是,为了更好地理解,我们使用了连续的序列号,即 0,1,2,3,4,5,6,7,8,9,10。让我们考虑窗口大小为 4,这意味着在等待第一个帧的确认之前,可以一次发送四个帧。

步骤 1:首先,发送方将第一批四个帧发送给接收方,即 0,1,2,3,现在发送方期望收到第 0 帧的确认。

Go-Back-N ARQ

假设接收方已发送第 0 帧的确认,并且接收方已成功收到。

Go-Back-N ARQ

然后发送方将发送下一个帧,即 4,窗口滑动,包含四个帧(1,2,3,4)。

Go-Back-N ARQ

然后接收方将发送第 1 帧的确认。收到确认后,发送方将发送下一个帧,即帧 5,窗口将滑动,包含四个帧(2,3,4,5)。

Go-Back-N ARQ

现在,假设接收方没有确认第 2 帧,可能是帧丢失,也可能是确认丢失。发送方没有发送第 6 帧,而是回退到第 2 帧,这是当前窗口的第一个帧,重新传输当前窗口中的所有帧,即 2,3,4,5。

Go-Back-N ARQ
Go-Back-N ARQ

与 Go-Back-N ARQ 相关的重要注意事项

  • 在 Go-Back-N 中,N 决定了发送方窗口的大小,而接收方窗口的大小始终为 1。
  • 它不考虑损坏的帧,只是丢弃它们。
  • 它不接受乱序的帧,并将其丢弃。
  • 如果发送方未收到确认,则会导致当前窗口中的所有帧被重新传输。

让我们通过一个例子来理解 Go-Back-N ARQ。

示例 1:在 GB4 中,如果每传输第 6 个数据包就会丢失,并且我们必须发送 10 个数据包,那么需要多少次传输?

解答:这里,GB4 表示 N 等于 4。发送方窗口的大小为 4。

步骤 1:由于窗口大小为 4,因此一次传输四个数据包,即数据包 1、数据包 2、数据包 3 和数据包 4。

Go-Back-N ARQ

步骤 2:一旦完成窗口大小的传输,发送方将收到第一个帧的确认,即数据包 1。收到确认后,发送方发送下一个数据包,即数据包 5。在这种情况下,窗口滑动,包含四个数据包,即 2,3,4,5,并排除数据包 1,因为数据包 1 的确认已成功收到。

Go-Back-N ARQ

步骤 3:现在,发送方收到数据包 2 的确认。在收到数据包 2 的确认后,发送方发送下一个数据包,即数据包 6。如问题所述,每传输第 6 个数据包就会丢失,因此这个第 6 个数据包丢失了,但发送方不知道第 6 个数据包已丢失。

Go-Back-N ARQ

步骤 4:发送方收到数据包 3 的确认。在收到第 3 个数据包的确认后,发送方发送下一个数据包,即第 7 个数据包。窗口将滑动,包含四个数据包,即 4, 5, 6, 7。

Go-Back-N ARQ

步骤 5:发送第 7 个数据包时,发送方收到数据包 4 的确认。在收到确认后,发送方发送下一个数据包,即第 8 个数据包。窗口将滑动,包含四个数据包,即 5, 6, 7, 8。

Go-Back-N ARQ

步骤 6:发送第 8 个数据包时,发送方收到数据包 5 的确认。收到数据包 5 的确认后,发送方发送下一个数据包,即第 9 个数据包。窗口将滑动,包含四个数据包,即 6, 7, 8, 9。

Go-Back-N ARQ

步骤 7:当前窗口包含四个数据包,即 6, 7, 8, 9,其中第 6 个数据包是窗口中的第一个数据包。正如我们所知,第 6 个数据包已丢失,因此发送方收到否定确认 NAK(6)。正如我们所知,每传输第 6 个数据包就会丢失,因此计数器将从 1 重新开始。所以,计数器值 1, 2, 3 分别赋予第 7 个数据包、第 8 个数据包、第 9 个数据包。

Go-Back-N ARQ

步骤 8:由于是 Go-BACK,所以它会重新传输当前窗口中的所有数据包。它将重新发送 6, 7, 8, 9。6, 7, 8, 9 的计数器值分别为 4, 5, 6, 1。在这种情况下,第 8 个数据包丢失了,因为它具有 6 的计数器值,因此计数器变量将再次从 1 开始。

Go-Back-N ARQ

步骤 9:重新传输后,发送方收到第 6 个数据包的确认。收到第 6 个数据包的确认后,发送方发送第 10 个数据包。现在,当前窗口包含四个数据包,即 7, 8, 9, 10。

Go-Back-N ARQ

步骤 10:发送第 10 个数据包时,发送方收到第 7 个数据包的确认。现在当前窗口包含三个数据包,8, 9 和 10。8, 9, 10 的计数器值分别为 6, 1, 2。

Go-Back-N ARQ

步骤 11:由于第 8 个数据包的计数器值为 6,这意味着第 8 个数据包已丢失,并且发送方收到 NAK (8)。

步骤 12:由于发送方收到了第 8 个数据包的否定确认,它会重新发送当前窗口中的所有数据包,即 8, 9, 10。

Go-Back-N ARQ

步骤 13:8, 9, 10 的计数器值分别为 3, 4, 5,因此它们的确认已成功收到。

从上图可以得出结论,总共需要 17 次传输。


下一主题RJ Cable