CSDN|HTTP/3 来了 !HTTP/2 还没怎么用起来呢,先一起扫个盲吧!( 三 )
本文插图
因此 , HTTP 一般又允许每个主机建立 6 个 TCP 连接 , 这样可以更加充分地利用带宽资源 , 但每个连接中队头阻塞的问题还是存在 。
HTTP/2 的多路复用解决了上述的队头阻塞问题 。 不像 HTTP/1.1 中只有上一个请求的所有数据包被传输完毕下一个请求的数据包才可以被传输 , HTTP/2 中每个请求都被拆分成多个 Frame 通过一条 TCP 连接同时被传输 , 这样即使一个请求被阻塞 , 也不会影响其他的请求 。 如下图所示 , 不同颜色代表不同的请求 , 相同颜色的色块代表请求被切分的 Frame 。
本文插图
事情还没完 , HTTP/2 虽然可以解决“请求”这个粒度的阻塞 , 但 HTTP/2 的基础 TCP 协议本身却也存在着队头阻塞的问题 。 HTTP/2 的每个请求都会被拆分成多个 Frame , 不同请求的 Frame 组合成 Stream , Stream 是 TCP 上的逻辑传输单元 , 这样 HTTP/2 就达到了一条连接同时发送多条请求的目标 , 这就是多路复用的原理 。 我们看一个例子 , 在一条 TCP 连接上同时发送 4 个 Stream , 其中 Stream1 已正确送达 , Stream2 中的第 3 个 Frame 丢失 , TCP 处理数据时有严格的前后顺序 , 先发送的 Frame 要先被处理 , 这样就会要求发送方重新发送第 3 个 Frame , Stream3 和 Stream4 虽然已到达但却不能被处理 , 那么这时整条连接都被阻塞 。
本文插图
不仅如此 , 由于 HTTP/2 必须使用 HTTPS , 而 HTTPS 使用的 TLS 协议也存在队头阻塞问题 。 TLS 基于 Record 组织数据 , 将一堆数据放在一起(即一个 Record)加密 , 加密完后又拆分成多个 TCP 包传输 。 一般每个 Record 16K , 包含 12 个 TCP 包 , 这样如果 12 个 TCP 包中有任何一个包丢失 , 那么整个 Record 都无法解密 。
本文插图
队头阻塞会导致 HTTP/2 在更容易丢包的弱网络环境下比 HTTP/1.1 更慢!
那 QUIC 是如何解决队头阻塞问题的呢?主要有两点:
- QUIC 的传输单元是 Packet , 加密单元也是 Packet , 整个加密、传输、解密都基于 Packet , 这样就能避免 TLS 的队头阻塞问题;
- QUIC 基于 UDP , UDP 的数据包在接收端没有处理顺序 , 即使中间丢失一个包 , 也不会阻塞整条连接 , 其他的资源会被正常处理 。
本文插图
1.6 拥塞控制拥塞控制的目的是避免过多的数据一下子涌入网络 , 导致网络超出最大负荷 。 QUIC 的拥塞控制与 TCP 类似 , 并在此基础上做了改进 。 所以我们先简单介绍下 TCP 的拥塞控制 。TCP 拥塞控制由 4 个核心算法组成:慢启动、拥塞避免、快速重传和快速恢复 , 理解了这 4 个算法 , 对 TCP 的拥塞控制也就有了大概了解 。
- 慢启动:发送方向接收方发送 1 个单位的数据 , 收到对方确认后会发送 2 个单位的数据 , 然后依次是 4 个、8 个……呈指数级增长 , 这个过程就是在不断试探网络的拥塞程度 , 超出阈值则会导致网络拥塞;
- 拥塞避免:指数增长不可能是无限的 , 到达某个限制(慢启动阈值)之后 , 指数增长变为线性增长;
- 快速重传:发送方每一次发送时都会设置一个超时计时器 , 超时后即认为丢失 , 需要重发;
- 快速恢复:在上面快速重传的基础上 , 发送方重新发送数据时 , 也会启动一个超时定时器 , 如果收到确认消息则进入拥塞避免阶段 , 如果仍然超时 , 则回到慢启动阶段 。
推荐阅读
- CSDN|由 Apache 说开,中国开源项目已经走向世界!
- 智能穿戴|79元起售!小米最便宜真无线蓝牙耳机来了
- |真全面屏手机要来了!微软给出新解决方案:提高屏下前摄效果
- 寒武纪|寒武纪终于来了!大涨288%,市值破千亿
- 行业互联网|超1800家企业退圈!电子烟风口为何飞不起来了?
- pos机|POS“一机一户”真的要来了吗,该如何应对?
- 中年|80分钟顶升一层楼,中国“住宅造楼机”来了
- AMD,英特尔|又一批第十代酷睿CPU来了 这个全新i9价格有点香
- 新机发布|红米的首款“亮银”机 Redmi 10X Pro 新配色来了:明天揭晓
- 驱动中国|谁是中国口碑最好的彩电品牌?权威报告来了
