QUIC協(xié)議學(xué)習(xí)2:QUIC的package格式和類型

1豁鲤、數(shù)據(jù)包開頭:QUIC Common

所有QUIC數(shù)據(jù)包均以QUIC Common格式開頭秽誊,如下
+---------+------------------------------+
| Flags(8) | Connection ID (64) (optional)|
+---------+------------------------------+

1.1、Flag含義

  • 0x01 = VERSION 版本 ??0000000_
    (1)若該QUIC數(shù)據(jù)包由客戶端發(fā)送:使用這個flag并包含一個確切的建議版本
    (2)若該QUIC數(shù)據(jù)包由服務(wù)器發(fā)送:不支持客戶端建議的版本琳骡,并提供給客戶端一系列可接受的版本
  • 0x02 = PUBLIC_RESET ??000000_0
    指明這個packet是一個公共重置數(shù)據(jù)包 Public Reset packet.
  • 0x04 = DIVERSIFICATION_NONCE = 00000?00
    指明header中存在32位的多樣化隨機數(shù)
  • 0x08 = CONNECTION_ID ??0000_000
    指明數(shù)據(jù)包中存在連接ID锅论,
  • 0x30 = PACKET_NUMBER_SIZE ??00_ _0000
    指明每個數(shù)據(jù)包中存在的數(shù)據(jù)包編號的低位字節(jié)數(shù)。
    11:存在6個字節(jié)的數(shù)據(jù)包編號
    10:存在4個字節(jié)的數(shù)據(jù)包編號
    01:存在2個字節(jié)的數(shù)據(jù)包編號
    00:存在1個字節(jié)的數(shù)據(jù)包編號
  • 0x40 = MULTIPATH ??0_000000
    保留給多路復(fù)用使用
  • 0x80 ??_0000000
    暫未使用楣号,常為0

1.2最易、Connection ID含義

由客戶端選擇的64位無符號隨機數(shù),用于作為連接標(biāo)識符炫狱。
每個Connection ID與一個QUIC連接綁定藻懒,在客戶端和/或服務(wù)器IP和端口更改之間保持一致。

2视译、數(shù)據(jù)包類型

Regular packets:常規(guī)數(shù)據(jù)包
Version Negotiation packets:版本協(xié)商數(shù)據(jù)包
Public Reset packets:公共重置數(shù)據(jù)包


判斷數(shù)據(jù)包類型

2.1 Regular packets:常規(guī)數(shù)據(jù)包

Common Header + 常規(guī)數(shù)據(jù)包專用字段


常規(guī)數(shù)據(jù)包
  • Version
    QUIC版本束析,僅存在于客戶端->服務(wù)器方向。與VERSION flag和版本協(xié)商相關(guān)憎亚。
  • Diversification Nonce
    服務(wù)器生成的32字節(jié)的隨機數(shù)员寇,僅存在于服務(wù)器->客戶端方向。目的是確保服務(wù)器能為每一個QUIC連接生成獨一無二的key第美。
    具體來說蝶锋,當(dāng)使用QUIC當(dāng)0-RTT加密握手時,具有完全相同的連接ID和CHLO的什往、重復(fù)的CHLO可以為該連接生成相同的中間初始加密密鑰扳缕。服務(wù)器生成的隨機數(shù)不允許客戶端導(dǎo)致為兩個不同的連接派生相同的密鑰。一旦連接是前向安全的,該隨機數(shù)不再存在于數(shù)據(jù)包中躯舔。
  • Packer Number
    數(shù)據(jù)包編號驴剔,它的低8、16粥庄、32丧失、48位號碼基于PACKET_NUMBER_SIZE標(biāo)志。發(fā)送方給每個常規(guī)數(shù)據(jù)包分配了一個數(shù)據(jù)包號碼惜互。端點(C/S)發(fā)送的第一個數(shù)據(jù)包務(wù)必具有值為1的Packer Number布讹。
  • AEAD Data
    常規(guī)數(shù)據(jù)包的header,包括common header, Version, Diversification Nonce, and Packet Number fields训堆,已通過身份驗證描验,但未加密

2.1.1 數(shù)據(jù)包編號的壓縮和重構(gòu)

完整的數(shù)據(jù)包號是一個64位無符號號,用作數(shù)據(jù)包加密的加密隨機數(shù)的一部分坑鱼。為減少表示線路上的數(shù)據(jù)包號所需的位數(shù)膘流,最多只有48位數(shù)據(jù)包號通過有線傳輸。
一個QUIC端點不能在一個相同的連接中(即在相同的加密密鑰下)重復(fù)使用

2.2.2 常規(guī)數(shù)據(jù)包的框架(frame)和框架類型

常規(guī)數(shù)據(jù)包至少含有一個框架鲁沥,而且可能還有多個/多種框架呼股。框架必須適合單個QUIC數(shù)據(jù)包黍析,并且不得跨越QUIC數(shù)據(jù)包邊界卖怜。


每個frame格式

以下為QUIC Frames的類型,注意其中的STREAM和ACK類型用于承載other frame-specific flags


QUIC Frames的類型

2.2 Version Negotiation packets:版本協(xié)商數(shù)據(jù)包

版本協(xié)商數(shù)據(jù)包僅由服務(wù)器發(fā)送阐枣,必須具有VERSION標(biāo)志集马靠,并且必須包含完整的64位連接ID。版本協(xié)商數(shù)據(jù)包的其余部分是一系列服務(wù)器支持的版本的4字節(jié)的列表蔼两。


版本協(xié)商協(xié)議包格式

2.3 Public Reset packets:公共重置數(shù)據(jù)包

需要PUBLIC_RESET被置1甩鳄,且必須包括完整的64位連接ID,其余部分被編碼為標(biāo)簽PRST的加密握手消息额划。


公共重置數(shù)據(jù)包格式

圖中的tag value map包括以下tag-values:
o RNON (public reset nonce proof 公共重置隨機數(shù)證明) - a 64-bit unsigned integer.
o RSEQ (rejected packet number 被拒絕的數(shù)據(jù)包編號) - 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地址和端口數(shù)妙啃。當(dāng)前這僅用于調(diào)試目的,因此是可選的俊戳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末揖赴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抑胎,更是在濱河造成了極大的恐慌燥滑,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阿逃,死亡現(xiàn)場離奇詭異铭拧,居然都是意外死亡赃蛛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門搀菩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呕臂,“玉大人,你說我怎么就攤上這事肪跋∑缃” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵澎嚣,是天一觀的道長疏尿。 經(jīng)常有香客問我瘟芝,道長易桃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任锌俱,我火速辦了婚禮晤郑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贸宏。我一直安慰自己造寝,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布吭练。 她就那樣靜靜地躺著诫龙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鲫咽。 梳的紋絲不亂的頭發(fā)上签赃,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音分尸,去河邊找鬼锦聊。 笑死,一個胖子當(dāng)著我的面吹牛箩绍,可吹牛的內(nèi)容都是我干的孔庭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼材蛛,長吁一口氣:“原來是場噩夢啊……” “哼圆到!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卑吭,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤芽淡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后陨簇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吐绵,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡迹淌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了己单。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唉窃。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纹笼,靈堂內(nèi)的尸體忽然破棺而出纹份,到底是詐尸還是另有隱情,我是刑警寧澤廷痘,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布蔓涧,位于F島的核電站,受9級特大地震影響笋额,放射性物質(zhì)發(fā)生泄漏元暴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一兄猩、第九天 我趴在偏房一處隱蔽的房頂上張望茉盏。 院中可真熱鬧,春花似錦枢冤、人聲如沸鸠姨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讶迁。三九已至,卻和暖如春核蘸,著一層夾襖步出監(jiān)牢的瞬間巍糯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工值纱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鳞贷,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓虐唠,卻偏偏與公主長得像搀愧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子疆偿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354