【概述】
对于数据链路层中流量控制与可靠性传输机制,其可分为停止等待 ARQ、后退 $N$ 帧 ARQ、选择性重传 ARQ三种
由于 GBN-ARQ 发送方累计确认的存在,一旦出错不仅要重传丢失的帧,还要重传丢失的帧后的所有帧,这无疑降低了传输效率
为此,选择重传 ARQ 对其进行了改善:
- 回归单个确认
- 扩充接收窗口,可以临时存储错误帧与乱序到达的帧
也就是说,对于 SR-ARQ 来说,其发送窗口大小 $>1$,接收窗口大小 $>1$
【发送窗口与接收窗口】
在 SR-ARQ 中,发送方及其发送窗口中的数据划分与 GBN-ARQ 中一样,不做任何更改
但接收方的接收窗口中的数据可划分为四个部分:
- 接收完毕并确认的数据帧
- 希望收到但没有收到的数据帧
- 收到并且确认但缓存在接收窗口中的数据帧
- 等待接收的数据帧
其中,第 2、3、4 部分,即接收窗口内的数据帧
设 $n$ 是帧编码序号的比特位数,那么,对于发送窗口的大小 $W_T$ 和接收窗口的大小 $W_R$ 有:
因此,有:
当 $W_R=W_T>2^n-1$ 时,同样会出现无法分辨新帧与旧帧的问题
【工作原理】
发送方
对于 SR-ARQ 的发送方来说,会做以下三件事:
1.上层调用
在从上层收到数据后,发送方会检查下一个可用于该帧的序号
若序号在发送窗口内,则发送数据帧
若序号不在发送窗口内,则像 GBN-ARQ 一样,缓存到发送窗口的缓冲区内
2.单个确认
当收到某个数据帧的确认帧时,如果这个帧的序号在发送窗口内,那么发送窗口会将这个被确认的数据帧标记为已接收;否则,不进行任何操作
如果该帧序号是发送窗口的下界(最左边第一个窗口对应的序号),那么将发送窗口向前移动到具有最小序号的未确认帧处
若发送窗口移动,且在发送窗口内存在未发送帧,则将这些数据帧发送
3.超时重传
与停止等待 ARQ、GBN-ARQ 相似,SR-ARQ 的发送方为每个帧设置了一个超时计时器
若某个超时计时器出现超时,发送方会重传当前超时计时器对应数据帧
接收方
对于 SR-ARQ 的接收方来说,会做以下三件事:
1.全部接收
当接收方收到数据帧时,若数据帧处于接收窗口内,则进行接收,并逐个发送确认帧
此时,失序的帧将会被缓存起来,直到所有帧均被正确接收后,才会将这一批帧按序交付给上层,从而前移接收窗口
2.返回确认
当接收方收到数据帧时,若数据帧小于接收窗口的下界,说明之前返回的确认帧超时,此时会将该数据帧丢弃,并重新发送确认帧
3.差错处理
当接收方通过差错控制技术发现数据帧有错时,将会丢弃该帧,并返回一个 NAK
否定应答帧,要求发送方重新发送数据局帧