一、概述、
QUIC(Quick udp Internet connection):快速UDP互联网协议。相比于当前广泛应用的http2+tcp+tls有如下优势:
- 减少三次握手及TLS握手时间;
- 改进拥塞机制;
- 避免队头阻塞的多路复用;
- 连接迁移;
- 向前冗余纠错;
二、QUIC核心特征
1、建立连接延时低
0RTT建立连接。
2、改进拥塞控制
- 可插拔:应用层能实现不同的拥塞控制算法,不需要内核或者操作系统;
- 单调递增的Packet Number:传统的TCP重传时序列号一致会导致计算RTT时间有误,QUIC引入Stream Offset;
- 不允许Reneging;
- 更快的ACK块:QUIC相对于TCP的Sack可以提供更多的 Sack Block,可以提升网络的恢复速度,减少重传量;
- Ack Delay时间:
3、基于stream和connecton级别的流量控制
- Stream可以认为是一条HTTP请求;
- Connection可以类比一条TCP连接。多路复用意味一条Connetion上同时存在多条Stream。要对单个Stream控制,也要对所有Stream进行总体控制;
4、没有队头阻塞的多路复用
QUIC多路复用一条连接上可以发送多个HTTP请求(stream)。QUIC一个连接上的多个stream之间没有依赖,之间的丢失不会影响另一个。
传统的TCP连接和TLS协议
为何QUIC多路复用可以避免上述问题?
- QUIC基本传输单元式时Packet,不会超过MTU大小,加密和认证都是基于Packet,这样可以避免TLS协议存在的队头阻塞;
- Stream之间相互独立,不存在TCP队头阻塞;
5、加密认证的报文 - TCP 协议头部没有经过任何加密和认证,所以在传输过程中很容易被中间网络设备篡改,注入和窃听。比如修改序列号、滑动窗口。这些行为有可能是出于性能优化,也有可能是主动攻击。
- 但是 QUIC 的 packet 可以说是武装到了牙齿。除了个别报文比如 PUBLIC_RESET 和 CHLO,所有报文头部都是经过认证的,报文 Body 都是经过加密的。
- 这样只要对 QUIC 报文任何修改,接收端都能够及时发现,有效地降低了安全风险。
6、连接迁移
TCP连接由四元组标识,当其中一个元素改变时,会导致此连接不可用(客户端经常会改变)。例如当手机在WIFI和4G移动网络切换时,IP发生变化,需要重新建立TCP连接。如使用公共NAT出口时。QUIC如何做到连接迁移呢,QUIC连接是以64位的随机数作为ID标识,这样,IP/Port改变,只要ID不变,那么这条连接依然维持。
四、其他名词
- TCP Fast Open;
- Sack、D-Sack;
- RTT、RTO;