MSS 是什么
MSS 是握手中双方声明的「单个报文最多承载多少载荷字节」,不包含 IP 头与 TCP 头,由本端出口 MTU 推算得出:以太网 1500 字节的 MTU 对应 1460 字节的 MSS,PPPoE 与各类隧道会先减去封装开销再声明。两端各自声明,实际生效取较小值。
基本信息
| 本质 | 单段可承载的载荷上限 |
|---|---|
| 协商位置 | SYN 与 SYN-ACK 的选项区 |
| 典型取值 | 以太网 1460、PPPoE 1452,隧道再减去封装开销 |
| 抓包字段 | Wireshark 的 tcp.options.mss_val |
| 生效规则 | 两端声明的值取较小者 |
典型使用场景
- 大包不通但小包正常时,核对握手声明的 MSS 与路径 MTU
- 隧道或 PPPoE 场景确认 MSS 是否被正确压小
- 评估跨运营商链路上的分段效率
- 排查中间设备是否改写了 MSS 选项
- 解释为何某些会话吞吐上不去但链路并未拥塞
常见取值
常见取值
以太网 MTU 1500 → MSS 1460
PPPoE 场景 MTU 1492 → MSS 1452
IPsec 或 IP 隧道 → 再减去封装开销
两端声明不一致 → 实际使用较小的一方
路径 MTU 变小时 → 依赖 ICMP 或 MSS 钳制调整字段与判读
| 观察项 | 含义 | 说明 |
|---|---|---|
| mss_val | 握手中声明的 MSS | 只出现在 SYN 与 SYN-ACK |
| tcp.len 接近该值 | 发送方用满单段 | 吞吐处于正常状态 |
| MSS 明显偏小 | 路径封装开销大 | 核对隧道与 PPPoE 配置 |
| 抓包点不在瓶颈处 | 看到的值可能已被改写 | 以瓶颈链路上的抓包为准 |
MSS 只约束单个报文的大小,不等同于路径 MTU;两者混淆会让排查方向整体偏掉。
MSS 钳制由中间设备执行,只能在钳制设备之后的抓包点上看到改写后的结果。
补充要点
- 先取握手声明的 MSS 作参考,再对照实际发送的分段长度
- 隧道叠加时每层封装都要扣减,MSS 会明显小于以太网默认值
- 路径上存在钳制设备时,两端看到的值可能并不相同
- 大包丢失而小包正常是典型症状,配合需分片的通知报文一起排查
握手声明的 MSS 只是本端能力,最终生效值取决于双方声明与路径改写的结果。
MSS 与窗口缩放常出现在同一个握手选项区,核对时一并查看更省事。