HTTP 3
HTTP/2 只解决了应用层的队头堵塞问题,但 TCP 协议仍然会有因为包丢失而造成的堵塞。随着丢包率的增加,HTTP/2 的传输效率也会越来越差。有测试数据表明,当系统达到了 2% 的丢包率时,HTTP/1.1 的传输效率反而比 HTTP/2 表现得更好。
为什么不升级 TCP
- 中间设备的僵化
中间设备有很多种类型,并且每种设备都有自己的目的,这些设备包括了路由器、防火墙、NAT、交换机等。它们通常依赖一些很少升级的软件,这些软件使用了大量的 TCP 特性,这些功能被设置之后就很少更新了。
- 操作系统
TCP 协议都是通过操作系统内核来实现的,应用程序只能使用不能修改。通常操作系统的更新都滞后于软件的更新,因此要想自由地更新内核中的 TCP 协议也是非常困难的。

所以 Chrome 决定革自己的命,使用 UDP 协议。 UDP 是⼀个简单、不可靠的传输协议,但是正是因为它简单,不需要建连和断连,通信成本低,也就非常灵活、⾼效,“可塑性”很强。 所以,QUIC 就选定了 UDP ,在它之上把 TCP 的那⼀套连接管理、拥塞窗⼝、流量控制等“搬”了过来,“去其糟粕,取其精华”,打造出了⼀个全新的可靠传输协议,可以认为是“新时代的 TCP”。
- 实现了类似 TCP 的流量控制、传输可靠性的功能。虽然 UDP 不提供可靠性的传输,但 QUIC 在 UDP 的基础之上增加了一层来保证数据可靠性传输。它提供了数据包重传、拥塞控制以及其他一些 TCP 中存在的特性。
- 集成了 TLS 加密功能。目前 QUIC 使用的是 TLS1.3,相较于早期版本 TLS1.3 有更多的优点,其中最重要的一点是减少了握手所花费的 RTT 个数。
- 实现了 HTTP/2 中的多路复用功能。和 TCP 不同,QUIC 实现了在同一物理连接上可以有多个独立的逻辑数据流
- 实现了快速握手功能。 由于 QUIC 是基于 UDP 的,所以 QUIC 可以实现使用 0-RTT 或者 1-RTT 来建立连接