滑动窗口的介绍
滑动窗口是tcp协议中的一个重要概念,滑动窗口是字节为单位,而tcp头部的序列化和确认号也是以字节为单位的,滑动窗口里是含有可以传输的字节的数量(可以传输不是已经传输),而滑动窗口的大小是由接受数据的那一方来进行控制(通过发送报文的形式,tcp头部有一个字段就是滑动窗口的大小),这也是tcp流量控制的基础。
tcp的流量控制
流量控制就是通过双方对滑动窗口的调整来对传输的字节数量进行控制,防止接收方的缓冲区满了以后,发送端还一直给他发送报文
流量控制:TCP使用滑动窗口机制来实现流量控制,通过接收方在TCP报文段的首部中告知发送方自己的可接收数据量,即剩余的缓冲区大小。发送方根据接收方提供的窗口大小来决定发送数据的量,保证接收方能及时处理和接收数据。
下面我们来举个例子
这里我们开始时的滑动窗口大小是四百,但是现在发送了前三百字节,还剩一百字节没有发送,而发送的三百字节里面,前面的两百字节已经得到了确认,而后面的一百字节在发送途中丢失,在后来接收端将滑动窗口缩小为300字节
那么我们可以看到,滑动窗口就将后面没有确认的那一百字节开始算,知道达到三百字节的宽度,所以我们可以发现,滑动窗口里面存放的是允许被发送的字节,而真正发送成功的字节是通过来自接收端的确认,然后滑动窗口就可以往前进,再继续持续发送消息,当我们将滑动窗口内的字节发送成功以后,如果没有收到接收方发来的确认信息,我们是不能再发送消息的,因为此时滑动窗口内可以发送的字节已经发送完毕,而有没有确认里面的那些字节是已经发送成功可以抛弃的。
后来服务端对501号字节进行确认,就说明500之前的所有数据都发送完毕并且接收成功,但是这个时候滑动窗口被置为0了,就说明滑动窗口内部无法装载任何字节,所以说此时也没有任何字节是可以被发送的。
后面是滑动窗口持续为0时的解决办法
总结
流量控制机制的益处
-
防止过载:流量控制可以防止发送方发送数据的速度超过接收方处理数据的能力,从而避免接收方的缓冲区溢出。
-
提高资源利用率:通过允许接收方根据其当前的处理能力和可用资源来调整窗口大小,流量控制有助于更有效地利用网络资源。
-
避免数据丢失:如果接收方无法及时处理数据,流量控制可以减少因缓冲区溢出导致的数据丢失。
-
适应不同网络条件:流量控制机制可以根据网络的当前状况(如带宽、延迟和拥塞)动态调整数据传输速率,以适应不同的网络环境。
-
提高传输效率:通过允许发送方在等待确认之前发送多个数据包,流量控制可以减少等待时间,提高数据传输的效率。
-
增强可靠性:流量控制是TCP可靠传输机制的一部分,它确保数据按顺序到达,并且所有数据都得到确认,从而增强了整个通信过程的可靠性。
流量控制是TCP协议中确保数据可靠、有序传输的关键机制,它通过动态调整数据传输速率来适应网络条件和接收方的处理能力。