📜  Go-Back-N ARQ

📅  最后修改于: 2020-11-10 06:11:57             🧑  作者: Mango

Go-Back-N ARQ

在了解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,这意味着可以在期望接收方确认之前一次发送三个帧。

它使用协议流水线的原理,其中可以在收到第一个帧的确认之前发送多个帧。如果我们有五个帧并且概念是Go-Back-3,则意味着可以发送三个帧,即第1帧,第2帧,第3帧可以在期望对第1帧的确认之前发送。

在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,依此类推。

序列号中的位数为2,以生成二进制序列00、01、10、11。

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个帧的确认。

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

然后,发送者将发送下一帧,即4,以及包含四个帧(1,2,3,4)的窗口幻灯片。

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

现在,我们假设接收方没有确认帧2,或者丢失了帧,或者丢失了确认。代替发送第6帧,发送者“返回2”(当前窗口的第一帧)将重新发送当前窗口中的所有帧,即2,3,4,5。


与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号数据包。

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

步骤3:现在,发送方接收到数据包2的确认。在收到对数据包2的确认后,发送方发送下一个数据包,即数据包6。如前面提到的问题,每6个数据丢失,因此第6个数据包丢失,但发送方不知道第6个数据包已丢失。

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

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

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

步骤7:当前窗口保存着四个数据包,即6、7、8、9,其中第6个数据包是窗口中的第一个数据包。众所周知,第6个数据包已丢失,因此发送方将收到否定确认NAK(6)。我们知道每个第6个数据包都将丢失,因此计数器将从1重新开始。因此,分别将第7个数据包,第8个数据包和第9个数据包的计数器值1、2、3赋给了它。

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

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

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

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

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

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

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