ip route 会影响 ARP 协议吗?

ip route 会影响 ARP 协议吗?

mac0我在主机上创建了一个 macvlan 网络接口。我的 docker 容器也加入了一个与 有相同父接口的 macvlan 网络mac0

完成上述步骤后,我仍然无法从 docker 容器获取ping我的mac0ip。但是,使用以下命令向主机添加一条路由后:

ip route add <container_ip> dev mac0

我可以mac0从我的容器成功 ping ip。

在添加路由之前,我先tcpdump -i mac0 host <mac0_ip>看看发生了什么。似乎 mac0 只是没有回复 ARP 请求:

#tcpdump -i mac0 host 21.26.21.104
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on mac0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:19:51.218288 ARP, Request who-has <host_name> tell 21.26.21.102, length 28
20:19:52.219645 ARP, Request who-has <host_name> tell 21.26.21.102, length 28
20:19:53.221646 ARP, Request who-has <host_name> tell 21.26.21.102, length 28

添加路线后:

#tcpdump -i mac0 host 21.26.21.104
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on mac0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:21:46.318010 ARP, Request who-has <host_name> tell 21.26.21.102, length 28
20:21:46.318033 ARP, Reply <host_name> is-at <mac> (oui Unknown), length 28
20:21:46.318038 IP 21.26.21.102 > <host_name>: ICMP echo request, id 750, seq 1, length 64
20:21:46.318062 IP <host_name> > 21.26.21.102: ICMP echo reply, id 750, seq 1, length 64

我知道 macvlan 子接口不能直接与父接口通信。我不知道为什么 ip route 会影响我认为在 L2 网络层上运行的 ARP 协议?

答案1

ARP 不是独立协议;它被 IP 用作辅助协议,以便将第 3 层地址解析为第 2 层地址。虽然从技术上讲它是一种通用协议,但它实际上始终只用于 IPv4,几乎可以被视为 IPv4 的一部分。(为了进行比较,在 IPv6 中,ICMPv6 实现了相同的功能,这可以说是多于知识产权。

由于使用 ARP 获取 IP 配置,因此 IP 堆栈可以完全决定哪些接口应接收哪些 ARP 响应。例如,某些操作系统将响应任何接口上的任何地址的 ARP 查询,而其他操作系统则将其限制为与查询来自同一接口的地址。(在 Linux 上,您可以通过更改“arp_ignore”来选择任一行为。)

Linux 还有其他几个 ARP 限制系统控制寄存器,特别是arp_filter,如果启用,它会告诉操作系统,如果请求者的 IP 地址将通过不同的接口路由,则忽略 ARP 查询。这似乎与您的问题类似。

相关内容