背景:
在做openstack 虚拟机网络调试时,发现虚拟机之间可以Ping通,但是无法ping到网关。抓tap设备也没有icmp的报文通过。

下面我们来复原下,并且做分析:

实验环境,共两台主机:
主机名 ip
localhost 192.168.1.25
bogon 192.168.1.24

查看192.168.1.25 主机的arp
[root@localhost ~]# arp -na
? (192.168.1.23) at e8:2a:44:34:3e:f4 [ether] on ens33
? (192.168.1.22) at 94:39:e5:53:53:c0 [ether] on ens33
[root@localhost ~]#
此时我们卡电脑 在1.25上没有1.24 的arp 表。下面我们把1.24的网卡关闭,并且在1.25上ping
1.24
arp 和icmp_第1张图片

并且在1.24上抓icmp包
arp 和icmp_第2张图片

再抓arp的包

arp 和icmp_第3张图片

可以看到此时只有 arp的包,没有icmp的包。
###########
下面我们把1.24的网卡 enable
再次在1.25上ping 1.24。无疑是可以通的,下面我们看1.25的arp表
arp 和icmp_第4张图片

现在已经有了1.24的arp了。我们再次把1.24的网卡禁用掉,再次ping ,并且抓包

arp 和icmp_第5张图片

可以看到 只有请求包,没有回应包,此时我们把1.25上的1.24 的arp表清除掉

arp 和icmp_第6张图片

我们再次ping ,查看是否有icmp包
arp 和icmp_第7张图片

arp 和icmp_第8张图片

查看arp包
arp 和icmp_第9张图片

可以看到 icmp是基于 arp的包的。当没有arp表是会 先 学习 arp。然后会进行ping包