TCP如何利用滑动窗口实现流量控制(15分钟醍醐灌顶)

您所在的位置:网站首页 流量限制是多少 TCP如何利用滑动窗口实现流量控制(15分钟醍醐灌顶)

TCP如何利用滑动窗口实现流量控制(15分钟醍醐灌顶)

2024-06-29 07:45| 来源: 网络整理| 查看: 265

TCP如何利用滑动窗口实现流量控制 前言: 为什么需要流量控制 因为如果发送方把数据发送的过快,接收方就可能来不及接收,这就会造成数据的丢失流量控制就是让发送方的发送速率不要太快,让接收方来得及接收所有数据TCP中是通过滑动窗口机制在TCP连接上实现对发送方的流量控制(接收方控制发送方) 流量控制的具体细节:

假设先不考虑拥塞控制,发送方的发送窗口等于接收方的接收窗口

假设一个如下的TCP连接情况:

主机A和主机B已建立TCP连接,主机A给主机B发送数据,主机B对主机A进行流量控制;

为了叙述简单,假设主机A缓冲区的数据会按照一个包100字节的块发送,如下所示:

请添加图片描述

1、若在最开始的时候,主机B告诉主机A自己的接收窗口为400,那么主机A将自己的发送窗口设置为400;

2、主机A发送1~100号的数据,主机A发送101~200号数据,主机A继续发送201~300号数据,理论上可以一直将发送窗口内的数据全部发完

3、若主机A发送的1~100号、101~200号数据顺利到达主机B并被主机B接收, 但是201~300号意外丢失了。主机B会返回响应ACK=1,ack=201,rwnd=300,这表示主机B已接收到201号之前的数据,(假设)并将自己的接收窗口设置为300

(这是主机B对主机A的一次流量控制,因为其缩小了自己的接收窗口)

4、主机A接收到主机B发来的响应后

因为知道了201号之前的数据已被成功接收,所以会将发送窗口向前滑动,将201号之前的数据移出发送窗口,同时可以销毁缓冲区内201号之前的数据。又因为主机B的接收窗口调整为300,所以主机A将自己的发送窗口也调整为300,此时发送窗口内数据的序号为201~300 、301~400、 401~500

5、主机A继续发送301~400、401~500也即发送窗口内的数据;发送窗口内的数据发送完后发送方暂停发送。

6、主机A每次发送TCP报文段都会开启一个重传计时器,假设现在201~300号数据对应的重传计时器超时了,主机A会再次将该段数据包装好并发送去seq=201,data...

7、若主机B接收到201~300号数据,将返回响应ACK=1,ack=501,rwnd=100,表示主机B已成功接收501号之前的数据,并假设将自己的接收窗口设置为100

(这是主机B对主机A的又一次流量控制,因为其缩小了自己的接收窗口)

8、主机A接收到主机B发来的响应后,与第4步类似

因为知道了501号之前的数据已被成功接收,所以会将发送窗口向前滑动,将501号之前的数据移出发送窗口,同时可以销毁缓冲区内501号之前的数据又因为主机B接收窗口调整为100,所以主机A将自己的发送窗口也调整为100,此时主机A发送窗口内的数据序号为501~600号

9、主机A继续发送其发送窗口内的501~600号数据,发送窗口内的数据全部发送完,所以暂停发送数据

10、主机B接收到501~600号数据,将返回ACK=1,ack=601,rwnd=0进行累计确认,表示主机B已成功接收600号以前的数据,这里再次假设调整了自己的接收窗口为0

(这是主机B对主机A的又一次流量控制,因为其又改变了自己的接收窗口)

11、主机A接收到主机B的响应后,类似第4、第8步

发送窗口向前滑动,将600号之前的数据移出发送窗口,销毁缓冲区内600号之前的数据调整发送窗口大小为0

请添加图片描述

12、此时主机A的发送窗口为0,不能再发送普通的TCP数据报,并等待主机B发送改变其接收窗口的指令

13、若主机B的接收缓存腾出了一些存储空间,将接收窗口调整为300,并通告主机Arwnd=300,但是该数据包意外丢失了

14、主机A一直等不到主机B发送的调整其接收窗口的数据包,此时如果不采取措施就会陷入死锁,也即主机A等待B,主机B等待A。TCP流量控制中采取的解决方法如下:

TCP为每一个连接设置一个持续计时器,只要TCP的一方收到对方的零窗口通知,就启动该持续计时器

15、直到持续计时器超时,主机A主动发送一个零窗口探测报文段,该报文仅有1字节;主机B接收到该探测报文后立刻告知主机A自己的发送窗口大小

如果主机B的接收窗口还是0,主机A再重新开启一个持续计时器,然后等待持续计时器超时如果主机B的接收窗口不是0,上述的死锁局面就解决了

请添加图片描述

问题1:在主机B接收窗口为0时还怎么接收主机A的0窗口探测报文段呢?不是接收窗口已经为0了吗?

答:TCP规定,就算接收窗口为0,也必须接受零窗口探测报文段、确认报文段、以及携带有紧急数据的报文段

问题2:如果零窗口探测报文段也丢失了怎么办?

答:零窗口探测报文段也有设置的有重传计时器,如果丢失,等待该计时器超时,然后重传零窗口探测报文段

总结起来就是:

发送方解析接收方的响应数据包,根据接收方的接收窗口大小调整自己的发送窗口大小;

发送方通过向前滑动发送窗口的方式移除已确认被正确接收的数据,并将他们从缓冲区删除;

发送方只发送自己发送窗口内的数据

发送窗口向前滑动的前提是发送窗口的数据确认被正确接收

这是学习湖科大计网时我做的学习笔记,老师讲的太好了,建议去看原版,B站就有!!!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3