首页/网络/抓包与流量分析速查/TCP MSS 协商与影响
TCP 流分析82 条

TCP MSS 协商与影响

MSS 在握手中声明单段可承载载荷上限(不含 IP/TCP 头):隧道/PPPoE 会压小 MSS,过小影响吞吐,过大导致分片或丢包。

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 与窗口缩放常出现在同一个握手选项区,核对时一并查看更省事。

易错点

  • 把 MSS 当路径 MTU 判断:两者定义不同,结论会因此错误
  • 两端声明不一致时按较大值估算:实际生效的是较小值
  • 在瓶颈之前的位置抓包核对 MSS,看不到中间设备的钳制结果

数据来源与参考

  • RFC 9293(MSS 选项)
  • RFC 6691(MSS 计算)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌