一、TCP的问题
学习计算机网络的时候,我们都知道TCP是可靠的,而UDP是不可靠的,主要原因是UDP比较简单,没有TCP那套复杂的可靠性的传输控制机制。所以无论是HTTP/1.1还是HTTPS、HTTP/2,处于可靠性的考虑,都采用TCP进行传输,其中HTTPS和HTTP/2还需要依赖TLS协议来进行安全传输。
但同时TCP也存在一些问题,比较明显的就是队头阻塞。主要原因是 TCP 协议的可靠性机制导致的。TCP使用序列号来标识数据的顺序,必须按照顺序处理,如果前面的数据丢失,后面的数据就算到达了也不会通知应用层来处理,就会造成一定的性能问题。
二、QUIC协议
HTTP/3引入了QUIC协议,⼤家都知道UDP是不可靠传输的,但基于UDP的QUIC协议 可以实现类似 TCP 的可靠性传输。因为UDP本身没有连接的概念,所以不需要三次握手,优化了连接建立的握手延迟,同时在应用程序层面实现了TCP的可靠性。而且UDP 的传输是不管顺序,也不管丢包的,所以不会出现HTTP/1.1的队头阻塞和HTTP/2的丢包导致全部重传问题。
QUIC相比以往的TCP传输,减少了三次握手和TLS握手时间,改进了拥塞控制,避免了队头阻塞的多路复用,可以迁移连接以及前向冗余纠错。
2.1 连接建立低延时
建立连接消耗的0RTT(往返时延)可以说是QUIC相比HTTP2最大的性能优势。主要还是QUIC是建立在UDP上的,同时又实现了0RTT的安全握手,所以在大部分情况下,只需要0个RTT就能实现数据发送。