Quic协议介绍和浅析

一,Quic全称是什么?

QUIC 全称 Quick UDP Internet Connection, 是Google制定的一种基于 UDP 协议的低时延互联网应用层协议。

二,Quic的优势和应用场景

1,为什么需要Quic:

  • 近三十年来,tcp协议发展得非常缓慢
  • 很多网络中间层,比如防火墙、网关等,都强依赖于tcp指定的各类规则,所以tcp的修改很容易由于这些中间环节的存在而受到干扰。
  • tcp是由操作系统在内核层面实现的, 导致tcp的迭代受限于操作系统的升级。

2,Quic 相比现在广泛应用的 tls+http+tcp 协议有如下优势 :

  • 减少了 TCP 三次握手及 TLS 握手时间。
  • 改进的拥塞控制。
  • 避免队头阻塞。

3,应用场景

  • 弱网环境的时候能够提升 20% 以上的访问速度。
  • 频繁切换网络的情况下,不会断线,不需要重连,用户无任何感知。

三,Quic协议原理

1,0RTT 建连

在这里插入图片描述
先声明一点,如果一对使用QUIC进行加密通信的双方此前从来没有通信过,0RTT是不可能的。
所以第一次C和S建连还是会走正常的tls握手流程,但过了一会儿或者一段时间后,C又想和S通信,此时C已经有了刚刚和S协商出来的密钥(可能是存在内存or外存)。C就会利用刚刚的密钥K1来和S加密首次数据,在第二个RTT期间,S会和C协商出新的密钥K2,作为接下来的通信密钥。

2,没有歧义的重传

TCP 重传的 包 的 sequence number 和原始的 包 的 Sequence Number 是保持不变的,也正是由于这个特性,引入了 Tcp 重传的歧义问题。
在这里插入图片描述
超时事件 RTO 发生后,客户端发起重传,然后接收到了 Ack 数据。由于Sequence Number一样,这个 Ack 到底是原始请求的响应还是重传请求的响应呢?这就间接导致了RTT计算的歧义。
在这里插入图片描述
Quic 使用 Packet Number 代替了 TCP 的 sequence number,并且每个 Packet Number 都严格递增,也就是说就算 Packet N 丢失了,重传的 Packet N 的 Packet Number 已经不是 N,而是一个比 N 大的值,这就解决了RTT计算的歧义问题。

3,保证包的顺序

QUIC 引入了一个叫 Stream Offset 的概念。
在这里插入图片描述
假设 Packet N 丢失了,发起重传,重传的 Packet Number 是 N+2,但是它的 Stream 的 Offset 依然是 x,这样就算 Packet N + 2 是后到的,依然可以将 Stream x 和 Stream x+y 按照顺序组织起来。

4,解决ack delay

在这里插入图片描述
TCP 的 RTT 计算:
在这里插入图片描述
Quic的RTT计算:
在这里插入图片描述

5,队头阻塞

拿http2举例,
在这里插入图片描述
http2 在一个 TCP 连接上同时发送 4 个 请求。其中 请求1 已经正确到达,并被应用层读取。但是 请求2 的第三个 tcp包丢失了,为了保证数据的顺序,需要发送端重传第 3 个包才能通知应用层读取接下去的数据,虽然这个时候 请求3 和 请求4 的全部数据已经到达了接收端,但都被阻塞住了。
在这里插入图片描述
Quic基于UDP,各个请求之间相互独立,比如 请求2 丢了一个 Pakcet,不会影响 请求3 和 请求4,不存在 TCP 队头阻塞。

四,Quic和http3

QUIC 协议最初是由Google发起的项目,后面慢慢成为了 HTTP/2-encrypted-over-UDP 协议。
当 IETF 开始进行协议标准化工作时,协议被分为两层:传输部分和 HTTP 部分。这个想法的初衷是考虑到该传输协议也可用于传输其他数据,而不仅仅用于 HTTP 协议。
社区中大家使用 iQUIC 和 gQUIC 这样的非正式名称来引用这些不同版本的协议,以便将IETF 和 Google提出的QUIC 协议分开。
通过 iQUIC 发送 HTTP 请求的协议被称为HTTP-over-QUIC,即HTTP3。

五,参考资料

  1. 下一代通信协议:Quic
  1. QUIC协议是如何做到0RTT加密传输的
  1. Web服务器快速启用QUIC协议
  1. QUIC协议原理分析
  1. QUIC在腾讯的实践及性能优化
  1. 七牛云 QUIC 推流方案如何实现直播 0 卡顿
  1. 当我们在讨论http队头阻塞时,我们在讨论什么?
  1. QUIC官方文档
  1. QUIC协议规范https://www.wolfcstech.com/2017/01/13/QUIC%E5%8D%8F%E8%AE%AE%E8%A7%84%E8%8C%83/
03-20
<think>好的,我现在需要帮助用户了解QUIC协议的相关信息,包括介绍、原理实现。首先,我要回忆一下QUIC协议的基本概念。QUIC是Google提出的基于UDP的传输协议,旨在解决TCP的一些性能问题,同时整合了TLS加密,减少连接延迟。接下来,用户可能想知道它的核心原理,比如多路复用、0-RTT握手、连接迁移等特性。关于实现部分,需要提到其数据包结构、帧类型以及如何管理连接。 根据用户提供的引用资料,引用[1]提到QUIC在Facebook的部署性能分析,引用[3][4]详细说明了QUIC的数据包结构连接建立过程。引用[2]则比较了MPTCP的不足,说明QUIC的优势在于无需操作系统支持,更容易部署。我需要整合这些信息,确保回答结构清晰,分点阐述。 另外,用户要求使用中文回答,数学公式用$...$,独立公式用$$...$$。虽然目前问题不涉及数学公式,但如果有相关内容,比如拥塞控制算法,可能需要用LaTeX表达。例如,BBR算法的公式可能需要写成:$$ \text{发送速率} = \min(\text{带宽}, \text{延迟}) $$。不过根据现有资料,可能暂时不需要,但需保持注意。 用户还要求生成相关问题,我需要根据内容提出几个相关的问题,比如QUIC与TCP的对比,0-RTT的实现,或者QUIC的拥塞控制机制。这些问题应覆盖原理、优化应用场景。 现在需要检查引用是否正确,比如引用[3]提到数据包分为HeaderData,以及Frame类型,这部分要准确对应。同时,确保每个引用标识在回答末尾正确标注,例如[^3]。 最后,确保回答符合系统级指令,结构清晰,分点说明,语言简洁,并自然融入引用标记。可能还需要注意避免技术术语过多,但用户要求的是原理实现,所以适当深度是可以的。总结时,要涵盖QUIC的核心优势,如低延迟、多路复用、安全性等,并引用相关资料支持每个观点。</think>### QUIC协议介绍与原理分析 #### 一、协议背景 QUICQuick UDP Internet Connections)是由Google提出的基于UDP的传输协议,旨在解决TCP的队头阻塞、握手延迟高、连接迁移能力弱等问题。其核心设计目标包括: 1. 降低延迟:通过0-RTT握手实现快速连接[^4] 2. 多路复用:无队头阻塞的流传输 3. 安全性:强制使用TLS 1.3加密[^1] 4. 连接迁移:IP/端口变化时保持连接[^2] #### 二、核心原理 1. **连接管理** - 使用**连接ID**替代TCP四元组,实现网络切换时无缝迁移 - 示例连接标识符: $$ \text{Connection ID} = \text{64位随机数} $$ 2. **多路复用与流控制** - 每个流(Stream)独立传输,避免HTTP/2的队头阻塞 - 流类型: - 单向流(客户端→服务端) - 双向流(客户端↔服务端) 3. **0-RTT握手** - 首次连接:1-RTT完成密钥协商(TLS 1.3) - 重连时:客户端直接发送加密数据,无需握手[^4] #### 三、协议实现 1. **数据包结构** QUIC数据包分为HeaderPayload两部分: ```plaintext +----------------+-------------------+ | Header (加密) | Payload (帧集合) | +----------------+-------------------+ ``` - 帧类型包括:Stream、ACK、Padding、Blocked等 2. **拥塞控制** 采用可插拔算法(如BBR),通过带宽延迟动态调整发送速率: $$ \text{发送速率} = \min(\text{估计带宽}, \text{缓冲区容量}/\text{RTT}) $$ 3. **错误恢复机制** - 前向纠错(FEC):通过异或冗余包减少重传 - 快速重传:收到3个重复ACK立即重发 #### 四、与TCP对比 | 特性 | QUIC | TCP | |--------------|--------------------------|-------------------| | 握手延迟 | 0-RTT | 1-RTT(TLS 1.3) | | 多路复用 | 无队头阻塞 | 有队头阻塞 | | 连接迁移 | 支持(通过Connection ID)| 依赖四元组 | | 部署难度 | 用户态实现 | 需要内核支持 | #### 五、应用场景 1. 移动端网络频繁切换(如5G切换基站) 2. 实时视频传输(如WebRTC) 3. 大规模CDN内容分发(Facebook已部署[^1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值