间歇丢包怎么查
间歇性丢包不能靠一次探测定论:一次十几个包的测试只能说明那一瞬间,而千分之几的丢包率就足以让吞吐明显下降、业务偶发卡顿。方法论的顺序是三步——先固定现象边界(哪些源地址、哪个机房、什么时段、是否与业务高峰同步),再用长周期探测拿到连续数据,最后把路径切成几段分别观测,夹逼出问题所在的那一段。
基本信息
| 场景 | 偶发卡顿、随机超时、重传偶发 |
|---|---|
| 工具 | 带时间戳的长跑探测、逐跳统计,配合抓包留证 |
| 平台 | Linux 与 macOS 用系统自带工具;Windows 用长 ping 与路径统计工具 |
| 原则 | 先量化再定位,不用一次快照下结论 |
| 采样要求 | 按秒记录并保留文件,采样时长以小时计 |
排查步骤
- ① 现象边界:哪些源地址、哪个机房、是否与业务高峰同步
- ② 把主观感受量化成指标:丢包率、重传数、长尾时延
- ③ 分段观测:本机到网关、网关到出口、出口到对端分别长跑
- ④ 与变更、发布、运营商事件的时间线对齐
- ⑤ 抓包验证:用序号缺口锁定丢包发生在哪一段
- ⑥ 反向复测:从对端向本端回测,确认是否单向
长周期采样
长周期采样
ping -D -n -i 1 <目标> > /tmp/longping.log 2>&1 & # 每秒一包,带时间戳长跑
ping -D -n -i 1 <网关IP> > /tmp/longping-gw.log 2>&1 & # 同时测网关,用于分段对比
tail -f /tmp/longping.log | grep --line-buffered -E 'no answer|timeout' # 实时看失败
grep -c 'no answer' /tmp/longping.log # 事后统计失败次数
grep 'no answer' /tmp/longping.log | head -20 # 看失败时刻是否集中
mtr -r -c 1000 -n <目标> > /tmp/mtr-long.log & # 逐跳长跑,定位恶化起点
tcpdump -i any -nn -W 10 -C 10 -w /tmp/loss.pcap 'host <目标>' & # 分卷抓包留证丢包形态与指向
| 形态 | 常见指向 | 验证手段 |
|---|---|---|
| 集中在业务高峰 | 链路拥塞或上联带宽不足 | 把失败时刻与流量曲线叠加 |
| 随机且短促 | 物理层误码、光衰、无线干扰 | 查接口错误计数与重传统计 |
| 周期性出现 | 定时任务、备份窗口、路由震荡 | 与定时任务和备份计划对齐 |
| 只有个别源地址复现 | 该来源所在链路或接入设备问题 | 换源地址交叉测试,分段夹逼 |
| 只有单个方向丢包 | 单向链路质量差异或路由不对称 | 两端同时长跑并比对方向 |
按秒记录并保留文件,比现场回想「刚才好像丢了一下」有说服力得多。判定线也要现实:低比例丢包就足以让传输层吞吐腰斩,不要用「丢得不多」作为忽略的理由。
分段夹逼是效率关键:本机到网关、网关到出口、出口到对端三段同时观测,出问题的那一段会明显比其它段难看,避免把整条路径都当成怀疑对象。