QUIC 协议
QUIC协议基于UDP实现,可以视作基于UDP实现的TCP。全称是 Quick UDP Internet Connections
相对于TCP的特性:
-
减少了TCP三次握手和TSL握手时间
-
改进了拥塞控制
-
避免了队头阻塞的多路复用
-
连接迁移
-
前向冗余纠错
HTTPS需要底层的TCP传输,还需要使用TLS协议,这样TCP三次握手会产生延迟,TLS握手也产生延迟,对于很多短连接 场景,这样的握手延迟影响很大。 而QUIC可以实现0RTT建立连接(传输层和加密层)
TCP的拥塞控制包含了四种算法,慢启动、拥塞避免、快速重传和快速恢复,QUIC协议默认使用了TCP协议中的 Cubic拥塞控制算法,同时也支持 CubicBytes Reno RenoBytes BBR PCC 等拥塞控制算法。QUIC的改进主要是
-
拥塞控制算法不需要内核的支持
-
单个服务的不同连接可以配置不同的拥塞控制机制
-
服务不需要停机就可以实现拥塞控制的变更,可以热更新
TCP使用了Sequence Number和Ack以确认消息的有序到达。QUIC使用了Packet Number代替了TCP的 sequence number,并且 每个Packet Number都是严格递增。如果 packet N 丢失,重传的 packet N 的Packet Number会变成一个比N大的值,而TCP重传的 segment的序号是保持不变的。
使用TCP时 如果一个数据包出现问题,TCP需要等待这个包重传之后,才能继续传输其他包,而QUIC协议在数据包需要重传时不会出现这个问题。
基于TCP的连接是基于client和server的ip+port建立的。在网络切换的场景下,比如手机切换了无线网络,改变了IP,那么TCP连接必须重新建立, 而QUIC协议使用了特有的UUID标记每一次连接,