为什么 IPv6 NS 不使用单播地址而是多播

网络工程 IPv6 联网 多播 国家发展计划
2022-02-08 14:36:37

这是为什么不在包含 NDP 邻居请求而不是请求节点多播地址的 IPv6 数据包中放入单播地址的后续内容?

接受的答案没有意义。它指出原因是我们没有将 128 位 IPv6 单播地址转换为 48 位 MAC 地址的功能,同时接受存在功能

f:128 bit IPv6 unicast address -> 128 bit IPv6 multicast address.
g:128 bit IPv6 multicast address -> 48 bit Mac.

为什么gof不能存在?

我还看到这个问题被更新为答案:IPv6 请求节点多播地址是多播 MAC 地址的基础,因此 IPv6 数据包中的目标字段需要是请求节点多播地址。但是协议设计者是否决定 ND 应该像这样工作,或者 ND 像这样工作是否有技术必要性?

所以是的,是不是因为 ND 设计师认为它应该是这种方式而没有任何逻辑必要性?

2个回答

好问题!

将 L3 目标地址设置为 mcast 地址允许使用较少的 L2 特定代码实现 NDP。

考虑到 90 年代中期,有更多的 L2 技术被广泛使用——ATM、帧中继和各种城域交换技术仍然很普遍;除了 LAN,以太网还没有占据主导地位;事实上,以太网 WAN 极为罕见,并且在当时通常作为覆盖在其他 L2 技术上实现。

如果您想发送一个 NS 数据包,您只需发送一个 L3 多播数据包,并让为每个其他 IPv6 多播数据包执行 L3 到 L2 地址转换的相同代码处理 NS 数据包的 L2 寻址。

如果 NDP 指定单播 L3 目标地址但多播(请求节点组)L2 目标,则封装 NS 数据包的过程对于这些数据包类型将是唯一的,并且也会增加 L2 特定代码的数量。

如果没有单播第 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 部分。