TCP(四) -- 流量控制

一:摘要概述

TCP作为一个可靠的传输层协议,其精髓就是一系列如滑动窗口、拥塞避免等手段控制流量。可以根据服务器处理速度以及网络情况调整数据传输速率,当然整个过程对于开发人员来讲是透明的。本文将从滑动窗口、拥塞控制两个方面详解TCP对流量控制做的操作
在这里插入图片描述

二:接收窗口

服务器处理数据的能力有限,不可能无限制的接收数据。在三次握手的过程中有一个字属性专门用于标记接收窗口大小,三次握手过程告诉对方接收窗口只有这么大,传输未确认的数据只能这么多,超过就等等再操作

看下面截图就是三次握手的SYN包示例图,可以看到其中红框部分就表示了接收窗口的大小。红框中有三部分值,具体含义如下:

  • Window size:接收窗口大小,只有16字节大小不够表示窗口数值,引入缩放比例
  • Calculated window:缩放计算后的接收窗口大小
  • Window scale:缩放比例
Calculated window = Window size * Window scale

至于为什么我这里的Wireshark抓包出来显示的数值不对,这个还需要研究。应该是可以调试的,但是目前截图的显示确实都是已经计算好之后的数值
在这里插入图片描述

三:滑动窗口

有了接收窗口的限制以后自然数据传输就不会超过该数值,那么滑动窗口的概念又是什么情况呢?就好像游标一样滑动,其组成如下图所示:
在这里插入图片描述
滑动窗口由四部分组成每个字节的数据都有唯一顺序的编码,随着时间发展,未确认部分与可以发送数据包编码部分向右移动,形式滑动窗口

  1. 绿色:发送成功并已经ACK确认的数据
  2. 黄色:发送成功等待ACK确认的数据(占用滑动窗口大小)
  3. 紫色:滑动窗口剩余大小可以发送的字节数量(滑动窗口可用大小)
  4. 灰色:后续数据编码

接收窗口的大小就是滑动窗口的最大值,数据传输过程中滑动窗口的可用大小是动态变化的。但是还有这么一点,滑动窗口的设计仅仅是考虑到了处理方的处理能力,但是没有考虑到道路的通畅问题呀!!!就好像服务端可以处理100M数据,但是传输的数据99M都堵在路上了,这不就是导致道路阻塞了么?后面就会继续讲解流量控制的另外一个设计拥塞避免

四:慢启动

慢启动的含义就是疯狂试探,大概的过程如下图所示:传输层将数据报文切割为符合传输要求的N段数据后会先传输10段大小的数据,当正常ACK之后会传输20段大小数据,继续正常ACK则会继续翻倍。每次传输都可以理解为网络传输状态检测,检测到传输网络通信正常就会翻倍自己的传输数量,这个限制称之为拥塞窗口
在这里插入图片描述

五:慢启动阈值

慢启动无限制指数级别增长?想想一张纸折叠珠穆朗玛峰的高度,指数爆炸是十分恐怖的操作。所以为了避免无限制的慢启动指数增长,拥塞窗口还有一个限制就是慢启动阈值,当拥塞窗口大小达到慢启动阈值的时候就会将其指数增长的策略修改为线性增长:RTT的含义就是一次请求到响应的完整过程,其中可能包括多次的数据包传输与确认

  • 慢启动:拥塞窗口小于慢启动阈值,指数增长,每次RTT后都翻倍
  • 拥塞避免:拥塞窗口大于慢启动阈值,线性增长,每次RTT后加1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP拥塞控制和流量控制是网络中两个不同的概念。 TCP拥塞控制是为了防止过多的数据注入到网络中,以避免网络负载过大的情况。它是一个全局性的过程,涉及到网络中的所有主机、路由器和与网络传输性能有关的因素。常用的拥塞控制方法包括慢开始、拥塞避免、快重传和快恢复。慢开始算法在TCP连接建立时和网络出现超时时使用\[1\]。 而流量控制是作用于接收者的,它的目的是控制发送者的发送速度,使接收者能够及时接收数据,防止数据丢失。流量控制只发生在发送端和接收端之间的点对点通信中。它主要通过接收端发送的窗口大小来控制发送端的发送速度\[2\]。 总结起来,拥塞控制是为了防止网络过载,而流量控制是为了控制发送速度,使接收端能够及时接收数据。 #### 引用[.reference_title] - *1* *3* [TCP流量控制和拥塞控制](https://blog.csdn.net/ZeroWdd/article/details/108198708)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [TCP流量控制、拥塞控制](https://blog.csdn.net/gengzhikui1992/article/details/89141184)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值