首页/网络/抓包与流量分析速查/ALPN 协商结果判读
应用层报文判读71 条

ALPN 协商结果判读

ALPN 决定这层 TLS 上跑什么协议(h2/http1.1):客户端提供列表、服务端选定一个,选错会导致协议行为与预期不符。

协商决定上层跑什么协议

应用层协议协商在握手中完成:客户端给出一份候选协议列表,服务端从中选一个并在自己的握手报文中确认。选中结果决定了后续报文按哪个协议解析,也决定了抓包工具用哪套解码器。常见的取值是 HTTP/2 与 HTTP/1.1。判断时要以服务端确认的那一项为准——客户端的列表只表达意愿;双方没有交集时,握手可能直接失败,也可能按实现回落到默认协议。

基本信息

适用平台Wireshark / tshark 解析的 TLS 握手
字段tls.handshake.extensions_alpn_str
常见取值h2、http/1.1
判读要点只有服务端确认的取值才是最终结果

典型使用场景

  • 页面实际走的是哪个协议版本,确认与预期是否一致
  • 改造升级后验证是否真的切换到新协议
  • 排查抓包工具按错误协议解析导致的字段缺失
  • 对比不同客户端的协议支持能力
  • 定位中间设备改写协商结果造成的行为不一致
  • 为性能对比测试固定协议版本提供依据

观察要点

观察要点
tls.handshake.extensions_alpn_str contains "h2"
# 客户端握手: 候选列表,例如 [h2, http/1.1]
# 服务端握手: 确认选中的一项,例如 [h2]
# 无交集时可能握手失败,也可能回落到默认协议
# 抓包工具的解析层次按协商结果自动选择,选错会导致字段读不到

观察项逐项读法

观察项含义异常表现
客户端候选列表支持的协议意向列表缺失说明客户端未声明
服务端确认项本次最终使用的协议与列表无交集会出现回落或失败
后续报文解析按确认项选择的解码方式解码不符说明协商结果被改写
协议版本与表现是否与业务预期一致不一致需查中间设备或配置
抓包工具会根据协商结果自动选择解析层次,若协商字段被改写,后续解码可能整段读不到,遇到「字段突然都没了」先查这里。
中间设备改写协商结果会造成前后端对协议认知不一致,表现为部分请求行为异常而非全部失败。

易错点

  • 把客户端候选列表当结果:列表只是意向,服务端确认项才是最终协议
  • 协商字段被改写仍按原协议分析:解码层次错位会导致后续字段全部读不到
  • 忽略无交集时的回落行为:部分实现会静默回落到默认协议,现象与配置不符
  • 只在单侧抓包判断协商结果:中间设备可能改写,必须以接收侧看到的为准

数据来源与参考

  • RFC 7301(ALPN)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌