ARP 探测和 ARP 公告。这两者都用于称为重复地址检测的过程中。
其想法是,如果主机获取并使用恰好已在网络上使用的 IP 地址,则会导致两者的连接问题 主机。因此,主机在使用 IP 地址之前先对其进行测试以确保它确实是唯一的是有益的。
确定 IP 地址是否正在使用的一种方法是使用 ARP。或者具体来说,ARP 探针。
该过程非常简单,发送一些 ARP 探测(通常为 3 个),如果没有人响应,则通过 ARP 公告正式声明 IP 地址。
ARP 探测和 ARP 公告均以广播帧的形式发送 - 使用 ffff.ffff.ffff
两者都是在没有请求的情况下发送的,因此它们是“无偿的”。但从技术上讲,它们与免费 ARP 并不完全相同。
稍后我们将查看数据包结构,它们将准确揭示 ARP 公告和 ARP 探测与免费 ARP 的不同之处——尽管经常被错误地称为相同的。
ARP 探测数据包结构
ARP 探针的目的是轮询网络以验证 IP 地址是否已被使用。
发送时,操作码字段设置为1
,表示 ARP 请求。这个想法是如果相关IP地址已被使用, ARP 探测的发起者将期望原始所有者的响应。因此,此 ARP 探测是一个可能会提示响应的请求。
发送方 MAC 地址设置为发起方的 MAC 地址。 发件人 IP 地址设置为 0.0.0.0
。
目标 MAC 地址设置为 0000.0000.0000
,目标 IP 地址设置为正在探测的 IP 地址。
注意数据包中没有提供完整的映射。发件人 IP 设置为全零,这意味着它无法映射到发件人 MAC 地址。目标 MAC 地址全为零,这意味着它无法映射到目标 IP 地址。
这是有意为之,因为发送 ARP 探测的原因是防止 IP 冲突。 如果目标 IP 地址已被使用,则网络上的其他主机非常不希望根据 ARP 缓存的内容无意中更新其 ARP 缓存。 ARP 探针。
这也是 ARP 探针和 免费 ARP 之间的主要区别。免费 ARP 意味着更新网络上的所有 ARP 缓存,而 ARP 探针会故意阻止 ARP 缓存更新,以继续防范 IP 地址冲突。
ARP公告包结构
如果 ARP 探测器没有从可能已经使用该 IP 地址的任何人那里生成响应,发起主机将认为该 IP 地址是唯一的,并将发送 ARP 公告以正式“声明”网络上的 IP 地址。
ARP 公告非常类似于免费 ARP,但有一个值得注意的例外:
ARP 公告中的Opcode设置为1
,表示请求。典型的免费 ARP 会将 操作码设置为 2。
除此之外,数据包结构与上面的 ARP 探针相同,只是存在完整的映射。 发送方 MAC 地址和 发送方 IP 地址都会创建完整的 ARP映射,网络上的主机可以在其 ARP 表中使用这对地址。
与 免费 ARP 一样,目标 MAC 地址被忽略,在本例中它被设置为 0000.0000.0000
,ARP 公告的某些实现使用 ffff.ffff.ffff
代替。
最后,目标IP再次确认通信的主题:IP地址的唯一性现已得到确认。
ARP 公告再次非常类似于免费 ARP,唯一的区别是 操作码字段。尽管技术上的结构不同,但它们通常都被简称为免费 ARP。然而,对于日常网络来说,这是一个微不足道的用词不当,稍微不准确有时可以节省冗长的解释。