机场CN机场CN
首页 >文章 >tech

TCP与UDP在现代拥塞控制下的差异:为什么QUIC与HTTP/3成为下一代网络核心?

Jichang Tech
更新于 2026-07-25

引言:互联网传输协议的瓶颈

在过去三十多年里,TCP(传输控制协议)一直是互联网数据传输的基石。从网页浏览到文件下载,TCP凭借其可靠性、有序性以及拥塞控制机制,支撑了现代网络的繁荣。

然而,随着移动互联网的爆发和网页资源体积的指数级增长,TCP 的底层设计缺陷逐渐暴露,特别是在高延迟、易丢包的复杂网络环境下。

TCP 的核心痛点:队头阻塞 (Head-of-Line Blocking)

TCP 是一个面向连接的字节流协议,它必须保证数据包按照顺序到达。这就导致了一个致命问题:队头阻塞

假设服务器向客户端发送了三个数据包:A、B、C。如果在传输过程中,数据包 A 丢失了,即使 B 和 C 已经安全到达客户端操作系统的缓冲区,TCP 协议栈也绝对不会把 B 和 C 交给应用层(比如浏览器)。它必须等待发送端超时重传数据包 A,直到 A 到达后,才会把 A、B、C 一起交给应用层。

这种机制在现代多路复用(如 HTTP/2)场景下简直是灾难。HTTP/2 允许在同一个 TCP 连接上并发请求多个文件(HTML、CSS、JS、图片),但如果其中哪怕一个无关紧要的图片数据包丢失,整个 TCP 连接就会被挂起,导致 HTML 和 CSS 也无法被浏览器处理,页面直接白屏。

QUIC 的诞生:基于 UDP 的革命

为了解决这个问题,Google 牵头研发了 QUIC 协议(Quick UDP Internet Connections),并在后来被 IETF 标准化为 HTTP/3 的底层传输协议。

QUIC 做出了一个大胆的决定:彻底抛弃 TCP,在 UDP 之上重新构建可靠传输。

1. 为什么选择 UDP?

UDP(用户数据报协议)非常轻量,它不管顺序,也不管丢包,只负责把数据“甩”出去。过去人们认为 UDP 不安全、不可靠,只适合直播或 DNS 查询。 但正是这种“无脑”,给了 QUIC 极大的灵活性。QUIC 在应用层(也就是 UDP 报文的数据载荷里)自己实现了重传、拥塞控制和加密机制,完美绕过了操作系统内核里僵化的 TCP 协议栈。

2. 彻底解决队头阻塞

QUIC 引入了“独立数据流 (Streams)”的概念。在一个 QUIC 连接(底层是一个 UDP 连接)中,可以同时跑多个 Stream(比如 Stream 1 传图片,Stream 2 传 JS)。 如果 Stream 1 的某个数据包丢了,QUIC 只会暂停 Stream 1,等待重传。而 Stream 2 的数据包不受任何影响,会立刻被交给应用层。这就从根本上解决了队头阻塞问题。

3. 0-RTT 极速建连

TCP 建立连接需要 3 次握手(消耗 1-RTT),如果要建立安全的 TLS 连接,还需要额外的 1 到 2 个 RTT。在跨国访问时,这几个 RTT 可能会浪费数百毫秒的时间。 QUIC 原生集成了 TLS 1.3,首次连接只需 1-RTT,而对于曾经连接过的服务器,QUIC 可以实现 0-RTT 建连,也就是在发送握手请求的同时,直接把应用数据捎带过去,极大地降低了首屏加载延迟。

4. 连接迁移 (Connection Migration)

在使用 TCP 时,你的网络由 IP 地址和端口号共同定义(四元组)。如果你从 Wi-Fi 切换到 5G,你的 IP 地址变了,TCP 连接就断了,必须重新握手建立新连接。 QUIC 引入了 Connection ID 的概念。无论你的 IP 怎么变,只要 Connection ID 匹配,服务器就认得你。这意味着你在玩游戏或看视频时,从 Wi-Fi 切到数据网络,连接可以做到无缝迁移,完全不会卡顿。

结语:HTTP/3 时代的到来

如今,包括 Google、Facebook、Cloudflare 在内的科技巨头早已全面普及 QUIC 与 HTTP/3。主流浏览器也默认开启了 HTTP/3 支持。

从 TCP 到 QUIC,不仅是底层协议的更替,更是互联网对极致性能追求的缩影。理解这些底层技术的演进,有助于我们更好地架构下一代高性能网络应用。