中间盒改写是什么
路径上的负载均衡、代理、防火墙与安全设备可能改写 TCP 行为:剥离或重写握手选项(MSS、窗口缩放、SACK)、重算通告窗口、拆分或合并报文段,代理型设备还会终止一端连接再向另一侧重建。结果就是两端抓包对不上:同一条业务会话在客户端侧与服务器侧看到的选项、窗口甚至五元组都不一致。定位这类问题必须双侧对照,只拿到一侧数据时不要急于把差异归因成丢包,先假设路径上存在改写点。
基本信息
| 常见改写 | 选项剥离、窗口改写、ACK 节奏改变、连接重建 |
|---|---|
| 识别方法 | 两端对同一业务会话抓包逐字段比对 |
| 代理型特征 | 两侧是两条独立连接,五元组与流编号不同 |
| 关注字段 | tcp.options.*、tcp.window_size_value、tcp.stream |
| 旁证线索 | TTL 变化、RTT 分布差异 |
典型使用场景
- 排查选项消失:客户端发出了窗口缩放与 SACK,服务端侧却看不到对应选项
- 证明代理存在:用五元组与握手参数差异说明中间有会话终止设备
- 解释吞吐偏低:窗口被改写后实际可用窗口小于按链路计算的预期
- 分析确认节奏异常:确认是否由设备缓冲与延迟确认造成
- 变更评估:设备版本升级前后对比会话参数是否发生变化
双侧对照步骤
双侧对照步骤
# 1) 两侧各自定位业务会话对应的流编号(可能不同)
# 2) 对比 SYN 的选项集合:MSS、窗口缩放、SACK 许可
# 3) 对比相同数据段的窗口值是否一致
# 4) 看重传是否只在单侧出现,排除设备缓冲导致的假重传
tcp.options.mss_val # 比对 MSS 是否被改写双侧对照清单
| 对照项 | 一致说明 | 不一致说明 |
|---|---|---|
| SYN 选项集合 | 路径未做选项改写 | 存在剥离或改写设备 |
| 数据段的通告窗口 | 窗口是端到端原值 | 中间设备重算过窗口 |
| 重传分布 | 链路整体丢包 | 集中在单侧,可能是设备或本机问题 |
| 五元组与流编号 | 直连或透明转发 | 存在代理型会话终止设备 |
会话型设备两侧根本不是同一条 TCP 连接,序号与确认号不具备可比性:应当分别在两侧各自找出对应业务流,再比较参数而不是逐包对齐。
只有一侧抓包时,RTT 与 TTL 的变化可以做初步判断,但结论必须标注为推测:TTL 跨网段本来就会变化,不能单独作为证据。