引言
本文主要分为以下几个方面循序渐进走进 HTTP/3:
- HTTP/2 和 TCP 的致命缺陷
- QUIC 协议为什么选择 UDP
- QUIC 和 HTTP/3 新特性
- QUIC 和 HTTP/3 前景发展展望
HTTP/2 和 TCP 的缺陷
HTTP/2 使用二进制传输、Header 压缩(HPACK)、多路复用等,相较于 HTTP/1.1 大幅提高了数据传输效率,但它仍然存在着以下几个致命问题(主要由底层支撑的 TCP 协议造成):
- 建立连接时间长
- 队头阻塞问题相较于 HTTP/1.1 更严重
1. 建立连接时间长
RTT 往返时间
如何定义建立连接时间喃?这里引入一个概念:RTT(Round-Trip Time),往返时间,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认,不包含数据传输时间)总共经历的时间,即通信一来一回的时间
TCP 建立连接时间
TCP 通过三次挥手建立了 TCP 虚拟通道,它总共需要花费:
- 一去 (SYN):客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号。请求发送后,客户端便进入 SYN-SENT 状态
- 二回 (SYN+ACK):服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后便进入 SYN-RECEIVED 状态
- 三去 (ACK):当客户端收到连接同意的应答后,还要向服务端发送一个确认报文。客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功
相当于一个半来回,故 TCP 建立连接时间 = 1.5 RTT
HTTP 交易时间
客户端在请求数据的时候,首先花费 1.5 RTT 建立 TCP 连接,然后 TCP 才开始传输 HTTP 请求,浏览器收到服务器的响应,又要等待的时间为:
- 一去(HTTP Request)
- 二回 (HTTP Responses)
故 HTTP 交易时间 = 1 RTT
由于 TCP 在第三次握手的时候,不需要等待服务器端的响应,所以节省 0.5 RTT,那么基于 TCP 传输的 HTTP 通信,一共花费的时间总和:
HTTP 通信时间总和 = TCP 建立连