前两篇文章分别解释了可靠性传输要解决的两件事情:缓存
1:数据受损怎么办网络
2:数据丢失怎么办性能
1:停等协议(等前一个完全确认发送成功后再发送下一组数据)spa
2:重传(若是传输受损,重传;若是传输丢失,重传)blog
经过以上两个方法外加序列号,校验等已经实现了可靠性传输。可是有性能问题资源
信道利用率U=传输时间 /传输时间 + RTT。当RTT很大是,传输效率会很是低下。效率
把信道假设为一条高速公路,停等相似于前一辆车到达终点后下一辆车才能开始进入高速公路,效率可想而知。原理
再也不以停等的形式进行发送,而是一次传输多个,下图为例,一次性传输三组数据使得信道的利用率提升了三倍。方法
一样用高速公路做为例子,车子一辆跟着一辆进入高速公路。im
1. 更多的序号,停等0,1就够了。
2.发送的过程当中可能会乱序,发送方最低限度须要缓存已经发送可是没有确认的数据分组,接收方也许也要缓存已经收到的数据。
下图为一个基本的滑动窗口在发送端的模型
GBN的好处就是简单,接收方只须要维护一个期待的序列号便可。
最大的问题是资源浪费,上图能够看出即便分组3,4,5被正确接受了,可是由于分组2丢失了,致使2,3,4,5被所有重传。
GBN中接收方直接丢弃失序分组,简单可是资源浪费,SR协议就是为了解决浪费。
解决浪费的核心就是不丢弃失序分组。可是做为接收方,传输层要保证按序把数据传输给上层的应用层,因此相比GBN,SR最大的改造是在接受方增长和缓存。做为发送方,SR在窗口内也有乱序的已经确认的数据分组。
接收方缓存了正确接收可是乱序的数据。当ReceiveBase(指望的正确分组)到达时,数据会被交付给上层应用,同时接受窗口会移动。Receivebase=ReceiveBase+1
以上,滑动窗口的基本原理已经介绍完毕,经过对比发现,无论时GNB仍是SR,为了保证数据不会乱序,都有一个共同特色: