首字节时间逐段拆解
首字节时间指的是从请求最后一个字节发出,到收到响应第一个字节之间的等待,它由连接建立、请求发送、服务端处理、首字节回传四段构成。把这四段分别算出来,才能判断接下来该查网络、查应用,还是查域名解析与 TLS 握手。
基本信息
| 适用平台 | Wireshark 的帧时间戳与自定义列 |
|---|---|
| 测量口径 | 响应首字节时刻减去请求末字节时刻 |
| 拆解前提 | 要单独拆出服务端处理段,需在服务端侧同步抓包 |
| 辅助字段 | 配合时间参考与帧间隔列读数更直观 |
典型使用场景
- 快速判断慢在哪:先算总时长,再逐段相减
- 区分网络与应用:单侧抓包只能得总和,两侧对照才能归因
- 比较不同接口:请求体大小相当时对比才有意义
- 关联前置阶段:域名解析与握手耗时属于更早的环节,单独统计
- 输出到报告:把每段实测数值写清楚,便于他人复核
拆解口径
拆解口径
# T0 = 请求最后一个字节发出的时刻
# T1 = 响应第一个字节到达的时刻
# 首字节时间 = T1 - T0
# 服务端处理 = 服务端发出首字节时刻 - 服务端收到请求时刻分段归属
| 分段 | 在哪测 | 偏慢时查什么 |
|---|---|---|
| 连接建立 | SYN 到 SYN-ACK | 网络链路与队列 |
| 请求发送 | 请求首字节到末字节 | 上行带宽与窗口 |
| 服务端处理 | 服务端收到请求到发出首字节 | 应用与下游依赖 |
| 首字节回传 | 服务端发出到客户端收到 | 下行链路与时延 |
单侧抓包只能得到首字节时间的总和。要把服务端处理这一段单独拆出来,必须在服务端侧同步抓一份,或者直接取应用日志里的处理耗时。
对比不同接口的耗时之前,先确认请求体大小相当。上传大文件与只读查询的耗时构成完全不同,直接比较会得出误导性的结论。
域名解析与建立加密连接的耗时属于首字节时间之外的阶段。排查整体加载速度时要单独统计,混在一起算会高估服务端的责任。