可靠数据传输原理 二 滑动窗口协议之GBN协议

Http Socket 2018-06-07

Rdt3.0的性能太低了,显然需要改进它
如果细究这个效率太低的原因,那就是停等操作导致的。所以要打破停等机制,可以在等的同时,继续发送其他分组。

回顾这张图

Usender:效率
由于要等待RTT这个时间才能发下一个分组,所以效率很低。

流水线机制,可以提高资源利用率


比如一次性发三个。效率提高三倍

流水线协议


序列号也多了,一个分组用一个序列号。
之前是发一个 然后要等,所以先缓存起来,然后等确认后删除,现在是多个需要同时缓存起来了。

可以看到流水线机制,就是同时发多个分组在路上,然后返回ack的时候也有多个ack在路上

滑动窗口协议

要想实现流水线机制,需要滑动窗口协议


这些小竖条是一共可以提供使用的序列号的数量(k比特的话就是2^k次方个可用的序列号)。
窗口左边是已经发送并且已经确认了的,黄色的是发出去了,但是还没收到确认的。蓝色的是代表,剩余的可以用来发送的序列号,白色的是哪些还不能使用的序列号,因为你的窗口还没有滑动到那里。

两种滑动窗口协议:GBN,SR

后退N帧(GBN)协议(意思是从没接受到的ack的那个分组开始发送,就算后面的收到了,也都重新发送一遍?)


k-bit序列号意味着2的k次方个序列号可以用
最多n个分组未确认

【重】在来看看滑动窗口的结构

这些小竖条是一共可以提供使用的序列号的数量(k比特的话就是2^k次方个可用的序列号)。
窗口左边是已经发送并且已经确认了的,黄色的是发出去了,但是还没收到确认的。蓝色的是代表,窗口内剩余的可以用来发送的序列号,白色的是哪些还不能使用的序列号,因为你的窗口还没有滑动到那里。

GBN协议(理解的不够深)
是采用一种累积确认的机制(也就是会从一到...,n-1,到n一个个累积),当他ack(为n)的时候,说明都已经被确认了

毫无疑问,也是要为每一个分组设置定时器的,然后如果超过一定时间,即timeout了,那就会重发所有未收到的ack的以及后面的分组(比如第k个timeout了,那就会重发序列号为k+1,k+2,...,n-1,n的所有分组)。

上面的方式会造成资源的浪费

流水线机制就可能导致分组的ack乱序到达,gbn处理的方式是,直接丢掉哪些不是期望收到的ack序列号


可以看到当收到pkt3的时候直接丢弃发送ack1,因为收到pkt0,pkt1后,没有收到pkt2.直到pkt2timeout后,重新发送pkt2,以及之后的pkt3,pkt4...统统重发出去。

看一道题:

11.数据链路层采用后退N帧(GBN)协议,发送方已经发送了编号为0~7的帧。当计时器超时时,若发送方只接收到0、2、3号帧的确认,则发送方需要重发的帧数是(C )。

A.2 B.3 C.4 D.5

解析:连续ARQ协议中,接收方一般采用累积确认的方式即接收方对按序到达的最后一个分组发送确认,

题目中收到3的确认帧就代表编号为0、1、2、3的帧已接收,而此时发送方未收到1号帧的确认只能代表确认帧在返回的过程中丢失了,而不代表1号帧未到达接收方。因此需要重传的帧是编号为4、5、6、7的帧。

GBN协议有一定的难度,需要多看几遍,反复琢磨一下。


本文由 方方無 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论

shijiebei 365bet manbetx 188bet xinshui caipiao 95zz tongbaoyule beplay 88bifa 18luck betway bwin hg0088 aomenjinshayulecheng ca88 shenbotaiyangcheng vwin w88 weide