可靠数据传输基本原理(3)-滑动窗口

摘要:
前两篇文章分别解释了可靠传输中需要解决的两件事:1.如果数据损坏怎么办?2.如果数据丢失怎么办?可靠传输的核心解决方案:1.停止等待协议。下图显示了发送端的基本滑动窗口模型。窗口大小为N,最大大小为65535字节。作为发送方,SR在窗口中也有无序确认的数据包。

前两篇文章分别解释了可靠性传输要解决的两件事情:

1:数据受损怎么办

2:数据丢失怎么办

可靠性传输核心解决办法:

1:停等协议(等前一个彻底确认发送成功后再发送下一组数据)

2:重传(如果传输受损,重传;如果传输丢失,重传)

通过以上两个方法外加序列号,校验等已经实现了可靠性传输。但是有性能问题

停等协议的弊端

可靠数据传输基本原理(3)-滑动窗口第1张

信道利用率U=传输时间 /传输时间 + RTT。当RTT很大是,传输效率会非常低下。

把信道假设为一条高速公路,停等类似于前一辆车到达终点后下一辆车才能开始进入高速公路,效率可想而知。

引入流水线

不再以停等的形式进行发送,而是一次传输多个,下图为例,一次性传输三组数据使得信道的利用率提高了三倍。

可靠数据传输基本原理(3)-滑动窗口第2张

 同样用高速公路作为例子,车子一辆跟着一辆进入高速公路。

停等和流水线运行时状态

 可靠数据传输基本原理(3)-滑动窗口第3张

流水线需要面对的问题

1. 更多的序号,停等0,1就够了。

2.发送的过程中可能会乱序,发送方最低限度需要缓存已经发送但是没有确认的数据分组,接收方也许也要缓存已经收到的数据。

滑动窗口基本模型

下图为一个基本的滑动窗口在发送端的模型

可靠数据传输基本原理(3)-滑动窗口第4张

说明

  • 窗口大小为N(窗口的大小在TCP中是在握手的阶段接收方告诉发送方的,后续随着网络情况和接收方读取的速度,会实时进行调整),最大为65535字节。
  • Base下一个等待确认的序号。
  • NextSeqNum为下一个即将要发送的序号。

行为

  • 发送方缓存了已经发送但是没有确认的数据分组(因为如果超时没有确认,需要重新传递这些数据)
  • 当Base对应的序号确认后,窗口向右滑动一格,同时把序号为NextSeqNum对应的数据分组发送出去:Base=Base+1,NextSeqNum=NextSeqNum+1.
滑动窗口之回退N步-GNB(Go-Back-To-N)
  • 累计确认:收到一个序号为n的ack,代表接收方已经收到了序号为n以及n以前的全部分组
  • 超时,如果发生超时,发送方重新传递所有已经发送但是还未确认的分组
  • 接收方丢弃所有失序的分组,如果接收方期待的是N,如果N+1到了,则直接丢弃。

示意图

可靠数据传输基本原理(3)-滑动窗口第5张

GBN的好处就是简单,接收方只需要维护一个期待的序列号即可。

最大的问题是资源浪费,上图可以看出即使分组3,4,5被正确接受了,但是因为分组2丢失了,导致2,3,4,5被全部重传。

滑动窗口之选择重传-SR(Selective Repeat)

GBN中接收方直接丢弃失序分组,简单但是资源浪费,SR协议就是为了解决浪费。

解决浪费的核心就是不丢弃失序分组。但是作为接收方,传输层要保证按序把数据传输给上层的应用层,所以相比GBN,SR最大的改造是在接受方增加和缓存。作为发送方,SR在窗口内也有乱序的已经确认的数据分组。

接收方窗口

接收方缓存了正确接收但是乱序的数据。当ReceiveBase(期望的正确分组)到达时,数据会被交付给上层应用,同时接受窗口会移动。Receivebase=ReceiveBase+1

可靠数据传输基本原理(3)-滑动窗口第6张

发送方窗口

可靠数据传输基本原理(3)-滑动窗口第7张

 示意图

可靠数据传输基本原理(3)-滑动窗口第8张

以上,滑动窗口的基本原理已经介绍完毕,通过对比发现,不管时GNB还是SR,为了保证数据不会乱序,都有一个共同特点:

  • 发送方,只有发送Base序号的数据确认后,窗口才会移动
  • 接收方,只有接收Base序号的数据收到后,才会把数据交给上层(GNB中,非Base序号的会丢弃。

免责声明:文章转载自《可靠数据传输基本原理(3)-滑动窗口》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Qt之生成Window资源文件(.rc 文件)运维与自动化系列②自动化安装和部署下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【算法】滑动窗口三步走

滑动窗口介绍 对于大部分滑动窗口类型的题目,一般是考察字符串的匹配。比较标准的题目,会给出一个模式串B,以及一个目标串A。然后提出问题,找到A中符合对B一些限定规则的子串或者对A一些限定规则的结果,最终再将搜索出的子串完成题意中要求的组合或者其他。 比如:给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起...

直观明了的总结TCP滑动窗口机制原理及作用

阅读需要对TCP报文头部字段以及它们的字段有一定了解。 一. 原理   TCP是全双工通信,因此每一方的滑动窗口都包括了接收窗口+发送窗口,接收窗口负责处理自己接收到的数据,发送窗口负责处理自己要发送出去的数据。滑动窗口的本质其实就是维护几个变量,通过这些变量将TCP处理的数据分为几类,同时在发送出一个报文、接收一个报文对这些变量做一定的处理维护。  ...

数据挖掘——聚类算法(一)

数据挖掘——聚类算法(一)1、聚类的定义     俗话说“人以群分、物以类聚”,聚类的思想就是通过将属性相近的数据分为一类。聚类算法属于非监督算法,即不需要专家样本,让无序的数据自行进行组合,最后达到某种要求之后停止聚集。 2、聚类分类聚类按照原理角度可以大体分为四类:1)基于原型的聚类(也成为基于距离的聚类);2)基于密度的聚类;3)基于凝聚层次聚类;4...

Python之滑动窗口

需求 对于一个数组array = ["n","v","l","f",...,"y","c","k"]; input 当前位置 index 数组的长度 arraySize 基于当前位置,(前/后)滑动窗口的元素数目 windowSize 即 滑动窗口(假定:包含当前元素 array[idx]) 总长:2*windowSize+1 output 滑动...

常见的聚类算法

常见的聚类算法 1. K-Means(K均值)聚类 算法步骤: (1) 首先我们选择一些类/组,并随机初始化它们各自的中心点。中心点是与每个数据点向量长度相同的位置。这需要我们提前预知类的数量(即中心点的数量)。 (2) 计算每个数据点到中心点的距离,数据点距离哪个中心点最近就划分到哪一类中。 (3) 计算每一类中中心点作为新的中心点。 (4) 重复以上步...

常见限流算法总结

参考: https://blog.csdn.net/weixin_41846320/article/details/95941361 https://www.cnblogs.com/taromilk/p/11751211.html https://zhuanlan.zhihu.com/p/110596981 https://www.cnblogs.com/...