HTTP/2 协议(帧、消息、流简单的抓包分析)

简介: HTTP/2 协议(帧、消息、流简单的抓包分析)

这篇文章通过 Wireshark 抓包工具逐步分析 HTTP/2 协议中 帧(frame)消息(message)流(stream) 三者之间的关系,加深对 HTTP/2 协议的理解。

1.HTTP/2 核心概念

  • 连接 Connection1TCP 连接,包含一个或者多个 Stream
  • 数据流 Stream:一个双向通讯数据流,包含 1 条或者多条 Message
  • 消息 Message:对应 HTTP/1 中的请求或者响应,包含一条或者多条 Frame
  • 数据帧 Frame:最小单位,以二进制压缩格式存放 HTTP/1 中的内容。

2.帧(frame)、流(stream)、消息(message)示意图

Tips:图中 Stream 表示多个数据流,它们可以源源不断地并发传送,同一个 Stream 流中的 frame 数据是串行发送的。

3.帧头部(9字节)示意图

4.标准帧数据示意图

5.Stream ID 的作用

5.1 实现多路复用

  • 接收端的实现可据此并发组装消息
  • 同一 Stream 内的 frame 必须是有序的(同一 Stream 内的 frame 是串行的)
  • SETTINGS_MAX_CONCURRENT_STREAMS 控制着并发 Stream

5.2 同一组 Stream 流数据示意图

下面展示的是同一组 Stream ID 值为 3HEADERS 帧数据:

5.3 推送依赖性

  • 由客户端建立的 Stream ID 必须是奇数。
  • 由服务端建立的 Stream ID 必须是偶数(如服务端主动向客户端推送消息)。

Tips:Stream ID0 的流仅用于传输控制帧。

5.4 流状态约束

  • 新建立的 Stream ID 必须大于曾经建立过的状态为 openedreservedStream ID
  • 在新建立的流上发送帧时,意味着将更小 ID 且为 idle 状态的 Stream 设置为 Closed 状态。
  • Stream ID 不能复用,长连接耗尽 ID 应创建新连接。

6.帧类型

帧类型 类型编码 含义
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.SETTINGS 帧抓包分析

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 字节。


相关文章
|
4月前
|
缓存 负载均衡 网络协议
HTTP 与 SOCKS5 代理协议:企业级选型指南与工程化实践
面向企业网络与数据团队的代理协议选型与治理指南,基于流量特征选择HTTP或SOCKS5协议,通过多协议网关统一出站,结合托管网络降低复杂度,实现稳定吞吐、可预测时延与合规落地。
|
6月前
|
应用服务中间件
HTTP协议中常见的状态码
HTTP协议状态码分为1xx、2xx、3xx、4xx、5xx五类,常见状态码包括:101(请求已接受)、200(请求成功)、302(重定向)、400(请求错误)、401(未认证)、403(无权限)、404(资源不存在),以及500(服务器错误)、502(网关错误)、503(服务不可用)、504(网关超时)等。
321 0
|
6月前
|
网络协议 安全 网络安全
什么是HTTP协议
HTTP协议是超文本传输协议,基于TCP,规定了客户端与服务器端通信规则,但数据以明文传输,安全性低。HTTPS则通过SSL加密保障数据安全。两者默认端口不同,HTTP为80,HTTPS为443。HTTPS安全性更高,但消耗更多服务器资源。
238 0
|
6月前
|
数据采集 Web App开发 JSON
Python爬虫基本原理与HTTP协议详解:从入门到实践
本文介绍了Python爬虫的核心知识,涵盖HTTP协议基础、请求与响应流程、常用库(如requests、BeautifulSoup)、反爬应对策略及实战案例(如爬取豆瓣电影Top250),帮助读者系统掌握数据采集技能。
586 0
推荐一http抓包工具
http://www.ieinspector.com/httpanalyzer/
664 0
|
9月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
258 18
|
9月前
|
网络安全 开发者
如何解决HTTPS协议在WordPress升级后对网站不兼容的问题
以上就是解决WordPress升级后HTTPS协议对网站的不兼容问题的方法。希望能把这个棘手的问题看成是学校的管理问题一样来应对,将复杂的技术问题变得更加有趣和形象,并寻觅出解决问题的方式。希望你的网站能在新的学期得到更好的发展!
246 19
|
9月前
|
JSON 安全 网络协议
HTTP/HTTPS协议(请求响应模型、状态码)
本文简要介绍了HTTP与HTTPS协议的基础知识。HTTP是一种无状态的超文本传输协议,基于TCP/IP,常用80端口,通过请求-响应模型实现客户端与服务器间的通信;HTTPS为HTTP的安全版本,基于SSL/TLS加密技术,使用443端口,确保数据传输的安全性。文中还详细描述了HTTP请求方法(如GET、POST)、请求与响应头字段、状态码分类及意义,并对比了两者在请求-响应模型中的安全性差异。
885 20
|
监控 安全 搜索推荐
设置 HTTPS 协议以确保数据传输的安全性
设置 HTTPS 协议以确保数据传输的安全性
|
9月前
|
安全 网络协议 算法
HTTP/HTTPS与SOCKS5协议在隧道代理中的兼容性设计解析
本文系统探讨了构建企业级双协议隧道代理系统的挑战与实现。首先对比HTTP/HTTPS和SOCKS5协议特性,分析其在工作模型、连接管理和加密方式上的差异。接着提出兼容性架构设计,包括双协议接入层与统一隧道内核,通过协议识别模块和分层设计实现高效转换。关键技术部分深入解析协议转换引擎、连接管理策略及加密传输方案,并从性能优化、安全增强到典型应用场景全面展开。最后指出未来发展趋势将更高效、安全与智能。
384 1