文章目录
计算机网络——数据链路层(三)
七、回退n帧(协议5)
接收方的接收策略:丢弃错帧,其后续帧因不是期望接收的帧也被丢弃。
发送方的重传策略选择:缓存在发送窗口中的出错帧以及其后续帧全部重发。
7.1 回退n帧的基本概念
- 定义序列号seq的取值范围和滑动窗口长度w
- 发送方连续发送至发送窗口满
- 接收窗口为1,对出错帧不确认,引发超时
- 发送方超时重传,从未被确认帧开始
例如 MAX_SEQ = 7
7.2 回退n帧的工作原理
在回退n帧里面,采用了累计确认
:发送方一直保存着未被确认的帧
7.3 滑动窗口长度W的选择
滑动窗口长度最大不能超过序列号。
例如序列号使用三位来表示的,那么三位的最大值111
,也就是 7,所以窗口最大也就只能等于 7 。
7.4 滑动窗口长度选择错误带来的异常
例如 W = 8
这里我们需要注意一下:接收方可能不立即确认接收帧,捎带确认ack=n,意味着n-1 n-2 也被确认。
如上图。
当第一次seq= 0,1,2,3,4,5,6,7 发送完,接收方接收到后并确认。
然后发送方第二次再次发送seq = 0,1,2,3,4,5,6,7 ,但是在这个时候可能,接收方可能会发现数据帧全部出错
然后丢弃,所以会返回一个ask = 7 的帧 ,当接收方收到ask = 7 ,接收方就迷惑了,不知道到底是第一次发的7,还是第二次发送的7,因此会带来差错。
但是 w = 7 就不会出现这种情况了,如下图。
八、选择性重传(协议6)
- 接收方的策略选择:丢弃错帧,缓存正确接收帧。
- 发送方的重传策略选择:只重发错帧。
8.1 基本概念
- 接收窗口存储差错帧后的所有真确帧
- 发送方只重传差错真
- 接收方接收重传帧,按正确顺序将分组提交网络层
例如Seq = 0~15 W=8
8.2 工作原理
关键步骤一:接收方收到非期望的正确帧,仍然接收正确的帧并缓存
关键步骤二:发送方选择帧进行重传
关键步骤三:接收方收到重传帧,排序上交
8.3 否定确认NAK
当我们收到那个错误的帧后,NAK启动后,我们就可以加一个NAK= 2 ,明确的告诉对方2号错了请重传,然后对方直接发起重传。加快了重传
8.4 回退n帧和选择性重传的比较
8.5 滑动窗口长度W的选择
我们可以使用如下公式确定W的值
例如MAX_SEQ
= 7 则 W = 4
8.6 滑动窗口长度选择错误带来的异常
例如 W ≠ 4 W = 7
第一次发送方发送0~6的数据,并且发送成功了。
接收方成功接到了,然后发送方移动滑动窗口,接收方并返回确认帧。
如上图,在此时,接收方的确认帧很不幸被雷击中并全部丢失。
但是此时,0号数据定时超期,会重发一个0号数据,然后接收方由于已经移动滑动窗口,所以将0号帧放入了第二次的窗口内,但实际上这只是第一次的重传帧。
这实际上是新老窗口重叠带来的。
解决办法就是新老窗口不重叠即可。
W = 4
如图,当重传后,接收方发现自己的窗口内并没有0号,所以就会知道这是一个已经接受过的重传帧,这样协议就可以正常工作了。
所以我们的窗口一定不能超过 (MAX_SEQ + 1) / 2