ping 过程未收到 icmp ping 回复,tcpdump/wireshark 检测到

ping 过程未收到 icmp ping 回复,tcpdump/wireshark 检测到

尽管我可以在 tcpdump 输出中清楚地看到响应,但我在让实际 ping 过程接收答复时遇到了问题。

我正在运行:

  • Mac OS X 10.11.4 El Capitan
  • 以 tap 接口为成员的桥接接口
  • qemu 正在运行包括操作系统

桥梁的创建如下:

sudo ifconfig bridge5 create
sudo ifconfig bridge5 10.0.0.5 netmask 255.255.255.0 up

Tap 接口是一个通塔普设备并链接到网桥,如下所示:

sudo ifconfig bridge5 addm tap0

我使用 qemu 启动我的虚拟机没有任何问题,以下是我观察到的情况:

  1. 连接到虚拟机上运行的 TCP 服务没有问题。我可以加载网页。
  2. 执行 arping 效果很好。
  3. 正常情况ping 10.0.0.42下我会得到Request timeout for icmp_seq,但是当我检查 tcpdump 输出时,我看到以下内容:

    $ tcpdump -i bridge5 -vvv
    tcpdump: listening on bridge5, link-type EN10MB (Ethernet), capture size 262144 bytes
    15:11:40.014240 IP (tos 0x0, ttl 64, id 47005, offset 0, flags [none], proto ICMP (1), length 84, bad cksum 0 (->aedd)!)
        10.0.0.5 > 10.0.0.42: ICMP echo request, id 24337, seq 8, length 64
    15:11:40.014808 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto ICMP (1), length 118)
        10.0.0.42 > 10.0.0.5: ICMP echo reply, id 24337, seq 8, length 98 (wrong icmp cksum af73 (->3b17)!)
    

我注意到此输出的一件事是校验和错误。我们在 Ubuntu 上使用这个完全相同的解决方案已经很长时间了,当我检查时,回复中也有一个 icmp 校验和错误。

有什么办法可以阻止回复到达 ping 应用程序吗?

答案1

wireshark 在接收时在防火墙之前看到数据包。这意味着防火墙或类似产品过滤了你的接收。(参考

错误的校验通常意味着tcp 校验和卸载已在网卡上启用。

TCP 校验和卸载(大量校验和错误)

有某些原因可能会导致您看到大量校验和错误。

如果您在最近的以太网 NIC 上进行捕获,您可能会看到许多此类“校验和错误”。这是因为这些 NIC 上经常实施 TCP 校验和卸载,因此对于机器传输的数据包也是如此。直到 NIC 硬件将数据包发送出去后,您的捕获工具从网络堆栈截获数据包很久之后,才会计算校验和。

由于这可能会造成混淆并且会阻止 Wireshark 重新组装 TCP 段,因此在这些情况下关闭校验和验证是个好主意。

要禁用检查 TCP 校验和有效性,请转到 TCP 首选项并取消选中校验和验证框

相关内容