网络设备发送 ARP 请求(操作码 1)但源 IP 为 0.0.0.0

网络工程 ip arp
2021-07-05 06:58:17

请帮助我了解我的一个网络设备的这种行为。它发送带有源 IP:0.0.0.0的 ARP 请求广播我只知道 0.0.0.0 在“ ARP 探测器”中使用,设备应该发送:-

“谁有我的IP请告诉0.0.0.0”

因为设备要确保子网中没有其他设备具有相同的 IP 以避免 IP 冲突。

但在我的情况下,设备发送 ARP 请求广播(不是 ARP 探测,因为 ARP 探测应该要求它自己的 IP)作为

“谁拥有DeviceX 的 IP,请告诉 0.0.0.0”。

该设备的 IP 配置为 10.192.34.4,因此在这种情况下,我希望它发送以下形式的请求:-

“谁有DeviceX的IP请告诉10.192.34.4 ”。

因此设备 X 应该回复 10.192.34.4 将获得它的 MAC 地址,基本的 arp 内容但是这个“0.0.0.0”是我不理解的。

谢谢

2个回答

那是一个标准的 ARP 探测(RFC 5227)——一个节点请求它打算使用的地址的 ARP 解析(并且期望没有回复)。

ARP 工作在第 2 层(以太网)之上,使用标准 IP 数据包。因此,任何响应 ARP 请求的节点都不会回复发送方协议地址 (SPA),而是回复发送方硬件地址 (SHA)。

ARP 探测使用全零发送者的地址 0.0.0.0 来避免破坏其他节点的 ARP 缓存。

这些 ARP 用于重复地址检测 (DAD)。

当 DHCP 客户端收到来自 DHCP 服务器的报价时,这很常见。

来自 DHCP RFC:RFC 2131 第 4.4.1 节

The client SHOULD perform a check on the suggested address to ensure
that the address is not already in use.  For example, if the client is
on a network that supports ARP, the client may issue an ARP request for 
the suggested request.  When broadcasting an ARP request for the 
suggested address, the client must fill in its own hardware address as 
the sender's hardware address, and 0 as the sender's IP address, to 
avoid confusing ARP caches in other hosts on the same subnet.

某些操作系统还会发送这些免费 ARP 以在静态配置时检测重复地址。该操作取决于操作系统。这篇文章已有几年的历史,但讨论了多个版本的 Windows 上的行为。

In address conflict detection, we use what is known as a Gratuitous ARP. 
When a system is configured with an IP address either manually or by 
DHCP it will send a Gratuitous ARP to insure that another node on the 
network is not already configured with this IP address.

文章继续描述在旧版本操作系统中的操作:

In Windows XP and Windows Server 2003 the Gratuitous ARP request is sent 
with the Senders MAC filled in with the MAC of the sending system and 
the Target MAC set to 0’s, but the Senders and Target IP address are 
both set to the address of the sending system. If a conflict is detected 
then the defending system replies with its IP and MAC address.

该文章随后指出该行为在更高版本的 Windows 中发生了变化。

Additionally, when a gratuitous ARP is sent by a Windows Vista or
Windows Server 2008, the following change has been made –  the SPA field 
in the initial request is set to 0.0.0.0. This way the ARP or neighbor 
caches of systems receiving this request are not updated. So, if there 
is a duplicate IP address, the receivers do not need to have their cache 
corrected.