CSDN|HTTP/3 来了 !HTTP/2 还没怎么用起来呢,先一起扫个盲吧!( 五 )
1.7 流量控制TCP 会对每个 TCP 连接进行流量控制 , 流量控制的意思是让发送方不要发送太快 , 要让接收方来得及接收 , 不然会导致数据溢出而丢失 , TCP 的流量控制主要通过滑动窗口来实现的 。 可以看出 , 拥塞控制主要是控制发送方的发送策略 , 但没有考虑到接收方的接收能力 , 流量控制是对这部分能力的补齐 。QUIC 只需要建立一条连接 , 在这条连接上同时传输多条 Stream , 好比有一条道路 , 两头分别有一个仓库 , 道路中有很多车辆运送物资 。 QUIC 的流量控制有两个级别:连接级别(Connection Level)和 Stream 级别(Stream Level) , 好比既要控制这条路的总流量 , 不要一下子很多车辆涌进来 , 货物来不及处理 , 也不能一个车辆一下子运送很多货物 , 这样货物也来不及处理 。那 QUIC 是怎么实现流量控制的呢?我们先看单条 Stream 的流量控制 。 Stream 还没传输数据时 , 接收窗口(flow control receive window)就是最大接收窗口(flow control receive window) , 随着接收方接收到数据后 , 接收窗口不断缩小 。 在接收到的数据中 , 有的数据已被处理 , 而有的数据还没来得及被处理 。 如下图所示 , 蓝色块表示已处理数据 , 黄色块表示未处理数据 , 这部分数据的到来 , 使得 Stream 的接收窗口缩小 。
本文插图
随着数据不断被处理 , 接收方就有能力处理更多数据 。 当满足 (flow control receive offset - consumed bytes) < (max receive window / 2) 时 , 接收方会发送 WINDOW_UPDATE frame 告诉发送方你可以再多发送些数据过来 。 这时 flow control receive offset 就会偏移 , 接收窗口增大 , 发送方可以发送更多数据到接收方 。
本文插图
Stream 级别对防止接收端接收过多数据作用有限 , 更需要借助 Connection 级别的流量控制 。 理解了 Stream 流量那么也很好理解 Connection 流控 。 Stream 中 , 接收窗口(flow control receive window) = 最大接收窗口(max receive window) - 已接收数据(highest received byte offset), 而对 Connection 来说:接收窗口 = Stream1 接收窗口 + Stream2 接收窗口 + … + StreamN 接收窗口。
总结QUIC 丢掉了 TCP、TLS 的包袱 , 基于 UDP , 并对 TCP、TLS、HTTP/2 的经验加以借鉴、改进 , 实现了一个安全高效可靠的 HTTP 通信协议 。 凭借着 0 RTT 建立连接、平滑的连接迁移、基本消除了队头阻塞、改进的拥塞控制和流量控制等优秀的特性 , QUIC 在绝大多数场景下获得了比 HTTP/2 更好的效果 。不久前 , 微软宣布开源自己的内部 QUIC 库 -- MsQuic , 将全面推荐 QUIC 协议替换 TCP/IP 协议 。HTTP/3 未来可期 。
推荐阅读
- CSDN|由 Apache 说开,中国开源项目已经走向世界!
- 智能穿戴|79元起售!小米最便宜真无线蓝牙耳机来了
- |真全面屏手机要来了!微软给出新解决方案:提高屏下前摄效果
- 寒武纪|寒武纪终于来了!大涨288%,市值破千亿
- 行业互联网|超1800家企业退圈!电子烟风口为何飞不起来了?
- pos机|POS“一机一户”真的要来了吗,该如何应对?
- 中年|80分钟顶升一层楼,中国“住宅造楼机”来了
- AMD,英特尔|又一批第十代酷睿CPU来了 这个全新i9价格有点香
- 新机发布|红米的首款“亮银”机 Redmi 10X Pro 新配色来了:明天揭晓
- 驱动中国|谁是中国口碑最好的彩电品牌?权威报告来了
