QUIC网络通信协议

QUIC(Quick UDP Internet Connections)是 Google 开发的一种基于 UDP 的低延迟传输协议,后来被 IETF 标准化为 HTTP/3 的底层传输协议。下面是 QUIC 的通信原理分析:


1. QUIC 主要特点

✅ 基于 UDP

  • 传统 TCP 需要三次握手建立连接,而 QUIC 直接使用 UDP 进行数据传输,减少了握手延迟。

✅ 0-RTT 连接建立

  • QUIC 支持 0-RTT(Zero Round Trip Time),允许客户端在之前连接的基础上立即发送数据,提高了首包到达的速度。

✅ 多路复用(Multiplexing)

  • TCP + HTTP/2 在同一个 TCP 连接上可以并行请求多个 HTTP 资源,但如果 TCP 发生丢包,整个连接都会受影响(队头阻塞)。
  • QUIC 通过在 UDP 层之上实现自己的可靠传输协议,每个 HTTP 请求有自己的流 ID,即使某个流丢包也不会影响其他流的数据传输。

✅ 内置加密(TLS 1.3)

  • QUIC 协议的握手过程中,TLS 1.3 加密是默认开启的,比 TLS over TCP 更安全,且减少了额外的握手开销。

2. QUIC 通信流程

2.1 连接建立

QUIC 连接建立时,客户端会发送 Initial Packet,其中包含:

  • 客户端的 初始加密密钥
  • TLS 1.3 ClientHello
  • 请求的 QUIC 版本信息

服务器响应 Initial Packet 并完成 TLS 握手,同时确认 QUIC 连接:

  1. 首次连接(Cold Start,1-RTT)

    • 客户端发送 Initial 包(包括 ClientHello)
    • 服务器返回 InitialHandshake 包(包括 ServerHello)
    • 客户端完成密钥协商并发送 Finished,连接建立
    • 共 1-RTT(一次往返时间)完成握手
  2. 已有会话(Session Resume,0-RTT)

    • 客户端使用之前的加密参数,直接发送数据
    • 服务器确认后,数据直接传输
    • 可以实现 0-RTT 建立连接

2.2 数据传输

  • QUIC 通过 流(Stream)ID 实现多路复用,每个流都有独立的可靠性保证:

    • 流量控制:类似 TCP 的 window_size
    • 拥塞控制:基于 BBR 或 Cubic 控制流量
    • 丢包重传:基于 QUIC 级别的 ACK 机制
  • 与 TCP 不同

    • TCP:丢一个包后,所有流都会被阻塞(队头阻塞)
    • QUIC:丢一个包只影响该流,其他流继续传输

2.3 连接保持 & 迁移

  • QUIC 通过 Connection ID(连接 ID) 维护会话,不依赖 IP + 端口
  • 无缝切换网络
    • 移动设备从 Wi-Fi 切换到 4G/5G,TCP 连接会断开,而 QUIC 连接不会丢失
    • 服务器只需要在新的 IP 发送 相同的 Connection ID 即可恢复传输

3. QUIC vs TCP+TLS

特性QUIC (UDP)TCP+TLS (HTTP/2)
连接建立时间0-RTT 或 1-RTT1-RTT 或 2-RTT
多路复用✅ 无队头阻塞❌ 受 TCP 队头阻塞影响
拥塞控制✅ 自带✅ TCP 拥塞控制
加密默认 TLS 1.3需要额外 TLS 处理
连接迁移✅ Connection ID 支持❌ 依赖 IP 可能断开

4. 适用场景

  • HTTP/3(浏览器):Chrome、Firefox、Edge 现代浏览器都支持 QUIC
  • 移动端网络优化:减少 Wi-Fi ↔ 4G 切换导致的重连问题
  • 视频流、游戏、CDN:如 YouTube、Google Drive、Cloudflare

5. 总结

  • QUIC 减少握手延迟(0-RTT)
  • 解决 TCP 队头阻塞,提高 HTTP/3 传输效率
  • 更安全(默认 TLS 1.3),不易被中间人攻击
  • 连接迁移能力 强,适合移动设备

QUIC 未来可能逐步取代 TCP + TLS,成为互联网新一代主流传输协议。

下面是 QUIC 连接建立和数据传输的时序图,使用 Mermaid 语法表示:

Client Server Initial Packet (ClientHello, QUIC Version) Initial Packet (ServerHello, TLS Handshake) Handshake Packet (TLS Finished) Handshake Completed (TLS Finished) 连接建立 (1-RTT) Initial Packet (ClientHello, 0-RTT Data) 0-RTT Accepted, ServerHello 连接建立 (0-RTT) Stream 1 - Request Data Stream 1 - Response Data Stream 2 - Request Data Stream 2 - Response Data Packet Lost (Detected via ACK) Retransmit Packet Path Challenge (Switch Network) Path Response (Confirm New Path) 连接迁移完成 CONNECTION_CLOSE CONNECTION_CLOSE (ACK) QUIC 连接关闭 Client Server

说明:

  1. 初次连接 需要完整的 TLS 1.3 握手(1-RTT)。
  2. 会话恢复(Session Resume) 时可使用 0-RTT 发送数据。
  3. 数据传输 采用流(Stream)ID 进行多路复用,避免 TCP 队头阻塞问题。
  4. 丢包重传 依赖 QUIC 级别的 ACK 反馈,而非 TCP 的滑动窗口机制。
  5. 连接迁移 通过 Connection ID 允许客户端更换网络而不断开连接。
  6. 连接关闭 通过 CONNECTION_CLOSE 消息通知对方终止会话。

这个时序图展示了 QUIC 主要的通信过程,适用于 HTTP/3 及其他基于 QUIC 的协议应用。🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JT-Blink

因热爱创作,打赏促优质创作。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值