HTTP/2 统计看什么
HTTP/2 把多个请求复用到一条 TCP 连接上,传统的「一个请求一条连接」视角失效:连接级的重传与拥塞会影响该连接上所有请求。统计入口把流数量、帧类型分布与设置参数汇总出来,用来回答两类问题——一条连接上到底跑了多少请求,以及帧层面的交互是否健康。前提是流量已解密或本身明文。
基本信息
| 图形入口 | Statistics → HTTP/2,版本较旧时可能没有独立入口 |
|---|---|
| 前提条件 | 需要解密(配置密钥日志)或明文 h2c 流量 |
| 核心字段 | http2.streamid 标识并发流,http2.headers.* 为头部字段 |
| 连接设置 | http2.settings 给出初始窗口与并发流上限等参数 |
| 常见帧类型 | HEADERS、DATA、SETTINGS、WINDOW_UPDATE、RST_STREAM、GOAWAY、PING |
| 关联维度 | 按 tcp.stream 定位连接,再按 streamid 落到具体请求 |
典型使用场景
- 并发评估:确认网关是否真的把请求复用到少数连接上,还是频繁新建连接
- 慢请求归因:判断某个请求的延迟是自身处理慢,还是被同连接上的其他流拖累
- 网关行为核对:对照 SETTINGS 与 WINDOW_UPDATE,验证服务端流量控制参数是否符合预期
- 错误定位:统计 RST_STREAM 与 GOAWAY,区分单请求取消与整连接被关闭
- 压测复盘:对比压测前后的流数量与帧分布,评估多路复用是否达到预期
常用过滤与统计
常用过滤与统计
# 每条 TCP 连接上有多少条并发流
tshark -r a.pcap -Y 'http2' -T fields -e tcp.stream -e http2.streamid | sort | uniq -c
# 展开单条流看帧交互与头部
tshark -r a.pcap -Y 'tcp.stream == 7 && http2.streamid == 5' -V | head -60
# 统计复位流(帧类型 3)与设置帧(帧类型 4), 展开看具体字段
tshark -r a.pcap -Y 'http2.type == 3' -V | grep -i 'reset\|error' | head
tshark -r a.pcap -Y 'http2.type == 4' -V | head -40帧类型与判读
| 帧类型 | 作用 | 异常线索 |
|---|---|---|
| HEADERS | 发起请求或返回响应头 | 同一流上重复出现需确认是尾部头还是异常 |
| DATA | 承载响应体 | 大量小 DATA 帧可结合窗口判断发送受限 |
| SETTINGS | 交换连接参数 | 参数被改小可能限制并发与吞吐 |
| WINDOW_UPDATE | 补充流或连接窗口 | 频繁且数值很小说明消费端处理慢 |
| RST_STREAM | 取消单个流 | 成批出现通常是被上层主动中断 |
| GOAWAY | 关闭整条连接 | 伴随大量流中断说明服务端在收尾 |
| PING | 探测往返与保活 | 间隔过密会带来额外往返开销 |
帧数量多不等于效率低:多路复用下报文被拆成多个小帧是常态,判读重点应放在耗时、错误帧与窗口变化上,而不是帧的绝对数量。
加密的 HTTP/2 必须先解密才能看到帧级信息;只做了 TLS 解密但未配置 Wireshark 的协议关联时,可能显示为普通 TCP 流,需要检查解密配置是否生效。