一文搞懂:QUIC 如何实现可靠传输 又如何干掉 TCP 的四大痛点
先一句话定位 QUIC
QUIC = 基于 UDP 做的、可靠 + 安全 + 低延迟 的新一代传输协议。
HTTP/3 底层就是 QUIC。
它本质就是:
把 TCP 的可靠性 + TLS 的安全性 + 自己的多路复用,全部在用户态用 UDP 重写了一遍。
一、QUIC 如何实现「可靠传输」?
和你刚才看的可靠UDP实现思路一模一样,QUIC 就是工业级最强版本:
1. 基于 UDP,但自己实现可靠
- UDP 只负责:发数据包、不管丢没丢
- QUIC 负责:可靠、有序、加密、连接、多路复用
2. QUIC 可靠核心机制(对标 TCP)
-
帧(Frame)+ 报文(Packet)
- 数据切成 Frame,装进 Packet
- 每个 Packet 有唯一编号(Packet Number)
-
序列号 + 确认应答
- 用 Packet Number 保证顺序
- 接收方回复 ACK,告诉发送方“收到哪些包”
-
ACK 不只是单个,是批量确认
- 一次 ACK 可以确认连续一段 + 多个离散包
- 大大减少 ACK 包数量
-
超时重传 + 自适应 RTO
- 没收到 ACK → 重传
- 实时测量 RTT,自动算超时时间
-
乱序处理
- 收到乱序包先缓存
- 不因为一个包丢了就阻塞后面数据(这是吊打TCP的关键)
-
流量控制 & 拥塞控制
- 流控:告诉对方我缓冲区多大,别发太快
- 拥塞控制:和 TCP 类似,但更灵活、用户态可升级
总结:
QUIC 把 TCP 所有可靠功能,在 UDP 之上重新实现了一遍,而且做得更好。
二、TCP 四大经典缺陷
(面试必考,你前面学 TCP 一定遇到过)
- 队头阻塞(Head-of-line Blocking)
- 握手延迟高(1.5 RTT 建连 + TLS 再 1~2 RTT)
- 连接迁移困难(IP/端口变了就断连)
- 协议僵化(内核协议栈,难更新、难优化)
下面看 QUIC 如何一个个打爆它们。
三、QUIC 如何解决 TCP 四大缺陷?
1. 解决:队头阻塞(最核心优势)
TCP 问题
一个包丢了 → 整个连接所有流都卡住等重传
HTTP/2 多流复用也没用,因为底层还是同一个 TCP 连接。
QUIC 解法
- 真正的多路复用:多 Stream 共享一个 QUIC 连接
- 每个 Stream 独立可靠,互不影响
- 一个 Stream 丢包 → 只阻塞自己,不影响别的 Stream
结论:
QUIC 彻底干掉队头阻塞。
2. 解决:握手慢、建连成本高
TCP 问题
- TCP 三次握手:1 RTT
- TLS 握手:1~2 RTT
合计:2~3 RTT 才能发数据
QUIC 解法
- QUIC 内置 TLS 1.3
- 安全 + 传输 一次性完成
- 首次连接:1 RTT
- 复用连接:0 RTT(直接发数据)
结论:
QUIC 打开网页、APP 请求速度明显更快。
3. 解决:连接迁移(切换网络就断连)
TCP 问题
TCP 连接 =
四元组(源IP + 源Port + 目标IP + 目标Port)
手机 4G 切 WiFi → IP 变 → 连接断 → 重连
QUIC 解法
- 使用 Connection ID(连接ID) 标识连接
- 不管你 IP、端口怎么变
- 只要 Connection ID 对,连接就不断
手机切换网络、切换基站,都不会断流。
4. 解决:TCP 协议僵化、难升级
TCP 问题
- 在内核里
- 改个拥塞控制 = 升级内核 = 不可能
- 导致 TCP 几十年进步很慢
QUIC 解法
- 在用户态实现
- APP 升级 = QUIC 协议自动升级
- 想改拥塞控制、重传策略、ACK 策略,随便改
QUIC 迭代速度比 TCP 快 10 倍。
四、极简总结(面试背这个)
-
QUIC 基于 UDP,自己实现全套可靠传输
序列号、ACK、重传、流控、拥塞控制全都有。 -
QUIC 解决 TCP 四大死穴:
- 队头阻塞 → 多路复用、流隔离
- 握手慢 → 1-RTT / 0-RTT 建连
- 网络切换断连 → Connection ID 连接迁移
- 协议僵化 → 用户态实现,可快速升级
-
一句话:
QUIC 是 TCP 的可靠性 + TLS 的安全性 + UDP 的速度 + 可升级架构 的终极合体。
百流积聚,江河是也;文若化风,可以砾石。

浙公网安备 33010602011771号