6.幀型別
7.settings 幀抓包分析
這篇文章通過wireshark
抓包工具逐步分析http/2
協議中幀(frame)
、訊息(message)
、流(stream)
三者之間的關係,加深對http/2
協議的理解。
tips:圖中stream
表示多個資料流,它們可以源源不斷地併發傳送,同乙個stream
流中的frame
資料是序列傳送的。5.1 實現多路復用
5.2 同一組 stream 流資料示意圖
下面展示的是同一組
stream id
值為3
的headers
幀資料:5.3 推送依賴性
tips:5.4 流狀態約束幀型別stream id
為0
的流僅用於傳輸控制幀。型別編碼
含義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:心跳往返都是7.1 settings 幀型別ping
,websocket
中往返心跳對應ping
、pong
。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:從圖中可以看出客戶端7.3 抓取服務端首次 settings 幀settings - max concurrent streams : 1000
表示客戶端允許的最大併發stream
數量是1000
,。下面抓取
http/2
握手之後服務端傳送的首次settings
幀資料分析:tips:從圖中可以看出服務端的掃碼關注愛因詩賢settings - max concurrent streams : 128
表示服務端允許的最大併發stream
數是128
,settings - 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...