网络3️⃣QUIC

发布时间 2023-07-09 20:12:03作者: Jaywee

快速 UDP 互联网连接(Quick Udp Internet Connection)

?

无队头阻塞

  • QUIC 具有类似 HTTP/2 Stream多路复用的概念。

    • QUIC 可以在同一条连接上并发传输多个 Stream。
    • Stream 可以理解为一条 HTTP 请求。
  • QUIC 具有保证传输可靠性的机制,避免队头阻塞。

    • HTTP/2:只要发生丢包,所有 Stream 都会阻塞。
    • QUICStream 之间互相独立,发生丢包时只阻塞丢包的 Stream,不影响其它 Stream(避免了队头阻塞问题)。

更快的连接建立

  • HTTP/1.x 和 HTTP/2

    • TCP 和 TLS 是分层的,分别属于内核实现的传输层、openssl 库实现的表示层。
    • 需要分批次握手(先 TCP 握手,再 TLS 握手),耗时多个 RTT。
  • HTTP/3

    • QUIC 内部包含 TLS(1.3),它在自己的帧会携带 TLS 里的“记录”。

    • 在传输数据前进行 QUIC 协议握手,只需 1RTT 即可完成建立连接与密钥协商

      TCP HTTPS(TLS/1.3) 和 QUIC HTTPS

首次连接 & 恢复连接

  • 首次连接(1RTT):QUIC 握手信息(连接信息 + TLS 信息)

  • 恢复会话(0RTT):应用数据包可以和 QUIC 握手信息(连接信息 + TLS 信息)一起发送。

连接迁移

  • HTTP 1.x 和 HTTP 2
    • 基于 TCP,通过四元组(源 IP、源端口、目的 IP、目的端口)确定一条 TCP 连接。
    • 如果 IP 地址变化就需要重新连接(e.g. 从 WiFi 切换到移动数据),TCP 三握+TLS 四握会给用户带来体验上的卡顿。
  • HTTP 3
    • 基于 QUIC,通过连接 ID 来标记通信的两个端点。
    • 即使 IP 地址变化,只要仍保存上下文信息(连接 ID、TLS 密钥等),就可以复用连接。

总结:QUIC 是一个基于 UDP 的,伪 TCP + TLS + HTTP/2多路复用的协议。

现状:QUIC 是新协议,很多网络设备不兼容,会当作 UDP 处理,甚至可能会被直接丢包。