HTTP/3(QUIC) 来了,你准备好了吗?

Author Avatar
MonsterX 2018年11月15日
  • 在其它设备中阅读本文章

在 HTTP 协议已经占据互联网大半江山的今天,尽管网速越来越快,但是人类还是致力于将网络传输速率提升到极致。从 HTTP/1.x 到 HTTP/2,TCP 已经不能满足人类贪婪的欲望了,他们开始向常年被忽视的 UDP 进军。随着 QUIC 的正式发布,变革将悄然兴起。你,准备好了吗?
 

QUIC 是快速 UDP 网络连接(英语:Quick UDP Internet Connections)的缩写,这是 Google 制定的一种基于 UDP 的低时延的互联网传输层协议。QUIC 使用 UDP 协议,它在两个端点间创建连线,且支持多路复用(多路复用是指在一个信道上传输多路信号或数据流的过程和技术。它能够将多个低速信道整合到一个高速信道进行传输,从而有效地利用了高速信道)连线。在设计之初,QUIC 希望能够提供等同于 SSL/TLS 层级的网上安全保护,减少数据传输及创建连线时的延迟时间,双向控制带宽,以避免网上拥塞。Google 希望使用这个协议来取代 TCP 协议,使网页传输速度加快,计划将 QUIC 提交至互联网工程任务小组(IETF),让它成为下一代的正式网上规范。这也意味着 QUIC 开始了它的标准化过程,成为新一代传输层协议。2018 年 11 月 12 日,QUIC 被正式称为 HTTP/3,这意味着下一代 HTTP 传输协议正式诞生!
 

前言

我们知道,TCP/IP 协议族是互联网的基础。其中传输层协议包括 TCP 和 UDP 协议。与 TCP 协议相比,UDP 更为轻量,但是错误校验也要少得多。这意味着 UDP 往往效率更高(不经常跟服务器端通信查看数据包是否送达或者按序),但是可靠性比不上 TCP。通常游戏、流媒体以及 VoIP 等应用均采用 UDP,而网页、邮件、远程登录等大部分的应用均采用 TCP。
QUIC 汇集了 TCP 和 UDP 的优点,使用 UDP 来传输数据以加快网络速度,降低延迟,由 QUIC 来保证数据的顺序、完整性和正确性,即使发生了丢包,也由 QUIC 来负责数据的纠错。
QUIC 模式图
现在,Google 旗下的部分服务(比如 GMail)以及许多接口已经开始使用 QUIC 协议了。如果你使用的是 Chrome 浏览器,可以在浏览器的这个地址:chrome://net-internals/#quic 看到 QUIC 的连接情况。
 

QUIC 的优点

  • QUIC 更新迭代更方便:QUIC 基于 UDP,运行在用户域而不是系统内核,使得 QUIC 协议可以快速的更新和部署,从而很好地解决了 TCP 协议部署及更新的困难。
  • 传输数据效率更高 :UDP 本身是无序传输的,这在单个连接上并行传输多个数据有天生的优势:多个数据直接发送即可,由 QUIC 对收到的数据进行重新组合排序,然后送往上层应用。这中间不用等待各种数据确认包,效率非常高。
  • 连接延迟更低 :在建立 TCP 连接时,需要进行至少三次握手,如果要开启 TLS 加密,则还需要进行 TLS 握手。而 QUIC 协议下当客户端第一次连接服务器时,它只需要 1RTT(Round-Trip Time)的延迟就可以建立可靠安全的连接, 相对于 TCP+TLS 的 1 - 3 次 RTT 要更加快捷。之后客户端可以在本地缓存加密的认证信息,在再次与服务器建立连接时可以实现 0 -RTT 的连接建立延迟。QUIC 同时复用了 HTTP/ 2 协议的多路复用功能(Multiplexing),但由于 QUIC 基于 UDP,所以避免了 HTTP/ 2 的线头阻塞(Head-of-Line Blocking)问题。
  • 传输数据能力更佳 :在发生丢包时,TCP 会重传丢失的包。而 QUIC,则使用了一种非常神奇的前向纠错算法,通过连续的几个数据包的校验和,可以直接恢复出丢失的包内容,而不需要重传。
  • 在移动端表现更好 :用户的网络环境并不稳定,Wi-Fi、4G、3G、2G 之间来回变化,IP 一旦发生变化,TCP 的连接是不可能保持的。而 QUIC 就不存在这样的问题,通过 ID 来标识用户(而不是 IP + 端口),在连接切换后直接恢复之前的连接会话。
  • 配合 HTTP/2 API 食用效果更佳 :由于 HTTP/2 采用二进制帧传输机制,QUIC 直接使用这样的机制进行数据传输,效率更高。
     

QUIC 的缺点

现在很多网络运营商会降低 UDP 包的优先级,使得 UDP 丢包率特别高。(QUIC 不可用时,浏览器一般会 Fallback 到 TCP)目前只有 Chrome、Opera 浏览器支持 QUIC 协议。
 

QUIC 的应用场景

移动端 由于 QUIC 并不使用 IP + 端口来标识客户身份,而是使用 ID,这使得在网络环境切换后还可以保持连接,非常适合用在移动网站上面,在手机信号不稳定的情况下,TCP + TLS 的开销是非常大的!QUIC 的 0-RTT 可以极大限度地提升访问速度。
 

最后

QUIC 实现的目标,就是利用 UDP 实现一个 TCP,支持 TCP 的所有特性,并且比 TCP 更快更好用。QUIC 是从 2012 年开始的项目,到目前也还才刚刚发布,对它的应用还处于探索阶段。同样发布不久的 TLSv1.3 也拥有了 QUIC 中的很多优点(比如 0-RTT)。对于访问速度的优化方式越来越多,适当的选择可以为网站增色许多。更多资料可以参考:

QUIC, a multiplexed stream transport over UDP - The Chromium Projects
QUIC at 10,000 feet - Google Docs
下一代通信协议:QUIC - 掘金•创宇前端
科普:QUIC 协议原理分析 - 知乎•腾讯技术工程

 

本文链接:https://monsterx.cn/tech/quic.html
本站文章除特殊说明外全部由 MonsterX 原创发布,未经允许禁止以任何形式转载。
如果您发现以上内容含有任何引起不适/侵犯权利/违反法律的内容,请立即 联系站长 进行处理。