TCP 选项过滤是什么
握手报文里的选项决定连接的运行参数:MSS 决定单个报文最大载荷,窗口缩放决定窗口能放大多少倍,选择性确认与时间戳影响恢复效率与时延测量。用 tcp.options 前缀可以直接过滤这些选项,排查吞吐上不去或握手参数与预期不符时特别有用。
基本信息
| 适用工具 | Wireshark 3.x / 4.x |
|---|---|
| 字段前缀 | tcp.options |
| 常见子字段 | mss_val、wscale.shift、sack_permitted、timestamp |
| 出现位置 | 仅限 SYN 与 SYN-ACK 报文 |
| 配合过滤 | tcp.flags.syn == 1 |
典型使用场景
- 核查两端声明的 MSS 是否与路径匹配
- 确认窗口缩放是否协商成功,评估吞吐上限
- 检查选择性确认是否启用,判断恢复效率
- 核对时间戳选项是否存在,影响时延测量精度
- 排查中间设备是否改写了握手选项
常用示例
常用示例
tcp.options.mss_val < 1400 # MSS 偏小的握手
tcp.options.wscale # 含窗口缩放选项
tcp.options.sack_permitted # 含选择性确认协商
tcp.options.timestamp # 含时间戳选项
tcp.flags.syn == 1 && tcp.options.mss_val # 只在握手中核对 MSS选项与异常表现
| 选项 | 含义 | 异常时的表现 |
|---|---|---|
| mss_val | 单段最大载荷 | 明显偏小说明封装开销大 |
| wscale.shift | 窗口缩放因子 | 缺失会把窗口限制在 64KB 内 |
| sack_permitted | 选择性确认协商 | 未协商时丢包恢复更慢 |
| timestamp | 时间戳选项 | 缺失影响往返时延测量精度 |
选项只出现在握手报文中,想核对参数必须先过滤出 SYN 或 SYN-ACK。
两端声明的取值可能不同,实际生效的通常是较小或受路径改写限制的那一方。
补充要点
- 把 MSS 与窗口缩放放在一起核对,能一次判断路径封装与吞吐上限
- 选项缺失不一定是故障:老旧设备与特殊链路本身可能不支持某些选项
- 中间设备改写选项会导致两端认知不一致,跨设备问题要分段抓包验证
- 握手中的选项组合是连接行为的基础,分析异常前先把它看一遍
把握手报文的选项区截图或导出,是给他人说明连接参数最直观的方式。
握手选项是连接行为的基础参数,分析吞吐与恢复问题前先把握手报文看一遍,通常能省下大量排查时间。