小言_互联网的博客

详解TCP协议(四)——传输中的流量控制

459人阅读  评论(0)

一、流量控制是什么

防止发送方发送数据太多,耗尽接收方资源,从而使接收方来不及处理,造成数据溢出,造成丢包.
流量控制存在于传输层及数据链路层,针对对象为发送方与接收方

二、理解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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场