RFC 9000 - QUIC: A UDP-Based Multiplexed and Secure Transport
作者: J. Iyengar (Google), M. Thomson (Mozilla)
发布日期: 2021年5月
状态: 标准轨道 (Standards Track)
更新: RFC 8999
废止: -
摘要 (Abstract)
本文档定义了QUIC传输协议的核心。QUIC在UDP上提供应用程序具有流抽象 (Stream Abstraction),类似于TCP中的抽象,以及内置安全性,相当于TLS和TCP。QUIC提供流多路复用、按流的流量控制和低延迟连接建立。
目录 (Table of Contents)
主要章节
- 1. 概述 (Overview)
- 2. 流 (Streams)
- 2.1 流类型和标识符
- 2.2 发送和接收数据
- 2.3 流优先级
- 2.4 流操作
- 3. 流状态 (Stream States)
- 3.1 发送流状态
- 3.2 接收流状态
- 3.3 允许的帧类型
- 3.4 双向流状态
- 3.5 请求的状态转换
- 4. 流量控制 (Flow Control)
- 4.1 数据流量控制
- 4.2 增加流量控制限制
- 4.3 流量控制性能
- 4.4 处理流取消
- 4.5 流最终大小
- 4.6 控制并发性
- 5. 连接 (Connections)
- 5.1 连接ID
- 5.2 匹配数据包到连接
- 5.3 连接操作
- 6. 版本协商 (Version Negotiation)
- 7. 加密和传输握手 (Cryptographic and Transport Handshake)
- 7.1 握手流程示例
- 7.2 协商连接ID
- 7.3 验证连接ID
- 7.4 传输参数
- 7.5 加密消息缓冲
- 8. 地址验证 (Address Validation)
- 8.1 连接建立期间的地址验证
- 8.2 路径验证
- 9. 连接迁移 (Connection Migration)
- 9.1 探测新路径
- 9.2 启动连接迁移
- 9.3 响应连接迁移
- 9.4 丢包检测和拥塞控制
- 9.5 连接迁移的隐私影响
- 9.6 服务器的首选地址
- 9.7 IPv6流标签的使用和迁移
- 10. 连接终止 (Connection Termination)
- 10.1 空闲超时
- 10.2 立即关闭
- 10.3 无状态重置
- 11. 错误处理 (Error Handling)
- 12. 数据包和帧 (Packets and Frames)
- 12.1 受保护的数据包
- 12.2 合并数据包
- 12.3 数据包编号
- 12.4 帧和帧类型
- 12.5 帧和编号空间
- 13. 数据包化和可靠性 (Packetization and Reliability)
- 13.1 数据包处理
- 13.2 生成确认
- 13.3 信息重传
- 13.4 显式拥塞通知
- 14. 数据报大小 (Datagram Size)
- 14.1 初始数据报大小
- 14.2 路径最大传输单元
- 14.3 数据报分组层PMTU发现
- 14.4 发送QUIC PMTU探测
- 15. 版本 (Versions)
- 16. 可变长度整数编码 (Variable-Length Integer Encoding)
- 17. 数据包格式 (Packet Formats)
- 17.1 数据包编号编码和解码
- 17.2 长头数据包
- 17.3 短头数据包
- 17.4 延迟自旋位
- 18. 传输参数编码 (Transport Parameter Encoding)
- 19. 帧类型和格式 (Frame Types and Formats)
- 19.1-19.21 各种帧类型
- 20. 错误码 (Error Codes)
- 20.1 传输错误码
- 20.2 应用协议错误码
- 21. 安全考虑 (Security Considerations)
- 21.1 安全属性概述
- 21.2-21.14 各种安全威胁和缓解措施
- 22. IANA考虑 (IANA Considerations)
- 23. 参考文献 (References)
附录
- Appendix A. 伪代码 (Pseudocode)
- A.1 可变长度整数解码示例
- A.2 数据包编号编码算法示例
- A.3 数据包编号解码算法示例
- A.4 ECN验证算法示例
QUIC核心特性
🚀 性能优势
- 0-1 RTT连接建立: 首次连接1-RTT,恢复连接0-RTT
- 无队头阻塞: 流级别独立传输,单个流丢包不影响其他流
- 连接迁移: IP/端口变化连接不中断(Wi-Fi到4G无缝切换)
- 改进的拥塞控制: 更精确的丢包检测和恢复
🔒 安全特性
- 内置TLS 1.3: 加密和认证是强制的
- 传输参数加密: 握手元数据也被加密
- 连接ID: 避免IP地址关联攻击
📊 与TCP+TLS对比
| 特性 | QUIC | TCP+TLS |
|---|---|---|
| 握手RTT | 0-1 | 2-3 |
| 队头阻塞 | 无 (流级别) | 有 (字节流级别) |
| 连接迁移 | ✅ 原生支持 | ❌ 需应用层处理 |
| 多路复用 | ✅ 原生支持 | 需HTTP/2 |
| 加密 | 强制 | 可选 |
| 部署 | 快速 (UDP) | 慢 (操作系统升级) |
状态说明 (Status)
本文档是IETF的标准轨道文档,代表IETF社区的共识。
更多信息: https://www.rfc-editor.org/info/rfc9000