QUIC协议详解

https://www.zhihu.com/zvideo/1447315932791730176

1. QUIC简介

一种基于UDP的传输协议,用于提升网络加载速度,在弱网环境下表现较好。
截屏2022-02-17 下午5.53.02

2. QUIC数据格式

QUIC数据包分为Header和Data两部分。
截屏2022-02-17 下午5.55.50

  • Frame Type:Stream、ACK、Padding、Blocked等
  • Stream Frame:传输应用协议
    截屏2022-02-17 下午6.00.07

3. QUIC实现原理

3.1 建立连接

回顾:建立连接-HTTPS

HTTPS的握手过程包含TCP握手和TLS握手

截屏2022-02-17 下午6.03.12
建立连接-QUIC

QUIC基于TLS实现连接建立。可以实现0-RTT握手。
截屏2022-02-17 下午6.05.44
截屏2022-02-17 下午7.53.50

前向安全:用来产生会话秘钥的长期密钥泄露出去,不会泄露以前的通讯内容。

截屏2022-02-17 下午8.15.20

3.2 可靠传输

可靠传输的要求

  • 数据完整性:发送端发出的数据包,接收端都能收到。
  • 数据有序性:接收端能按序组装数据包,解码得到原始数据。
数据完整性

实现方案:基于包号PKN和确认应答SACK的丢包重传机制
截屏2022-02-17 下午8.21.35

3.3 流量控制

滑动窗口

和TCP一样利用滑动窗口机制实现流量控制。
截屏2022-02-17 下午8.25.52
如果发送端收到了接收端的ACK帧,窗口就会向右滑动,发送新的数据包。
截屏2022-02-17 下午8.31.26

和TCP的不同

和TCP不同的是,QUIC的滑动窗口分为ConnectionStream两种级别

  • Connection流量控制:规定了所有数据流的总窗口大小
  • Stream流量控制:规定了每个流的窗口大小
    截屏2022-02-17 下午8.35.32

3.4 拥塞控制

目的:通过拥塞窗口限制发送方的数据量,避免整个网络发生拥塞。
截屏2022-02-17 下午8.44.57
 swnd  = min ⁡  [rwnd, [cwnd]  \text { swnd }=\min \text { [rwnd, [cwnd] }  swnd =min [rwnd, [cwnd] 

3.5 多路复用

首次提出:HTTP2

定义:单个TCP连接上可以同时发送多个HTTP请求

目的:解决HTTP1.1中单个连接1次只能发送一个请求的性能瓶颈
截屏2022-02-17 下午8.51.02
1个请求对应1个流,通过Stream ID就可以判断该数据帧属于哪个请求。

假设有A和B两个请求,对应的Stream ID分别为1和2。

截屏2022-02-17 下午8.52.57

存在问题:队头阻塞

截屏2022-02-17 下午8.54.58

解决方案:给每个请求流都分配一个独立的滑动窗口
截屏2022-02-17 下午8.57.34

3.6 连接迁移

定义:当客户端切换网络时,和服务器的连接并不会断开,仍然可以正常通信。

实现原理:QUIC的连接是基于64位的Connection ID,网络切换并不会影响Connection ID的变化,连接在逻辑上仍然是通的。
截屏2022-02-17 下午9.01.13

4. QUIC总结

问题:QUIC是如何提升网络加载速度的?

  1. 降低连接耗时:在客户端有缓存的情况下实现 0-RTT 建立连接

  2. 更灵活的拥塞控制:在用户态可以为每个请求配置不同的拥塞控制策略

  3. 无队头阻塞的多路复用:在用户态可以为每个请求配置不同的拥塞控制策略

  4. 连接迁移:网络切换不会中断数据传输

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值