滑动窗口机制

滑动窗口是一种流量控制技术,滑动窗口概念不仅存在于数据链路层,也存在于传输层,两者有不同的协议,但是基本原理是很相近的。其中一个重要的区别是,一个是针对帧的传送,一个是字节数据的传送。

在TCP的滑动窗口协议中,滑动窗口以字节为单位,主要功能是进行数据流量管理,平衡两端之间的数据吞吐量,解决丢包问题。其基本原理是在任意时刻,发送方都维持了一个连续的允许发送的字节序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的字节序号,称为接收窗口。

一个窗口的大小是由一个后沿序号和一个前沿序号来控制的。发送窗口的大小是由接收窗口的大小来决定的,窗口大小不能大于接收方的接收缓冲区中剩余空间的大小,避免发送大量数据而缓冲区满后导致的丢包问题。

发送窗口:表示一次从后沿到前沿最多发送多少数据;后沿表示所要发送数据的起始序号,当收到接收方的数据确认的回复,后沿就会向前移动。前沿是根据接收方窗口大小计算的结束序号,前沿等于接收方的窗口大小加上后沿序号

接收窗口:表示从哪里开始接收数据,接收到多少字节序号为止,可以进行包序管理,对应的包就应该放到缓冲区对应的位置;后沿表示接收数据的起始序号,当收到数据时后沿就会向前移动。前沿是根据缓冲区剩余空间大小计算得到的接收数据的结束序号,缓冲区剩余空间的大小会改变前沿序号

滑动窗口实现面向流的可靠性
发送窗口只有收到对端对于本段发送窗口内字节的ACK确认,才会移动发送窗口的后沿。而接收窗口只有在前面所有的段都确认的情况下才会移动后沿。当前面还有字节未接收但收到后面字节的情况下,窗口不会移动,并不对后序字节确认。超时后发送端会对这些数据进行重传

图解
MMS:表示tcp数据通信时一条数据的最大大小,通信时双方进行协商,取双方MMS中较小的一方作为最大数据段大小。

1、在三次握手时接收方会告诉发送方窗口大小和mms。

滑动窗口方法是机器学习方法吗 滑动窗口机制原理_网络


2、发送方发送数据,接收方接收数据后接收方的后沿向前移动

滑动窗口方法是机器学习方法吗 滑动窗口机制原理_网络_02


3、发送方得到确认后将之前的数据丢掉,发送方的后沿向前移动,此时的前沿不变,并回复确认序号给发送方,告知发送方窗口大小

滑动窗口方法是机器学习方法吗 滑动窗口机制原理_滑动窗口_03


4、发送方发送数据,接收方接收数据后接收方的后沿向前移动

滑动窗口方法是机器学习方法吗 滑动窗口机制原理_滑动窗口方法是机器学习方法吗_04

5、接收方取出缓冲区的数据之后,剩余空间变大,前沿向前移动,窗口变大,并回复给确认序号给发送方,告知发送方窗口大小

滑动窗口方法是机器学习方法吗 滑动窗口机制原理_网络_05


6、发送方得到确认后将之前的数据丢掉,发送方的后沿向前移动。得知接收方的窗口大小变大之后,前沿就会向前移动,始终保持前沿等于后沿加上窗口大小

滑动窗口方法是机器学习方法吗 滑动窗口机制原理_滑动窗口_06

滑动窗口机制允许发送端根据窗口大小以及mss连续发送多条数据,发送方根据不同场景有不同协议的处理
停等协议:发送完一条数据就停止发送,等待对方的确认,在收到确认才发送下一条数据;场景:网络状态极差
回退n步协议:一条数据丢了,则需要发送端将丢失这条数据以后的数据都进行重传;场景:网络状态较差
选择重传协议:一条数据丢了,则仅仅针对丢失的这条数据进行重传;场景:网络状态较好