1

RFC2464中,以太网 IPv6 组播地址的前缀定义为33:33,但是当我在 Wireshark 中捕获一些数据包时,我发现这个前缀实际上是实现为33:33:ff

比如发送ICMPv6 Neighbor Solicitation报文时,我抓到的目的mac地址是33:33:ff:f8:67:0d,目的IP地址的最后几位是...:d3f5:31f8:670d。按照 RFC2464,mac 地址应该是33:33:31:f8:67:0d.

那么这个 RFC 被弃用了吗?我应该如何在我的程序中实现它?

4

1 回答 1

1

您正在查看请求的节点多播地址。您正在尝试将节点的 IPv6 单播地址直接转换为以太网 MAC 地址,但您缺少中间步骤。要获取多播 MAC 地址,您首先将节点的单播 IPv6 地址转换为请求的节点多播 IPv6 地址,如RFC2373 的第 2.7.1 节所述。然后,您将获得与该 IPv6 多播地址相对应的多播 MAC 地址,如RFC2464 的第 7 节所述

一个例子:让我们从 IPv6 address 开始2001:db8::d3f5:31f8:670d。相应的请求节点 IPv6 多播地址是ff02:0:0:0:0:1:fff8:670d。然后应用该算法来获取 的多播 MAC 地址33:33:ff:f8:67:0d

不过,在应用程序中,您不必担心邻居发现。那是操作系统的工作。在应用程序中使用多播时,您应该只绑定/订阅 IPv6 多播地址,操作系统会将发往该多播地址的所有数据包传送到您的应用程序。如果您在不同的 LAN 上进行多播,这将涉及主机和多播路由器之间的MLDv2 (多播侦听器发现版本 2)等其他协议以及多播路由器之间的PIM-SM(协议独立多播 - 稀疏模式)等多播路由协议。

于 2013-04-18T09:44:23.997 回答