QUIC协议学习2:QUIC的package格式和类型

1、数据包开头:QUIC Common

所有QUIC数据包均以QUIC Common格式开头,如下
+---------+------------------------------+
| Flags(8) | Connection ID (64) (optional)|
+---------+------------------------------+

1.1、Flag含义

  • 0x01 = VERSION 版本 ➡️0000000_
    (1)若该QUIC数据包由客户端发送:使用这个flag并包含一个确切的建议版本
    (2)若该QUIC数据包由服务器发送:不支持客户端建议的版本,并提供给客户端一系列可接受的版本
  • 0x02 = PUBLIC_RESET ➡️000000_0
    指明这个packet是一个公共重置数据包 Public Reset packet.
  • 0x04 = DIVERSIFICATION_NONCE = 00000?00
    指明header中存在32位的多样化随机数
  • 0x08 = CONNECTION_ID ➡️0000_000
    指明数据包中存在连接ID,
  • 0x30 = PACKET_NUMBER_SIZE ➡️00_ _0000
    指明每个数据包中存在的数据包编号的低位字节数。
    11:存在6个字节的数据包编号
    10:存在4个字节的数据包编号
    01:存在2个字节的数据包编号
    00:存在1个字节的数据包编号
  • 0x40 = MULTIPATH ➡️0_000000
    保留给多路复用使用
  • 0x80 ➡️_0000000
    暂未使用,常为0

1.2、Connection ID含义

由客户端选择的64位无符号随机数,用于作为连接标识符
每个Connection ID与一个QUIC连接绑定,在客户端和/或服务器IP和端口更改之间保持一致。

2、数据包类型

Regular packets:常规数据包
Version Negotiation packets:版本协商数据包
Public Reset packets:公共重置数据包


判断数据包类型

2.1 Regular packets:常规数据包

Common Header + 常规数据包专用字段


常规数据包
  • Version
    QUIC版本,仅存在于客户端->服务器方向。与VERSION flag和版本协商相关。
  • Diversification Nonce
    服务器生成的32字节的随机数,仅存在于服务器->客户端方向。目的是确保服务器能为每一个QUIC连接生成独一无二的key。
    具体来说,当使用QUIC当0-RTT加密握手时,具有完全相同的连接ID和CHLO的、重复的CHLO可以为该连接生成相同的中间初始加密密钥。服务器生成的随机数不允许客户端导致为两个不同的连接派生相同的密钥。一旦连接是前向安全的,该随机数不再存在于数据包中。
  • Packer Number
    数据包编号,它的低8、16、32、48位号码基于PACKET_NUMBER_SIZE标志。发送方给每个常规数据包分配了一个数据包号码。端点(C/S)发送的第一个数据包务必具有值为1的Packer Number。
  • AEAD Data
    常规数据包的header,包括common header, Version, Diversification Nonce, and Packet Number fields,已通过身份验证,但未加密

2.1.1 数据包编号的压缩和重构

完整的数据包号是一个64位无符号号,用作数据包加密的加密随机数的一部分。为减少表示线路上的数据包号所需的位数,最多只有48位数据包号通过有线传输。
一个QUIC端点不能在一个相同的连接中(即在相同的加密密钥下)重复使用

2.2.2 常规数据包的框架(frame)和框架类型

常规数据包至少含有一个框架,而且可能还有多个/多种框架。框架必须适合单个QUIC数据包,并且不得跨越QUIC数据包边界。


每个frame格式

以下为QUIC Frames的类型,注意其中的STREAM和ACK类型用于承载other frame-specific flags


QUIC Frames的类型

2.2 Version Negotiation packets:版本协商数据包

版本协商数据包仅由服务器发送,必须具有VERSION标志集,并且必须包含完整的64位连接ID。版本协商数据包的其余部分是一系列服务器支持的版本的4字节的列表。


版本协商协议包格式

2.3 Public Reset packets:公共重置数据包

需要PUBLIC_RESET被置1,且必须包括完整的64位连接ID,其余部分被编码为标签PRST的加密握手消息。


公共重置数据包格式

图中的tag value map包括以下tag-values:
o RNON (public reset nonce proof 公共重置随机数证明) - a 64-bit unsigned integer.
o RSEQ (rejected packet number 被拒绝的数据包编号) - a 64-bit packet number.
o CADR (client address 客户端地址) - the observed client IP address and port number. This is currently for debugging purposes only and hence is optional. 观察到的客户端IP地址和端口数。当前这仅用于调试目的,因此是可选的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353