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

一、流量控制是什么

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

二、理解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.提供流量控制
主要通过接收窗口大小改变发送窗口大小

整理了一天多,如果觉得有帮助,帮博客点个赞👍吧,哈哈

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿成长轨迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值