QUIC概述
- 起源:由Google设计,2013年首次提出。
- 目标:提供快速连接建立、低延迟和高安全性。
- 标准化:RFC9000标准。
协议体结构
-
头部:由连接头部和帧头部组成。
-
连接头部字段:
- 标志位(Flags)
- 版本号(Version)
- 目的连接ID长度(DCID Len)
- 目的连接ID(DCID)
- 源连接ID长度(SCID Len)
- 源连接ID(SCID)
- 报文长度(Packet Length)
- 报文编号(Packet Number)
-
帧头部:标识和管理数据包中的帧,例如Stream Frame。
0-RTT特性
- 基于UDP,无需建立连接即可发送数据。
- 与TCP相比,QUIC支持0-RTT数据发送。
可靠传输
- QUIC使用单调递增的Packet Number,不同于TCP的序列号。
- 解决了TCP重传歧义问题,确保RTT和RTO测量准确。
流量控制
- 类似TCP,但基于UDP实现。
- 实现了两个级别的流量控制:Connection级别和Stream级别。
- 使用WINDOW_UPDATE和BLOCKED帧进行控制。
多路复用与队头阻塞
- QUIC支持多路复用,提高传输效率。
- 解决TCP的队头阻塞问题,Stream独立维护接收窗口。
拥塞控制
- 与TCP相同,支持Reno、CUBIC、BBR等算法。
- 在应用层实现,提供快速升级和灵活使用。
连接迁移
- 支持网络环境变化时的连接持续性。
- 使用连接ID而非四元组标识,支持IP变化。