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则会继续翻倍。每次传输都可以理解为网络传输状态检测,检测到传输网络通信正常就会翻倍自己的传输数量,这个限制称之为拥塞窗口

扫描二维码关注公众号,回复: 8284053 查看本文章

在这里插入图片描述

五:慢启动阈值

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

  • 慢启动:拥塞窗口小于慢启动阈值,指数增长,每次RTT后都翻倍
  • 拥塞避免:拥塞窗口大于慢启动阈值,线性增长,每次RTT后加1

猜你喜欢

转载自juejin.im/post/5e001439518825127e6fa0a6
今日推荐