快速 UDP 互联网连接(Quick Udp Internet Connection)
?
无队头阻塞
-
QUIC 具有类似 HTTP/2
Stream
与多路复用的概念。- QUIC 可以在同一条连接上并发传输多个 Stream。
- Stream 可以理解为一条 HTTP 请求。
-
QUIC 具有保证传输可靠性的机制,避免队头阻塞。
- HTTP/2:只要发生丢包,所有 Stream 都会阻塞。
- QUIC :Stream 之间互相独立,发生丢包时只阻塞丢包的 Stream,不影响其它 Stream(避免了队头阻塞问题)。
更快的连接建立
-
HTTP/1.x 和 HTTP/2:
- TCP 和 TLS 是分层的,分别属于内核实现的传输层、openssl 库实现的表示层。
- 需要分批次握手(先 TCP 握手,再 TLS 握手),耗时多个 RTT。
-
HTTP/3:
-
QUIC 内部包含 TLS(1.3),它在自己的帧会携带 TLS 里的“记录”。
-
在传输数据前进行 QUIC 协议握手,只需 1RTT 即可完成建立连接与密钥协商。
-
首次连接 & 恢复连接
-
首次连接(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 处理,甚至可能会被直接丢包。