在RFC2464中,以太网IPv6组播地址的前缀被定义为33:33,但当我在Wireshark中捕获一些数据包时,我发现这个前缀实际上被实现为33:33:ff。
例如,在发送ICMPv6邻居请求数据包时,我捕获的目标mac地址是33:33:ff:f8:67:0d,目标IP地址的最后一位是...:d3f5:31f8:670d。作为RFC2464,mac地址应该是33:33:31:f8:67:0d。
那么这个RFC是否被弃用了?我应该如何在我的程序中实现它?
发布于 2013-04-18 17:44:24
您正在查看请求的节点组播地址。您正在尝试将节点的IPv6单播地址直接转换为以太网MAC地址,但在这两者之间缺少一个步骤。要获得多播IPv6地址,首先要将节点的单播IPv6地址转换为被请求节点的多播MAC地址,如section 2.7.1 of RFC2373中所述。然后,您将获得与该IPv6组播地址相对应的组播MAC地址,如section 7 of RFC2464中所述。
例如:让我们从IPv6地址2001:db8::d3f5:31f8:670d开始。对应的被请求节点IPv6组播地址是ff02:0:0:0:0:1:fff8:670d。然后应用该算法获得33:33:ff:f8:67:0d的组播MAC地址。
但是,在应用程序中,您不应该担心邻居发现。这是操作系统的工作。在应用程序中使用多播时,您只需绑定/订阅IPv6多播地址,操作系统就会将发往该多播地址的所有数据包发送到您的应用程序。如果您在不同的LAN上进行多播,这将涉及主机和多播路由器之间的其他协议,如MLDv2 (多播侦听器发现版本2),以及多播路由器之间的多播路由协议,如PIM-SM (协议独立多播-稀疏模式)。
https://stackoverflow.com/questions/16078684
复制相似问题