如果没有单播第 2 层地址,IPv4 ARP 和 IPv6 NDP 都不能使用单播。IPv4 ARP 使用广播,但广播效率低且存在安全隐患,因此从 IPv6 中被淘汰。IPv6 大量使用多播。
在第 2 层,NDP 使用基于第 3 层地址的最后 24 位的多播,因此,与中断LAN 上所有主机的 ARP 广播不同,多播 NDP 将中断很少(可能只有一个)主机。
IPv6 会自动为接口上配置的每个单播地址订阅请求节点组播地址,因此如果每个单播地址的接口上的接口 ID 相同,则只需要订阅一个请求节点组播地址。
NDP 多播很可能只会中断 LAN 上的单个主机。相比之下,IPv4 ARP 广播会中断LAN 上的每个主机。广播要求每个主机检查广播以检查广播是否适合它,而多播可以在接口处丢弃,不会中断主机。
编辑:
虽然 ARP 是独立于 IPv4 的进程,但 NDP 是 IPv6 的一部分。
ARP 使用必须发送到 LAN 上所有主机的广播。ARP 是在 IPv4 多播之前设计的,因此它使用广播。广播效率低下且存在安全风险,因为所有广播都必须向上发送到所有主机的网络堆栈中进行检查,但是现代网络接口可以在接口硬件处停止多播,然后再将其发送到网络堆栈(“现代以太网控制器过滤器收到数据包以减少 CPU 负载,方法是在表中查找多播目标地址的散列,由软件初始化,该表控制多播数据包是丢弃还是完全接收。 ")。
IPv6 已经消除了广播,并且大量使用了多播。如果在定义 ARP 时已经存在 IPv4 多播,那么 IPv4 多播将是 ARP 的理想选择,但请记住,ARP 是事后才加入的,而 NDP 从一开始就被设计到 IPv6 中。
作为一个单独的进程,ARP 不使用 IP 数据包,但有自己的 EtherType 和数据包格式,可以将其发送到与 IP 不同的进程,因此 ARP 没有具有目标 IPv4 地址的 IP 数据包。NDP 是 IPv6 的一部分,因此它是一个带有目标 IPv6 地址的 IP 数据包。这似乎是问题混乱的症结所在。
IPv6 不仅允许在一个接口上使用多个单播地址,而且几乎肯定会拥有。接口上的每个单播地址都将订阅与 IPv6 单播地址对应的请求节点多播组。IPv6 最初的想法是接口上配置的各种单播地址通常具有相同的接口 ID,因此您实际上将只有一个请求的节点多播组用于该接口,因为每个 IPv6 单播地址的最后 24 位将是相同的。随着默认使用随机寻址和隐私扩展,这已经分崩离析。
在任何情况下,IPv6 或其他一些进程都必须订阅多播组,以便接口卡被配置为允许发往相应的第 2 层多播组的流量。如果 IPv6 没有为其单播 IPv6 地址订阅请求的节点多播组,则网络接口将丢弃发往那些未订阅的请求节点多播组的多播帧,并且 IPv6 将永远不会看到 NDP 数据包。
作为请求节点多播组的目标地址采用特殊格式,它将允许 IPv6 将数据包直接发送到订阅该多播组的 IPv6 的 NDP 部分。