QUIC介绍

523 阅读2分钟

这是我参与8月更文挑战的第24天,活动详情查看:8月更文挑战

QUIC = quick UDP internet connection

一、对比 http2 + tcp + tls 的优势

  1. 减少 TCP 三次握手 及 握手耗时;
  2. 改进的拥塞控制策略;
  3. 避免队头阻塞的多路复用;
  4. 连接迁移:用随机数作为ID而非IP和端口(长度64位);
  5. 前向冗余纠错:握手包丢失时,能根据冗余信息,恢复握手消息;
  6. 总结:在应用层实现了 TCP 的可靠性,TLS 的安全性 和 HTTP2 的并发性;

二、特性

  1. 有序性:Packet Number 代替 SEQ 实现有序;
  2. 流量控制:基于 Stream 和 Connection 级别;
  3. 安全性:经过 TLS 加密,能及时发现报文是否被篡改;

三、简要介绍

1. HTTP 发展历程

  1. v0.9 仅能处理文本,无法显示图片。
  2. v1.0 面向事务的应用层协议。
  3. v1.1 长连接、连接复用、分块发送。
  4. v2.0 多路复用、头部压缩、服务器推送 —— 别名: QUIC。

2. 握手 & 生成通信密钥 K

  1. a, g, p 由服务端生成;b 由客户端生成;
  2. 原理等式:
  3. 安全性:即使在网络中传输的 p、g、A、B 都被劫持,那么靠现在的计算机算力也没法破解密钥。

4. 连接迁移不受四元组影响

  1. 不以 四元组 作为 连接标识
  2. Connection ID(随机数)作为 连接标识;

5. 队头阻塞避免

  1. 传输/加密/解密 的单位都是 Packet;
  2. 基于 UDP,不需要按序 接收数据包,即使其中有丢包,也不影响其他数据包;

6. 改进的拥塞控制算法

  1. 根据不同的网络环境、用户,在 应用层 动态 选择 拥塞控制算法;

7. 前向纠错 FEC

  1. 一段数据被划分为 10份,依次对每个包作异或运算,运算结果会作为 FEC包 与数据包一起被传输;
  2. 若其中一个包丢失,则可以根据剩余的 9个包推算出丢失的那个包的数据。大大增加了协议的容错性;
  3. 优点:适当增加数据冗余,减少重传;

8. 单调递增 Packet Number

  1. 比 TCP 能更好地区分 原始请求 还是 重传请求,得到真实的 RTT;

9. ACK Delay

  1. 比 TCP 多考虑了处理请求的延迟部分,不会计算到 RTT 中;

10. ACK Block

  1. TCP 最多提供 3个 ACK Block,QUIC 支持 256个;