Alex_McAvoy

想要成为渔夫的猎手

多帧滑动窗口与后退 N 帧协议

【概述】

对于数据链路层中流量控制与可靠性传输机制,其可分为停止等待 ARQ后退 $N$ 帧 ARQ选择性重传 ARQ三种

由于停止等待 ARQ 大多数时间都处于等待中,这无疑浪费了大量的时间与资源

后退 $N$ 帧 ARQ 对停止等待 ARQ 做出了改善:

  1. 可连续发送多个帧
  2. 为了便于定位出错帧,对帧的编号进行了扩充
  3. 对缓冲区进行扩充,扩充后的缓冲区放入要连续发送的帧的拷贝,当发送出现问题需要再次发送时,可在缓冲区中找到对应的帧,以供再次发送

也是就说,对于 GBN-ARQ 来说,其发送窗口大小 $>1$接收窗口大小 $=1$

【发送窗口】

在 GBN-ARQ 中,发送方要发送的数据可以分为四个部分:

  1. 发送完且已被确认的数据帧
  2. 发送完正在等待确认的数据帧
  3. 未发送正在准备继续发送的数据帧
  4. 无法发送的数据帧

其中,第 2、3 部分即发送窗口内的数据帧

设 $n$ 为帧编码序号的比特位数,那么对于发送窗口的大小 $W_T$ 有:

当 $W_T>2^n-1$ 时,会出现无法分辨新帧与旧帧的问题

【工作原理】

发送方

对于 GBN-ARQ 的发送方来说,会做以下三件事:

1.上层调用

在上层要发送数据时,发送方会检查发送窗口是否已满

发送窗口已满,发送方会告知上层,上层将数据发给发送方缓冲区,等待发送窗口有空间后进行发送

发送窗口未满,上层会将数据直接交付给发送窗口,准备进行发送

2.累计确认

当发送方收到 $n$ 号数据帧对应的确认帧时,这说明接收方不仅收到了 $n$ 号数据帧,还收到了 $n$ 号帧之前的所有数据帧

由此,在 GBN-ARQ 方式下,发送方不用对每一个数据帧都返回确认帧,可以每隔几个数据帧返回一个确认帧,从而节省时间与资源

3.超时回退

与停止等待 ARQ 一样,发送方同样设置了一个超时计时器,若出现超时,发送方会重传所有已发送但未被确认的帧

举例来说,发送方发送了 $n$ 号数据帧,但该帧在链路上丢失了,$n+1$、$n+2$ 这两个数据帧仍然顺利发出,由于接收方的接收窗口只能容纳 $1$ 个帧,此时的接收方还是期望收到 $n$ 号数据帧,因此面对发送过来的 $n+1$ 和 $n-1$ 号帧将会被丢弃,一直等待 $n$ 号帧因为超时而被再次发送过来,因此,$n+1$ 与 $n+2$ 号帧会随着 $n$ 号帧再次被发送过来

接收方

对于 GBN-ARQ 的接收方来说,会做以下两件事:

1.交付数据

当接收方正确收到所期望的 $n$ 号数据帧,且 $n$ 号数据帧之前的帧也都按序到达,那么会发送一个 ACKn 确认帧传递给发送方

告知发送方其已经正确接收 $n$ 号数据帧以及之前的所有数据帧

2.乱序丢弃

若出现数据帧丢失的情况,此时,接收方等待的是 $n$ 号帧,但传过来的是 $n$ 号帧后的数据帧,此时接收方会将这些数据帧丢弃,并返回一个 ACKn-1 确认帧给发送方,告知仅收到了 $n-1$ 号帧及其之前的数据帧,希望发送方重传 $n-1$ 号帧后的数据帧

感谢您对我的支持,让我继续努力分享有用的技术与知识点!