QUIC 协议

QUIC协议基于UDP实现,可以视作基于UDP实现的TCP。全称是 Quick UDP Internet Connections

相对于TCP的特性:

  1. 减少了TCP三次握手和TSL握手时间

  2. 改进了拥塞控制

  3. 避免了队头阻塞的多路复用

  4. 连接迁移

  5. 前向冗余纠错

HTTPS需要底层的TCP传输,还需要使用TLS协议,这样TCP三次握手会产生延迟,TLS握手也产生延迟,对于很多短连接 场景,这样的握手延迟影响很大。 而QUIC可以实现0RTT建立连接(传输层和加密层)

TCP的拥塞控制包含了四种算法,慢启动、拥塞避免、快速重传和快速恢复,QUIC协议默认使用了TCP协议中的 Cubic拥塞控制算法,同时也支持 CubicBytes Reno RenoBytes BBR PCC 等拥塞控制算法。QUIC的改进主要是

  1. 拥塞控制算法不需要内核的支持

  2. 单个服务的不同连接可以配置不同的拥塞控制机制

  3. 服务不需要停机就可以实现拥塞控制的变更,可以热更新

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标记每一次连接,

Written on November 18, 2019