传输层-3、流水机制和滑动窗口协议

来源:互联网 发布:电脑怎么修改淘宝评价 编辑:程序博客网 时间:2024/06/05 08:02

参考哈工大公开课。


动机与原理

在上面的一篇文章中介绍了保证数据传输的原理与停等方式。但是停等方式的效率极低,为了对其效率进行改进,我们可以采用流水方式对其效率进行改进,就是连续发多个数据包,接收方接收到数据包按照特定的规则进行ACK回复,从而完成数据传输。

图一:流水机制示例

 

采用了流水方式之后,就允许数据在发送方收到ACK之前连续发送多个分组,这样就需要更大的存储空间缓存分组了。对于这种机制的实现是采用窗口协议:

窗口:1、规定使用序列号的范围,窗口尺寸为N就意味着最多有N各等待确认的消息。

滑动窗口:随着协议的运行,窗口在序列号空间内向前滑动。支持滑动窗口的协议有两种:GBN和SR。

图二:窗口示例

 

GBN协议:

这个协议的核心思想就是发送方按流水方式发,接收方按照顺序接收,只回复自己带有最大分组号的ACK。发送方按流水方式发后,接收方只按序接收;

举个例子:窗口最多发送4个分组,发送方发送了0,1,2,3号分组,发送完后开始计时,传输过程中2号分组丢失;接收方接收到0号,1号分组,分别发送ACK(0),ACK(1),当接收道3号分组时,不是接受方要接收的2号分组,所有丢弃3号分组并向发送方发送ACK(1);

发送方接收到ACK(0)、ACK(1)后滑动窗口,将0号,1号分组设为已发送分组,并发送4号,5号分组;由于没有接收到ACK(2),时间timeout之后,发送方会重新从2号分组开始发送。

图三:GBN协议示例

GBN协议有一个问题,就接收方只能按序接收,这样就会造成一些没按序到达的分组的浪费,为了解决这一个问题,提出了SR协议。

 

 

SR协议:

SR协议其实就是停等协议的流水版,就是把没有按序到达的的分组也缓存下来,并且对发送方发送每一个分组都设置一个计时器,如果超时没有接收到对应的ACK就重新发送,如果在超时之前接收到对应发ACK就标记成发送成功,如果接收是窗口的边缘且是接近发送成功的那边,那么就移动窗口;对于接收方,接受到什么分组,都发送带有该分组的分组号的ACK,同时如果接收方没有该分组就接收保存该分组,否则就直接将该分组丢弃;在发送放,接收到一个ACK,就表明该分组已经被接收方正确接收了,以后就不需要再次发送该分组了。

图四:SR协议窗口示例

 

图五:SR过程示例

原创粉丝点击