这是我参与8月更文挑战的第24天,活动详情查看:8月更文挑战
QUIC = quick UDP internet connection
一、对比 http2 + tcp + tls 的优势
- 减少 TCP 三次握手 及 握手耗时;
- 改进的拥塞控制策略;
- 避免队头阻塞的多路复用;
- 连接迁移:用随机数作为ID而非IP和端口(长度64位);
- 前向冗余纠错:握手包丢失时,能根据冗余信息,恢复握手消息;
- 总结:在应用层实现了 TCP 的可靠性,TLS 的安全性 和 HTTP2 的并发性;
二、特性
- 有序性:Packet Number 代替 SEQ 实现有序;
- 流量控制:基于 Stream 和 Connection 级别;
- 安全性:经过 TLS 加密,能及时发现报文是否被篡改;
三、简要介绍
1. HTTP 发展历程
- v0.9 仅能处理文本,无法显示图片。
- v1.0 面向事务的应用层协议。
- v1.1 长连接、连接复用、分块发送。
- v2.0 多路复用、头部压缩、服务器推送 —— 别名: QUIC。
2. 握手 & 生成通信密钥 K
- a, g, p 由服务端生成;b 由客户端生成;
- 原理等式:
- 安全性:即使在网络中传输的 p、g、A、B 都被劫持,那么靠现在的计算机算力也没法破解密钥。
4. 连接迁移不受四元组影响
- 不以 四元组 作为 连接标识;
- 以 Connection ID(随机数)作为 连接标识;
5. 队头阻塞避免
- 传输/加密/解密 的单位都是 Packet;
- 基于 UDP,不需要按序 接收数据包,即使其中有丢包,也不影响其他数据包;
6. 改进的拥塞控制算法
- 根据不同的网络环境、用户,在 应用层 动态 选择 拥塞控制算法;
7. 前向纠错 FEC
- 一段数据被划分为 10份,依次对每个包作异或运算,运算结果会作为 FEC包 与数据包一起被传输;
- 若其中一个包丢失,则可以根据剩余的 9个包推算出丢失的那个包的数据。大大增加了协议的容错性;
- 优点:适当增加数据冗余,减少重传;
8. 单调递增 Packet Number
- 比 TCP 能更好地区分 原始请求 还是 重传请求,得到真实的 RTT;
9. ACK Delay
- 比 TCP 多考虑了处理请求的延迟部分,不会计算到 RTT 中;
10. ACK Block
- TCP 最多提供 3个 ACK Block,QUIC 支持 256个;