HTTP 2 協議(幀 訊息 流簡單的抓包分析)

2021-10-12 08:35:20 字數 3006 閱讀 2046

6.幀型別

7.settings 幀抓包分析

這篇文章通過wireshark抓包工具逐步分析http/2協議中幀(frame)訊息(message)流(stream)三者之間的關係,加深對http/2協議的理解。

tips:圖中stream表示多個資料流,它們可以源源不斷地併發傳送,同乙個stream流中的frame資料是序列傳送的。

5.1 實現多路復用

5.2 同一組 stream 流資料示意圖

下面展示的是同一組stream id值為3headers幀資料:

5.3 推送依賴性

tips:stream id0的流僅用於傳輸控制幀。

5.4 流狀態約束幀型別

型別編碼

含義data

0x0傳遞http包體

headers

0x1傳遞http頭部

priority

0x2指定stream流的優先順序

rst_stream

0x3終止 stream 流

settings

0x4修改連線或者stream流的配置

push_promise

0x5服務端推送資源時描述請求的幀

ping

0x6心跳檢測,兼具計算rtt往返時間的功能

goaway

0x7優雅的終止連線或者通知錯誤

window update

0x8實現流量控制

continuation

0x9傳遞較大http頭部時的持續幀

tips:心跳往返都是pingwebsocket中往返心跳對應pingpong

7.1 settings 幀型別

settings 幀型別

含義settings_headers_table_size(0x1)

通知對端索引表的最大尺寸(單位位元組,初始4096位元組)

settings_enable_push(0x2)

value設定為0時可禁用伺服器推送功能,1表示啟用

settings_max_concurrent_streams(0x3)

告訴接收端允許的最大併發stream數量

settings_initial_window_size(0x4)

宣告傳送端的視窗大小,用於stream級別流控,初始值2^16-1,即65535位元組

settings_max_frame_size(0x5)

設定幀的最大大小,初始值2^14,即16384位元組

settings_max_header_list_size(0x6)

知會對端頭部索引表的最大尺寸,單位位元組,基於未壓縮前的頭部

7.2 抓取客戶端首次 settings 幀

下面還是以抓取www.sina.com.cn首頁資料為例,然後使用顯示過濾器只顯示http/2部分的資料,下面抓取的是stream中首幀,客戶端握手的資料:

tips:從圖中可以看出客戶端settings - max concurrent streams : 1000表示客戶端允許的最大併發stream數量是1000,。

7.3 抓取服務端首次 settings 幀

下面抓取http/2握手之後服務端傳送的首次settings幀資料分析:

tips:從圖中可以看出服務端的settings - max concurrent streams : 128表示服務端允許的最大併發stream數是128settings - max frame size : 16777215表示服務端允許的最大幀大小16777215位元組。

掃碼關注愛因詩賢

http2協議的wireshark抓包方法

根據中大學業要求,要抓個http2的包來玩玩。但直接下個最新版的wireshark是抓不到http2的包的。因為在被解密之前,http2的包會被wireshark識別為tcp協議,因此用http2過濾器一點用都沒有。網上的教程各種胡吹,但實際解決很簡單 隨便在電腦裡創個字尾名為.log的檔案,拷貝其...

http2協議的理解

http2的優點 1.多路復用。基於同乙個連線 並行傳送多個請求。2.服務端推送。nginx還不支援。3.請求頭部壓縮。服務端和客戶端,建立連線後需要共同維護乙個頭部表。後面的請求,只需攜帶跟上一次請求不同的頭部字段資訊。4.二進位制楨。有兩種http2協議 一 瀏覽器實現的http2協議 1.必須...

HTTP2的協議協商機制

http 2 使用和 http 1.1 一樣的 http 和 https 的 url 模式。同時 http 2 和 http 1.1 也共享了相同的預設埠號 http 的 80 埠,https 的 443 埠。字串 h2c 標示執行在明文 tcp 之上的 http 2 協議 http模式 字串 h2...