QUIC 是 Quick UDP Internet Connection 的简称。 是 Google 制定的一种基于 UDP 的低时延的互联网传输层协议。是一个实验性传输层协议,目标是优化或替换面向连接中使用 TCP 协议的 Web 应用程序。

QUIC 在两个 UDP 端点之间支持一组多路连接,这样的设计目的是为了给 TLS/SSL提供安全保护,减少连接,传输延迟和带宽,从而避免在各个方向的拥挤。主要优化对象是使用 TCP 连接的 Web 应用程序。

为什么能够在两者基础上进行优化?

因为光速不变,而且抛开网络繁忙这些额外整体因素。那么在网络上,任意确定两端之间往返时延 RTTs(round trip times)基本上是固定的。因此,减少单个链接网络延迟的唯一办法就是让建立一条连接所需耗费的 RTTs 个数尽量的少。从这个需求可以看出,对于 TCP 协议本身而言,已经很难做到对应的优化了。 - 因为 TCP 所要求的握手协议,拥塞控制等固定了所必须的 RTTs 个数。 - 因为 TCP 实现于操作系统协议栈内,要改变实际用户的操作系统是相当难的。

优化原理

基于一条 TCP 连接的 SPDY 复用连接会面临这样的情况:当有丢包发生时,所有连接都将阻塞,这是由 TCP 的拥塞控制特性决定的。丢包必须恢复。而恢复过程中,或早或晚,滑动窗口总有停等的时刻,耗费一个 RTT。在广域网上,一个 RTT 相当于50-100ms。

QUIC 是和 HTTP 同一层的应用层协议,核心是将丢包控制工作转移到应用层。由于 UDIC 基于 UDP,可以不理会丢包,快速投递,再用丢包恢复方法保证可靠性。

优点
  • 拥有 SPDY 的所有优点(多路传输,支持优先级等)
  • 零往返时间连接
  • 数据包同步,有效降低数据丢包率
  • 转发问题连接,有效减少重发延迟
  • 自适应拥塞控制(对 TCP 友好),有效减少移动客户端重新连接的次数
  • 与 TLS 等效的加密措施
  • 前向纠错(每个数据包除了它本身的内容之外,还包括了部分其他数据包的数据,因此少量的丢包可以通过其他包的冗余数据直接组装而无需重传。类似网络层的 RAID 5。)
  • 切换网络无需重新连接(使用了 UDP 协议,同时实现了自己的回话标记方式,当设备网络切换时,连接不会发生变化。因此无需重连)。

参考:

  1. Google QUIC协议:从TCP到UDP的Web平台
  2. 揭秘!扒一扒能加速互联网的QUIC协议
  3. 如何看待谷歌 Google 打算用 QUIC 协议替代 TCP/UDP?