“网络丢包”不能直接指向交换机。数据包可能在网卡 ring buffer、内核 backlog、防火墙、qdisc、socket 队列或对端任意一层被丢弃。
建立分层证据
ip -s link show dev eth0
ethtool -S eth0 | grep -Ei 'drop|miss|error|timeout'
nstat -az | grep -Ei 'drop|retrans|error'
tc -s qdisc show dev eth0
网卡 missed 或 no_buffer 增长指向收包能力;TCP retrans 增长只说明未收到确认,不能单独证明本机丢包。qdisc drop 则通常与发送队列和整形有关。
用抓包确定边界
tcpdump -ni eth0 -w /tmp/loss.pcap 'host 192.0.2.10'
ss -mti dst 192.0.2.10
sar -n DEV,ETCP 1
在链路两端同时抓包,比较序列号和时间戳,才能判断包在哪一段消失。限制抓包范围、文件大小和持续时间,避免排障工具反过来压垮节点。
常见误判
- 用 ICMP 丢包率直接代表业务 TCP 质量
- 只在一端抓包就断定运营商丢包
- 忽略 CPU softirq、队列亲和性和容器 veth
- 清零统计计数前没有保存基线
收尾清单
修复后对照吞吐、重传、各层 drop 和业务尾延迟。将关键接口错误率按包速率归一化,避免低流量下单个错误触发噪声告警。