一、流量控制是什么
防止发送方发送数据太多,耗尽接收方资源,从而使接收方来不及处理,造成数据溢出,造成丢包.
流量控制存在于传输层及数据链路层,针对对象为发送方与接收方
二、理解TCP流量控制基础
基于滑动窗口协议实现流量控制
2.1发送缓存与接收缓存
TCP建立连接时,会创建一个发送缓存。在TCP中发送缓存及接收缓存是相对的,即,建立连接时建立的缓存只有一个,即是发送缓存也是接收缓存
2.2TCP报文结构中接收窗口字段
端到端通过TCP报文段进行通信,报文段中接收窗口大小,其值就是缓存还剩多少,通过报文发送给发送方,发送方根据接收到的报文中接收窗口字段,调整发送数据的数量,起到流量控制作用
2.3滑动窗口基础滑动窗口
滑动窗口组成——发送窗口与接收窗口
窗口与应用程序之间关系如下
结合上述缓存一起看
我觉得可以这样理解,一个缓存有两个窗口,一个发送窗口,一个接收窗口,发送窗口可以叫发送缓存,接收窗口可以叫接收缓存
应用层应用程序从接收窗口获得数据,将数据从发送窗口发送出去,本端应用程序内存确定接收窗口大小,本端接收窗口大小确定发送窗口大小
三、综合应用层、套接字及滑动窗口协议的具体步骤
在应用层,主机A的一个进程要与主机B的一个进程通信时,主机A的进程会调用套接字API,套接字API主要分为两种,一个是TCP类型的,一个是UDP类型,可靠传输是靠TCP类型的,所以主机A选择它。
TCP类型套接字API通过三次握手建立主机A和主机B的进程连接,这时在双方各建立一个缓存区用于发送接收数据。
主机A的应用进程会将发送数据放入缓存中,在三次连接中通过主机B发送的确认报文段中的接收窗口大小字段,知道主机B缓存还有多大,调整发送窗口大小,按照字节序列发送数据(滑动窗口)。
现在假如下图是主机A应用进程的发送窗口
当主机A接收窗口收到ACK=36时,便会滑动发送窗口,所以发送端窗口的第一个字节序号一定是ACK中期望收到的确认序号(报文段中字段)
主机B的接收窗口收到的是36则接收窗口向右滑动,等待应用程序取走。
如果收到的不是36,而序号范围在接收窗口范围则暂且保留,超过一定时间丢弃。
如果收到的在接收窗口右侧则直接丢弃。
随着主机B的应用程序内存中数据越来越多,则接收窗口会越来越小,发送给主机A的报文段接收窗口字段值会越来越小,主机A便会调整发送窗口大小,从而起到流量控制的作用
四、总结滑动窗口在TCP中干的事儿
1.提高传输速率(相对于停等协议)
滑动窗口改善了停等协议中,发送方发一个报文段,等待接收方确认,再发下一个报文,信道利用率低的情况。
2.提供可靠传输
确认重传机制,上一篇博客叙述了
3.提供流量控制
主要通过接收窗口大小改变发送窗口大小
整理了一天多,如果觉得有帮助,帮博客点个赞👍吧,哈哈
转载:https://blog.csdn.net/shang_0122/article/details/104517762