3. 混杂模式与网卡卸载对抓包完整性的影响验证
为什么抓到的包会“看起来坏了”
混杂模式决定网卡是否接收目的 MAC 不是自己的帧;网卡卸载则决定校验和、分片、时间戳等工作由谁完成。两者都会改变 tcpdump/Wireshark 看到的字节流,导致“校验和错误”“分片缺失”“时间戳抖动”等假象。验证思路是:固定同一段流量,只改变一个变量,对比抓包结果。
验证方法:单变量对比
在同一台抓包机上,用同一段流量(例如 ping -c 20 加一段 curl 大文件下载)分别采集 4 组 PCAP,每次只改一个变量:
| 组别 | 混杂模式 | RX 校验和卸载 | TSO/LRO/GRO | 预期观察 |
|---|---|---|---|---|
| A | 关闭 | 开启 | 开启 | 可能漏非本机帧,校验和字段异常 |
| B | 开启 | 开启 | 开启 | 帧数完整,但校验和/分片可能失真 |
| C | 开启 | 关闭 | 开启 | 校验和恢复正常,分片仍可能被合并 |
| D | 开启 | 关闭 | 关闭 | 校验和、分片、时间戳均接近真实链路 |
关键操作与判断依据
# 查看当前网卡卸载状态
ethtool -k eth0 | grep -E "rx-checksumming|tx-checksumming|tso|gro|lro"
# 关闭 RX 校验和卸载(示例)
ethtool -K eth0 rx off
# 关闭 TSO / GSO / GRO / LRO
ethtool -K eth0 tso off gso off gro off lro off
# 开启混杂模式抓包
tcpdump -i eth0 -c 200 -w mixed_on.pcap
# 关闭混杂模式抓包
tcpdump -i eth0 -c 200 -w mixed_off.pcap
判断依据:
- 校验和:Wireshark 中若大量 TCP/UDP 校验和显示 “incorrect” 或 “unverified”,先检查 RX 卸载是否开启;关闭后若恢复正常,说明是卸载导致的假象。
- 分片:若看到超大帧(如 64KB)或分片标志异常,检查 TSO/LRO/GRO;关闭后应看到符合 MTU 的分片或正常 MSS。
- 时间戳:对比同一流量的两组 PCAP,若时间差呈固定偏移或抖动,检查时间戳源(硬件 vs 软件)是否一致。
- 混杂模式:关闭时若只看到本机 MAC 的帧,说明漏掉了经过网卡但目的 MAC 非本机的流量;开启后帧数应明显增加。
建议在实验环境中先用
ethtool -k 记录基线,再逐项关闭卸载并重新抓包,避免一次改多个变量导致无法归因。生产环境关闭网卡卸载可能增加 CPU 负载,验证完成后应根据实际需求恢复原设置,不要长期保留关闭状态。