Linux 会发送 ARP 免费或 ARP 探测(在 RFC 5227 中定义)

网络工程 dhcp ip arp IEEE-802.11 linux
2021-07-20 23:09:54

我做了一个实验,在使用目标 IP 之前检查 Linux 是否会发送免费的 ARP 或 ARP 探测。

实验场景如下:

有两台 Linux 计算机,都连接到同一个 AP。我先连接了一个并使用ifconfig wlan0 192.168.1.30(这是另一台 Linux 计算机的默认 IP 地址)静态设置 IP 地址。

然后我使用 WPA_supplicant 连接另一个,并使用它dhclient wlan0来获取 IP 地址。从嗅探器中,我没有观察到从第二台计算机发送的任何免费 ARP 或 ARP 探测。

只是想知道在什么情况下,linux计算机会发送这两个ARP请求?由于在相同条件下,我观察到我的 Windows 计算机将发送 ARP Probe 以请求 IP。

谢谢

3个回答

在设备上手动配置 IP 地址不需要设备检查地址冲突。只有当设备配置了自己的 IP 地址(DHCP 等)时,它才应该检查地址冲突。

如果您手动配置设备,您将不会看到免费 ARP,因为如果设备发现冲突,则无法更改其(或请求新的)地址。RFC 的目的是使配置自己 IP 地址的设备可以检测是否需要更改其获得的 IP 地址。它可以为 DHCP 之类的东西做到这一点,但如果您手动配置地址,则无法做到这一点。换句话说,设备必须相信你,人类,知道你在做什么,但它需要验证它自己提出的任何地址都没有被使用。

这是一个问题,Why would Linux send an ARP probe for an IP that is being locally assigned, it knows who the own of that IP will be (itself!) ?- 您正在设置 IP,因此您应该知道哪个 IP 是免费的。当您的rm -rf /Linux 不检查时,它“只是检查”,因为您应该知道执行该操作是否可以。Windows(例如)习惯于握住您的手以使其更加愚蠢(在我看来)。

在 MS DHCP 服务器的情况下,如果您在一个(我有)上运行数据包捕获,您将看到他们将在将地址出租给客户端之前 ping 一个地址,以确保它尚未被占用并且不会被占用了解它(由于另一个 DHCP 服务器或静态分配)。

在 Linux 上为接口分配 IP 时,无需发送免费 ARP。如果另一个主机想知道 IP 1.2.3.4 的 MAC,它可以发送 ARP 请求。每当接口出现时,无偿地发送 ARP 没有任何好处。

我知道我在没有确凿证据支持的情况下发表了一些声明,但是根据您的问题,您已经亲眼看到了相同的行为。这对我来说是合乎逻辑的。

Solaris 10 及更高版本支持 IPv4 的 DAD (RFC 5227),用于静态分配的 IP 地址和动态分配的 IP 地址。

NetBSD 和其他平台(例如 Ubuntu)上的 dhcp 守护进程 (dhcpd) 支持 RFC 5227。