ping 本地网络上不存在的主机时,接口上的 tcpdump

Lor*_*ein 4 networking linux arp ping icmp

我在服务器上静态配置了一个接口的 IP 地址:

ip addr add 10.40.0.6/16 broadcast 10.40.255.255 dev eth1
Run Code Online (Sandbox Code Playgroud)

如果我尝试 ping 网络上的机器(例如 10.40.0.1),它会失败并显示“目标主机无法访问”。

当 ping 运行时,如果我执行以下操作,我根本看不到任何活动

tcpdump -i eth1 icmp
Run Code Online (Sandbox Code Playgroud)

但是,如果我改为监听回送接口:

tcpdump -i lo icmp
Run Code Online (Sandbox Code Playgroud)

然后我看到类似的东西:

16:02:57.369632 IP 10.40.0.6 > 10.40.0.6: ICMP host 10.40.0.1 unreachable, length 92
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么 ICMP 数据包没有通过 eth1 接口显示出来?

编辑:

# ip r ls
10.40.0.0/16 dev eth1 proto kernel scope link src 10.40.0.6
Run Code Online (Sandbox Code Playgroud)

Rya*_*yan 8

如果您正在 ping 一个不存在的主机,那么 ARP 广播就会失败。Tcpdump 永远不会看到 icmp,因为 eth1 不会发送没有第 2 层目的地的单播 IP 数据包。

尝试这个:

tcpdump -i eth1 arp
Run Code Online (Sandbox Code Playgroud)

您应该会看到 ARP 解析失败。