对被请求-节点多播地址(solicited-node multicast address) 的理解

最近在学习IPv6,可能是学习的方式不对,关于 被请求-节点多播地址 迷惑了好久。经过各种查,各种搜,现在貌似对 被请求-节点多播地址 有了一些了解,写这篇博客来分享一下我关于 被请求-节点多播地址 的理解。不免会有错误,欢迎指正!

 

从字面上理解,被请求-节点多播地址,就是被请求的节点的多播地址,该节点被分配了Target地址(也就是正在被进行地址解析或者重复地址检测的地址),以该被请求-节点多播地址为目标地址(Destination Address)的IPv6数据包将被多播到这个节点。

 

       RFC 4291 IPv6寻址结构  中提到,

       Solicited-Node多播地址(被请求的节点多播地址)是作为节点的单播地址和任播地址的函数,通过计算得出的。Solicited-Node多播地址按如下方法形成:取地址(单播或任播)的低阶24位,把这些位挂到前缀FF02:0:0:0:0:1:FF00::/104上,产生从FF02:0:0:0:0:1:FF00:0000到FF02:0:0:0:0:1:FFFF:FFFF范围内的多播地址。

       例如,对应IPv6地址4037::01:800:200E:8C6C的Solicited-Node多播地址是FF02::1:FF0E:8C6C。仅高阶比特不同的IPv6地址(例如,由于与不同聚合关联的多个高阶前缀)将映射到相同的Solicited-Node地址,由此减少了节点必须加入的多播地址数目。

       要求节点,为所有单播地址和任播地址(它们已经通过手工或自动配置给节点的接口),计算并加入(在适当的接口上)关联的Solicited-Node多播地址。

       我的理解:因为所有的Solicited-Node多播地址的前缀都是相同的,只有最后24位不同,而最后24位取自单播或者任播地址的最后24位。并且,按照规定,单播地址或任播地址的后64位除特殊情况必须是该接口的接口标识符(Interface Identifier,Interface ID)。所以,这24位实际就是取自于64位接口标识符的后24位,也就是说,一般情况下,特别强调是一般情况下,一个接口,无论配置了多少IPv6地址,这些地址对应的 被请求-节点多播地址是相同的且只有一个,所以仅仅需要加入一个多播地址。

举个例子,如果某接口被分配了两个IPv6地址前缀,分别为4037::/64和4038::/64,并且该接口的接口标识符(Interface ID)为01:800:200E:8C6C,则该接口的两个IPv6地址为4037::01:800:200E:8C6C,4038::01:800:200E:8C6C。根据被请求-节点多播地址的形成方法,这两个地址被映射到相同被请求-节点多播地址 FF02::1:FF0E:8C6C。如果这时某个节点要对4037::01:800:200E:8C6C或者4038::01:800:200E:8C6C地址做地址解析而发送邻居请求(NeighborSolicitation)消息,那该消息的Destination Address总是该被请求-节点多播地址,也就是 FF02::1:FF0E:8C6C。

       RFC 4861 IPv6邻居发现  中规定,在节点进行地址解析时,要将邻居请求(NeighborSolicitation)消息发送到请求目标地址的  被请求-节点多播地址

      

       RFC4862 无状态地址自动配置 中规定,在节点执行 重复地址检测(DuplicateAddress Detection) 时,要将邻居请求(NeighborSolicitation)消息发送到请求目标地址的  被请求-节点多播地址

 

       RFC2464 在以太网上传输IPv6数据帧 中规定,IPv6多播地址在以太网中将被映射为,前16比特为0x3333,后32比特为IPv6多播地址的后32位。

 

      

       所以,我认为,整个过程是这样的:

      ①当一个接口配置一个IPv6地址时,它同时根据该地址计算出自己应该加入的被请求-节点多播地址,并根据 组播侦听发现协议(MLD)或者 组播侦听发现协议第二版 (MLDv2)加入该 被请求-节点多播地址 多播组。从此,在数据链路层,该节点在收到目的MAC地址为根据该被请求-节点多播地址映射成的MAC地址时,将认为这个包是发送给自己的,并接收并处理这个组播数据包。在网络层,该节点在收到目的IP地址为该被请求-节点多播地址的数据包时,将认为这个包是发送给自己的,接收并处理这个组播数据包。

      

       ②当一个节点想要发送目标地址为被请求-节点多播地址 的数据包时,该数据包在经过本地网卡的数据链路层时,目标MAC地址被设置为根据该被请求-节点多播地址映射成的MAC地址。该数据包都将被交换机根据MLD Snooping技术生成的 组播转发表,将该数据包转发给该被请求-节点多播地址多播组的每一个成员。


       ③当该被请求节点收到此数据包时,节点的网卡发现该数据包的目的MAC地址为该节点的被请求-节点多播地址映射成的MAC地址(或之一),则处理这个数据包,检验合法性后交由网络层进行处理,而不是丢掉。网络层在收到这个数据包后,发现该包的目的IP地址为该节点的被请求-节点多播地址(或之一),则认为该包是发给自己的,并进行处理。至此,被请求的节点正常地收到并处理了这个数据包。


 

  • 11
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值