Quic 接收流程图

1、QUIC 简介

QUIC 全称:Quick UDP Internet Connections,是一种基于 UDP 的传输层协议。由 Google 自研,2012 年部署上线,2013 年提交 IETF,2021 年 5 月,IETF 推出标准版 RFC9000。

从协议栈可以看出:QUIC = HTTP/2 + TLS + UDP

2、QUIC 实现原理

2.1、数据格式

一个 QUIC 数据包的格式如下:

由 header 和 data 两部分组成。

header 是明文的,包含 4 个字段:Flags、Connection ID、QUIC Version、Packet Number;

data 是加密的,可以包含 1 个或多个 frame,每个 frame 又分为 type 和 payload,其中 payload 就是应用数据;

数据帧有很多类型:Stream、ACK、Padding、Window_Update、Blocked 等,这里重点介绍下用于传输应用数据的 Stream 帧。

Frame Type: 帧类型,占用 1 个字节

(1)Bit7:必须设置为 1,表示 Stream 帧

(2)Bit6:如果设置为 1,表示发送端在这个 stream 上已经结束发送数据,流将处于半关闭状态

(3)Bit5:如果设置为 1,表示 Stream 头中包含 Data length 字段

(4)Bit432:表示 offset 的长度.000 表示 0 字节,001 表示 2 字节,010 表示 3 字节,以此类推

(5)Bit10:表示 Stream ID 的长度。00 表示 1 字节,01 表示 2 字节,10 表示 3 字节,11 表示 4 字节

Stream ID: 流 ID,用于标识数据包所属的流。后面的流量控制和多路复用会涉及到

**Offset:**偏移量,表示该数据包在整个数据中的偏移量,用于数据排序。

Data Length: 数据长度,占用 2 个字节,表示实际应用数据的长度

Data: 实际的应用数据

上面的介绍引用自:QUIC 协议详解 - 知乎

3 接收流程图

从udp socket接收数据,层层解析quic 协议,然后send respond

Quic Packet=public header+data; data=stream1,...=frametype+payload=frametype+streamid+offset+data len+data
主要函数说明:QuicDispatcher::OnUnauthenticatedPublicHeader 处理public header
QuicSession::ProcessStreamFrame处理quic stream frame;
QuicDispatcher::ProcessUnauthenticatedHeader处理0RTT
QuicDispatcher处理header相关,QuicSesion处理frame协议相关

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值