路由器发出的 ARP 请求 Target MAC = Broadcast,主机发出的 ARP 请求 Target MAC = 0?
因为RFC 826没有指定使用什么地址,但确实明确允许任何地址:
(ar$tha) 此数据包目标的硬件地址(如果已知)。
[...]
它没有将 ar$tha 设置为任何特别的东西,因为它正试图确定这个值。它可以将 ar$tha 设置为硬件的广播地址(在 10Mbit 以太网的情况下为所有广播地址),如果这对于实现的某些方面来说很方便。
所以每个实现都可以自由使用广播地址。
RFC826 由RFC 5227更新,但它不会改变这一点:
本文档不修改 RFC 826 中的任何协议规则。
它不修改数据包格式或任何
字段的含义。“数据包生成”和“数据包
接收”的现有规则仍然完全按照 RFC 826 中的规定应用。
RFC5494也没有,另一个更新 RFC826 的 RFC
关于已经包含 MAC 地址的请求,请参阅RFC5227 第 2.3 节:
2.3. 公布地址
在探测确定可以安全使用所需地址后,实现此规范的主机必须然后通过广播 ANNOUNCE_NUM ARP 通知来宣布它开始使用该地址,间隔 ANNOUNCE_INTERVAL 秒。ARP 通知与上述 ARP 探测相同,不同之处在于现在发送方和目标 IP 地址都设置为主机新选择的 IPv4 地址。这些 ARP 公告的目的是确保链接上的其他主机没有从之前可能使用过相同地址的其他主机遗留的陈旧 ARP 缓存条目。主机可以在发送两个 ARP 通知中的第一个后立即开始合法使用 IP 地址;
您的第三个问题已在此线程中得到解答:https : //networkengineering.stackexchange.com/a/28807
客户端可以通过使用已知对等体的单播轮询来刷新其 ARP 条目。我知道我的家用路由器经常这样做。每隔 30 秒左右,它就会向我的计算机发送一个单播 ARP 请求。
上面的用户 halfmetaljacket 的假设是正确的。
根据RFC1222:
单播轮询——通过定期向远程主机发送点对点 ARP 请求来主动轮询远程主机,如果 N 次连续轮询没有收到 ARP 回复,则删除该条目。同样,超时应该是一分钟的数量级,通常 N 是 2。
这是用户Eddie的一个很棒的发现


