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


相关文章
|
3天前
|
算法 网络协议 安全
HTTP/2 协议的缺点是什么?
HTTP/2 协议的缺点是什么?
|
3天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
22 3
|
14天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
43 13
|
7天前
|
传感器 缓存 网络协议
CoAP 协议与 HTTP 协议的区别
CoAP(Constrained Application Protocol)协议是为资源受限的设备设计的轻量级协议,适用于物联网场景。相比HTTP,CoAP具有低功耗、低带宽占用和简单易实现的特点,支持多播通信和无连接的交互模式。
|
12天前
|
开发者
HTTP 协议请求方法的发展历程
【10月更文挑战第21天】
|
12天前
|
安全
HTTP 协议的请求方法
【10月更文挑战第21天】
|
12天前
|
缓存 安全 前端开发
HTTP 协议的请求方法在实际应用中有哪些注意事项?
【10月更文挑战第29天】HTTP协议的请求方法在实际应用中需要根据具体的业务场景和需求,合理选择和使用,并注意各种方法的特点和限制,以确保网络通信的安全、高效和数据的一致性。
|
14天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
16天前
|
网络协议 前端开发 API
HTTP 和 TCP 协议的应用场景有哪些不同
【10月更文挑战第25天】HTTP(超文本传输协议)和 TCP(传输控制协议)处于网络协议栈的不同层次,各自具有独特的功能和特点,因此它们的应用场景也存在明显的差异。
|
16天前
|
安全 前端开发 JavaScript
利用HTTP协议进行文件上传和下载的常见方法
【10月更文挑战第25天】可以利用HTTP协议方便地实现文件的上传和下载功能,满足不同应用场景下的需求。在实际应用中,还可以根据具体的业务需求和安全要求,对文件上传和下载的过程进行进一步的优化和安全处理。