首页/网络/BGP 与广域网速查/TCP MSS 与建邻问题
BGP 基础与邻居89 条

TCP MSS 与建邻问题

BGP 建邻依赖 TCP:路径 MTU 异常时大尺寸 Open/Update 可能受阻,MSS 钳制与 PMTUD 是常见修复手段。

BGP 与广域网速查网络更新于 2026-10-13

MSS 与 MTU 为什么会打断 BGP

BGP 跑在 TCP 上,握手与 Keepalive 报文都很小,能顺利通过;而携带大量前缀的 Update 可能达到数千字节。若路径中某段 MTU 较小(隧道、IPsec、PPPoE 场景常见),又不允许分片、且 ICMP 需要分片报文被过滤,TCP 就会不断重传却无法送达,表现为「会话能建立、一大批量更新就卡住或断开」。

基本信息

典型症状连接建立后才断、大批量更新后中断、偶发握手失败
根因路径 MTU 变小且 ICMP 被禁,PMTUD 失效形成黑洞
处理手段在隧道或接口上钳制 TCP MSS,按最小 MTU 反推
Cisco 配置接口下 ip tcp adjust-mss <值>(不同平台命令名称可能不同)
验证手段抓包看是否出现大量重传与无回应的报文

典型使用场景

  • GRE、IPsec、VXLAN 等隧道承载 BGP:隧道封装开销使有效 MTU 变小
  • 跨运营商互联:中间存在 PPPoE 等封装,实际可用 MTU 低于 1500
  • MPLS 标签栈较深:压入多层标签后报文变长,超出口径被丢弃
  • 虚拟化环境:宿主机网卡与 overlay 层 MTU 设置不一致
  • 割接验证:把大包探测作为对等上线前的常规检查项

配置与探测

配置与探测
# 接口或隧道上钳制 MSS(值按最小 MTU 反推,例如 1400 MTU 对应 1360)
interface Tunnel0
 ip tcp adjust-mss 1360
!
# 大包探测:IPv4 头与 ICMP 头共 28 字节,1400 表示探测 1400 字节数据
ping 10.0.0.2 size 1400 df-bit repeat 5
# 若出现 % 分片被丢弃或超时,说明路径 MTU 小于该值
!
# 抓包看重传模式
tcpdump -i eth0 -nn 'host 10.0.0.2 and tcp port 179'

症状与判断

现象可能原因验证方式
小报文正常、大批更新后挂住MSS/MTU 不匹配抓包看重传与大包是否到达
会话稳定但前缀数远少于对端部分 Update 被丢弃对比两端前缀计数与抓包
偶发握手失败SYN 带选项后超过路径 MTU探测不同大小的包
隧道链路一切正常、BGP 反复超时封装开销未计入 MTU按隧道协议计算有效 MTU

排错顺序

排错顺序
# 1) 明确承载路径的实际 MTU
show interface Tunnel0 | include MTU
# 2) 用不同大小的包逐级探测
ping 10.0.0.2 size 1500 df-bit
ping 10.0.0.2 size 1400 df-bit
# 3) 抓包确认重传与 ICMP 情况
tcpdump -i eth0 -nn 'icmp'
# 4) 找到最小 MTU 后设置 MSS,并重置邻居验证
MSS 钳制只影响 TCP 会话的报文长度,不改变物理 MTU,也不会影响 ICMP 或 UDP 流量。设置值应按路径最小 MTU 减去 IP 与 TCP 头开销计算,照抄其他网络的数值往往不适用。

易错点

  • 只盯 BGP 配置不看底层 MTU:握手与更新间歇失败会让人怀疑策略,实际根因在封装与 MTU
  • MSS 值直接照抄其他网络:未按本网最小 MTU 计算,问题仍然存在或引入新的性能损失
  • 同时放宽 MSS 与关闭 PMTUD:大包继续被丢弃,重传增多但故障依旧
  • 忽略标签与隧道封装开销:多层封装下 1500 字节接口的有效载荷远小于 1460
  • 只在单侧做钳制:对端仍可能发出超长报文,双向都需要按设计核对

数据来源与参考

  • RFC 1191: PMTUD
  • 厂商: 隧道与 MSS 建议
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌