先看一下sw协议缺点:

再看GBN协议

接下来:
发送窗口:
注意发送窗口的大小为1时,就是sw协议

接受窗口的值为1

接收方确认数据无无码丢失重复之后 回复ACK

发送方接受到ack0-ACk4代表发送的前5个数据分组接收方已经正确收到

接下来我们看一种传输出现问题的情况

接受方按序接受,接收窗口每要接受一个分组数据,就要向前移动1
移动到2这个位置 并且通过差错检测发现DATA2产生了误码

丢掉误码的分组之后 误码分组后面的分组的发送序号未落入接受窗口(接受窗口长度为1)
DATA3和DATA4到达了接收端 但是接收端没有接收

这时接收方->发送方发送 上一次正常接受的分组的响应分组 ACK1

发送方接受到ACK1知道了DATA0 DATA1已经被接收方收到 发送窗口向后移动2位
但是!!ACK1到来不意味着DATA2就是由于某种原因接收端没收到,还有可能ACK2就在路上呢??
注意!!!!刚刚窗口是 0 1 2 3 4
现在向前移动2位是 2 3 4 5 6
那么发送方还会从DATA2开始发送嘛?为什么不发送2,3,4,5,6呢?而是只发送刚刚落入的5,6?
还是那句话:ACK1到来不意味着DATA2就是由于某种原因接收端没收到,还有可能ACK2就在路上呢??如果我发送2,3,4,5,6但是可能刚刚2,3,4接收方已经收到了,只不过对应的ACK还没有到达,这样如果我发送2,3,4,5,6可能就会造成分组重复,浪费网络资源。
5,6是新落入窗口的 所以5,6重新发送 结果可想而知 接受窗口序号为2 接收端接受不了
所以返回上一次正确接受的数据分组DATA1的确认分组ACK1

ACK1回到发送端了,窗口没有移动。。。。。。一直卡这个地方,后面的数据还发不发了?
这样我们规定一个时间:
超过这个时间重传所有窗口中的数据分组

所以:我们讲了什么
发送方一次发送的数据分组中有一个误码(DATA2),那么DATA2后面的数据分组(即便没有误码,这个是我的假设)到达了接收端。
由于接受窗口的值与发送分组的值不同而不能被接收。
这时候等到超过了超时重传时间,重新发送窗口中所有的数据分组。这就是回退n帧,协议名的由来。
你说太可惜啦,明明DATA2后面的数据如果没有误码,就可以被接受到的。。。
但是协议就是这样。。我们虽然确保了可靠传输,引入了超时重传,但是你想我们等待超时重传这一段时间是很宝贵的呀!所以这个协议适合在误码率低的信道上用。
而不适合那些经常容易误码的地方用,比如无线信道,容易受到干扰,这时候这个GBN协议就不太适用啦。
接下来来一道小小考研题
——————————————————————————————————

0-7的帧,说明滑动窗口的大小为8 至少也是用4个bit位去编码的吧
之前滑动窗口的值为0 1 2 3 4 5 6 7
发送方收到ACK3,说明三号及其之前的数据分组被正常接受
这时候移动滑动窗口4位
现在滑动窗口中的值为 4 5 6 7 8 9 10 11
重发的帧为4,5,6,7
