我的理解是,使用 APIPA,当 DHCP 服务器不可用时,客户端可以自动自行配置 IP 地址和子网掩码。我知道由于多种原因,这种方法实际上并不实用,但我很好奇:协议中是否有任何内容可以检查给定的 IP 地址是否正在使用中?
例如,假设我的主机选择使用169.254.0.2
. 如果广播域中的另一台主机已经拥有该地址怎么办?我的房东甚至会在完成自我分配之前进行检查吗?
我的理解是,使用 APIPA,当 DHCP 服务器不可用时,客户端可以自动自行配置 IP 地址和子网掩码。我知道由于多种原因,这种方法实际上并不实用,但我很好奇:协议中是否有任何内容可以检查给定的 IP 地址是否正在使用中?
例如,假设我的主机选择使用169.254.0.2
. 如果广播域中的另一台主机已经拥有该地址怎么办?我的房东甚至会在完成自我分配之前进行检查吗?
两台设备为自己选择相同的 IP 几乎是不可能的。
每个设备都会选择一个地址,然后通过广播 ARP Probe 数据包来测试它是否已经在使用中。所有的冲突情况都被很好地涵盖了,例如当没有答案到达时重复请求,另一个设备对同一 IP 的 ARP 请求等。
最后,设备通过 ARP 向网络宣布其选择的 IP,由算法保证是唯一的(或几乎保证)。
有关详细信息,请参阅 包含所有 ad-hoc 网络必须遵循的标准的RFC 5227 。
链接本地地址 是该算法的一个变体,于 1998 年首次在 MacOS 9 中实现,其中每个设备都会选择一个随机地址作为第一次尝试。这里的标准是 RFC 3927。
该协议在RFC 3927中定义,第 2 节专门用于地址选择。在 2.2 小节中,您会发现: