首页/网络/网络排障速查/两端对照抓包定位丢包位置

两端对照抓包定位丢包位置

定位丢包位置的标准方法:在链路两端同时抓包(同一五元组、同一时间窗),用「A 发出 / B 是否收到」的对照把问题夹逼到某一段。

网络排障速查网络更新于 2026-10-13

两端对照抓包原理

同一个包在链路不同位置上的存在性差异,就是丢包段的位置。做法是在两端(客户端网段、服务端)用相同过滤条件、覆盖同一时间窗各抓一份 pcap,然后按 TCP 序号或 ICMP 序列号对照:A 侧发出了、B 侧没收到,问题就落在 A 到 B 之间那段路径上。这个方法把「丢包在哪」从猜测变成可夹逼的结论,配合逐跳统计可继续缩小到某一跳或某台设备。

基本信息

适用场景跨机房的连接超时、大包丢失、间歇中断
前置条件两端时钟同步(NTP offset 一秒内)、过滤条件对称
常用工具tcpdump -w 落盘,事后用 Wireshark 或 tshark 解析
产出一份能说清「谁发出、谁没收到」的对照表

典型使用场景

  • 业务偶发超时但两端日志都正常:需要判定丢包发生在哪一段
  • 大包不通:一端能发出大包、另一端收不到,直接指向 MTU 或分片问题
  • 与运营商或云厂商交涉:用两端证据说明责任边界,比口头描述有效
  • 验证中间设备是否改写流量:两端 MTU、TOS、VLAN 字段对照可见改动
  • 复现间歇故障:两端同时常驻抓包,故障发生时比对时间窗

对照流程

对照流程
# 端 A(客户端侧),固定五元组与时间窗:
tcpdump -i eth0 -nn -s 0 -w /tmp/A.pcap 'host 203.0.113.10 and tcp port 443'
# 端 B(服务端侧),过滤条件与 A 保持严格对称:
tcpdump -i eth0 -nn -s 0 -w /tmp/B.pcap 'host 10.0.0.100 and tcp port 443'
# 事后按同一条件解析,先对齐时间戳再看序号:
tcpdump -nn -tttt -r /tmp/A.pcap | head -20
tcpdump -nn -tttt -r /tmp/B.pcap | head -20
# 抓包前确认两端时钟偏差:
chronyc tracking | grep -E 'System time|Leap'

对照结论

现象定位下一步
A 发出、B 未收到A 到 B 方向丢包在中间设备逐段抓包或用逐跳统计收窄
B 收到但没有响应B 端应用或本机协议栈问题查监听、连接队列、应用日志
B 响应、A 未收到B 到 A 方向丢包查回程路由与出口方向策略
两端都完整、应用仍失败应用层逻辑或超时配置看应用日志与依赖调用耗时
仅大包丢失MTU 或分片处理问题查隧道 MTU 与路径 MTU 发现
抓包范围与时长要提前算好磁盘:全量抓 10Gbps 链路十分钟就能写满数百 GB,建议用 -C 滚动并限制文件数。
两端都完整却仍失败时,别急着怀疑抓包工具:多路径(等价路由、聚合口)会让同一连接的不同包走不同路径,单点抓包本身就看不全。

易错点

  • 两端抓包条件不对称,例如只有一端限定了端口或方向,对比结果无效
  • 忽略时间同步:两端时钟差大时无法判断先后顺序,也无法对齐时间窗
  • 只在单点抓包就下结论:丢包可能发生在抓包点之后,必须两点以上才有夹逼能力
  • 忘记同步抓最大快照长度:一端按默认长度截断,另一端抓全包,比对载荷时会误判

数据来源与参考

  • RFC 9293:TCP 重传与确认机制
  • Wireshark Wiki:抓包点选择

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌