深入 HTTP2(幀痊硕,消息,流)

http2 協(xié)議簡(jiǎn)介

h2 專注于性能押框,最大的目標(biāo)在于用戶和網(wǎng)站之間只用一條連接岔绸。其h2 的推出并沒有改變http1.1 的基本語義。h2的目的是響應(yīng)復(fù)用橡伞,頭部壓縮來提高極致的性能盒揉。
其特性在 之前的文章中也做過介紹 http://www.reibang.com/p/3ea9b33c4678

核心概念
  • 連接 Connection :1個(gè)TCP連接包含多個(gè)Stream。
  • 數(shù)據(jù)流 Stream :一個(gè)雙向通訊數(shù)據(jù)流兑徘,包含1條或多條 message刚盈。
  • 消息 Message :對(duì)應(yīng)HTTP/1 中的請(qǐng)求或者響應(yīng),包含一個(gè)或者多條 Frame
  • 數(shù)據(jù)幀 : 最小單位挂脑,以二進(jìn)制壓縮格式存放 HTTP/1 中的內(nèi)容藕漱。
    http2

    一個(gè)消息是由 Headers 幀和DATA 幀組成的。
    消息的組成

    流最域,消息谴分,幀 之間的關(guān)系
    流,消息镀脂,幀 之間的關(guān)系

抓包可以看到 1號(hào) Stream 流 傳遞了 一個(gè) GET 請(qǐng)求牺蹄。1號(hào) Stream 流也進(jìn)行了回復(fù)(HEADER+DATA)


http2抓包

在一條 Connection 中,不同的流可以穿插傳遞薄翅,但是同一條流的達(dá)到順序必須是有序的沙兰,比如1號(hào)流氓奈,流內(nèi)的 幀必須有序。
這就是傳輸中無序鼎天,接收時(shí)組裝舀奶。

多路復(fù)用

幀格式

每個(gè)幀標(biāo)準(zhǔn)為9個(gè)字節(jié) (可理解為幀頭)

幀格式

幀中指明了其所屬于哪一個(gè) Stream流 (Stream Identifier)其占了31 位。
由此可見斋射,一個(gè)幀中最重要的就是 Stream Id 了育勺。其余的內(nèi)容為

  • Length : 代表整個(gè) frame 的長(zhǎng)度,用一個(gè) 24 位無符號(hào)整數(shù)表示
  • Type : 定義 frame 的類型罗岖。幀類型決定了幀主體的格式和語義涧至,如果 type 為 unknown 應(yīng)該忽略或拋棄。
  • Flags :是為幀類型相關(guān)而預(yù)留的布爾標(biāo)識(shí)南蓬。標(biāo)識(shí)對(duì)于不同的幀類型賦予了不同的語義赘方。
  • R: 是一個(gè)保留的比特位。這個(gè)比特的語義沒有定義弱左,發(fā)送時(shí)它必須被設(shè)置為 (0x0), 接收時(shí)需要忽略。
  • Frame Payload : 是主體內(nèi)容科贬,由幀類型決定

下圖為wireshark中抓取的幀泳梆,上述的幀格式可以對(duì)比找到


wireshark中的幀

正是將每一個(gè)幀關(guān)聯(lián)到流上。才實(shí)現(xiàn)了多路復(fù)用胞皱。這個(gè)多路復(fù)用指的是很多個(gè)流之間的幀隨意穿插反砌。比如客戶端收到 1流的 1 幀宴树,又收到了 2流的3幀,再收到了3流的4幀,1流的2幀,1流的3幀,3流的5幀。
注意壁榕。相同的流之內(nèi),其幀必須是按順序的喳篇。
看一下下面的圖奏黑。還是之前的抓包圖


http2抓包

有沒有發(fā)現(xiàn)除了 0 幀之外蹂匹,為什么沒有偶數(shù)幀吊骤?1,3眷细,5 。鹃祖。溪椎。
這就是因?yàn)?由客戶端發(fā)起的連接,必須是奇數(shù)流恬口。服務(wù)端發(fā)起的必須是偶數(shù)流
一般服務(wù)端推送算作是服務(wù)端發(fā)起的連接校读,也就會(huì)出現(xiàn)偶數(shù)流了。

要想實(shí)現(xiàn)并發(fā)祖能,其實(shí)就是建立多個(gè)流歉秫。因?yàn)閱蝹€(gè)流因?yàn)楸仨氻樞虬l(fā)送,所以沒有辦法做到并發(fā)养铸。

  • 流狀態(tài)管理的約束性規(guī)定
    • 新建立的流ID必須大于曾經(jīng)建立過狀態(tài)為opened 或者 reserved 的流ID雁芙。
    • 在新建立的流ID發(fā)送幀時(shí),意味著更小ID為idle的流就必須置為closed了钞螟。
    • Stream ID 不能復(fù)用兔甘,長(zhǎng)連接耗盡的ID,只能通過重新建立TCP連接了筛圆。

Stream ID 為 0 的幀 是 控制幀裂明,如setting,window_update太援,ping等幀闽晦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市提岔,隨后出現(xiàn)的幾起案子仙蛉,更是在濱河造成了極大的恐慌,老刑警劉巖碱蒙,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荠瘪,死亡現(xiàn)場(chǎng)離奇詭異夯巷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哀墓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門趁餐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人篮绰,你說我怎么就攤上這事后雷。” “怎么了吠各?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵臀突,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我贾漏,道長(zhǎng)候学,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任纵散,我火速辦了婚禮梳码,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伍掀。我一直安慰自己边翁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布硕盹。 她就那樣靜靜地躺著,像睡著了一般叨咖。 火紅的嫁衣襯著肌膚如雪瘩例。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天甸各,我揣著相機(jī)與錄音垛贤,去河邊找鬼。 笑死趣倾,一個(gè)胖子當(dāng)著我的面吹牛聘惦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播儒恋,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼善绎,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了诫尽?” 一聲冷哼從身側(cè)響起禀酱,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎牧嫉,沒想到半個(gè)月后剂跟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體减途,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年曹洽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鳍置。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡送淆,死狀恐怖税产,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坊夫,我是刑警寧澤砖第,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站环凿,受9級(jí)特大地震影響梧兼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜智听,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一羽杰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧到推,春花似錦考赛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捣卤,卻和暖如春忍抽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背董朝。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工鸠项, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人子姜。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓祟绊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親哥捕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牧抽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容