IPv6的组播地址(掌握IPv6通信原理的关键知识点)


在IPv4中广泛的使用单播、广播、组播的方式。而在IPv6的应用环境中,使用单播,组播、任意播的新方式,放弃广播的使用,换而言之,在IPv6的环境中不再有广播的存在。关于IPv6的单播地址,在上面的12.1的几个小节中已经做出了详细的讨论,而本小节将详细讨论IPv6的组播与任意播的使用方式。理解IPv6的组播地址有一个重要的前提:就是读者能成功的理解IPv4中D类IP(组播地址)的作用、功能与构成。否则对IPv6的组播地址学习将是“空中阁楼”。所以拥有有IPv4组播地址的基础相当重要。


学习提示:IPv6的通信过程依赖于邻居发现协议(NDP),关于这个协议将在12.3小节有详细描述,而NDP协议又是基于IPv6的组播进行工作的,所以理解IPv6的组播地址及其构造原理相当重要,希望学员重视本小节的学习


理解IPV6的组播地址

IPv6的组播地址通常是为IPv6的组播服务,而IPv6通信的核心大量的使用了组播,IPv6不再使用广播,这与IPv4的通信不同,然而要理解IPv6的组播,首先需要明白三个关键点:第一、任何节点都能够成为一个多播组成员也叫做组播组成员;第二、源节点可以发送数据包到多播组,第三、在一个多播组的节点都能收到发往该组播组的数据。

而对于IPv6组播地址是由固定的8bit地址前缀FF::/8,4bit的标志位,4bit组播范围和112bit多播组标识符(组ID)组成。如下图12.56所示。“标志”字段用于说明组播地址是“永久性(由IANA指定的一个地址)”的,还是“临时性”的。而对于该4bit标志字段,一般情况下,其高3bit位为0,剩下的低1bit位就是用于判断多播地址是“永久性”还是“临时性”。如果低1bit位为0,则表示为“永久性多播地址”,也就是一个众所周知的多播地址,如FF02::1表示在IPv6环境中一个链路上的所有计算机节点、FF02::2表示一个链路上的所有路由器节点,类似于IPv4的224.0.0.1和224.0.0.2。如果为“1”就是“临时性多播地址”。如下图12.57所示。

120554564.png

范围:指定义组播地址的范围类型,如下所示表示常见的组播地址访问以及对应的值。如果没有列举出的值表示被保留或者没有指定。

120639221.png


通过分析一个IPv6的多播地址实例来分析IPv6组播地址的构成


前面讲述描述的都是定义IPv6组播地址的概念与理论,这对于初学者永远是那么的枯燥,在这里通过分析一个IPv6的多播地址实例来分析IPv6组播地址的构成,来形象的理解IPv6的组播地址,这样也可以让初学者更好的理解。


例:分析众所周知的IPv6多播地址FF02::1的构成原理


分析:首先我们使用类似几何证明题的方法:来证明公众理论的成立与否,IPv6的组播地址:FF02::1的众所周知的作用是表示本地链路的所有接点的组播地址,换而言之,可以这样理解,如果有一个IPv6的数据报文中的目标地址是FF02::1,那么该数据将发往一个链路的所有IPv6节点上。通过上面的理论来分析该地址的构成原理。如下图12.58分析IPv6组播地址FF02::1所示,首先将FF02::1这个通过“零压缩”法表示的IPv6地址还原成标准格式的形式:FF02:0000:0000:0000:0000:0000:0000:0001;然而FF02这一段长度是IPv6的8位固定前缀+4位的标记+4位的范围所组成,也是关心的重点部分。而余下的“0000:0000:0000:0000:0000:0000:0001”是112的多播组标识符。现在将FF02部分的十六进制转换成二进数为:11111111 00000010;其中11111111表示IPv6组播地址的8位固定前缀。而00000010部分中的前4个0表示标记,后面的0010表示范围。而前面4个0000的最后一个0表示该组播地址是一个永远的IPv6组播地址,事实上的确也是这样,FF02::1是一个众所周知的IPv6组播地址。而后面的4位0010根据上面的IPv6范围表可得知表示本地链路范围,所以得出FF02::1的是表示本地链路所有接点的永远组播地址。


121742592.png

理解请求节点的组播地址

理解IPv6的请求节点组播地址非常重要,因为IPv6的请求节点组播地址提高了数据链路层地址解析的效率,在IPv4的环境中,通信需要同时获得目标主机的IP地址与MAC地址,当知道目标IP地址时会使用ARP协议去解析数据链路层的MAC地址,ARP的地址请求消息是使用广播发送的,然而在IPv6的应用环境中不再使用广播,所以放弃了ARP协议的使用,取而代之的是ICMPv6的节点请求消息,现在需要深入理解的两个问题:

n节点请求主机是如何高效率的去替代IPv4的ARP协议?

n节点请求主机是如何去实现该技术?该技术中的IPv6组播地址是如何生成的?


节点请求是如何高效率去替代IPv4的ARP协议?

如下图12.59对比IPv4与IPv6节点请求的高效性所示可看出,在IPv4环境的的ARP地址解析协议是使用目标地址为广播(255.255.255.255或者FFFF.FFFF.FFFF)将MAC地址请求消息发送到整个以太网链路上的所有主机,即便是A主机只请求D主机的MAC,B主机与C主机也同样会收到这个请求广播,从性能与效率上讲这明显不科学。所以在IPv6的环境中放弃了广播的的方式,而是采用组播方式将MAC地址的解析请求,以点对点的形式直接组播到D主机的请求节点组播地址FF02::1:FFAA:4C3E。而不再将请求消息发送到无关的主机B和主机C,所以IPv6的节点请求的确是高效率去替代IPv4的ARP协议。总而言之就是使用点到点的方式去代替广播。现在需要进一步理解的是节点请求技术是如何使用组播去完成“点对点”的通信?

121831476.png

节点请求主机是如何去实现该技术?该技术中的IPv6组播地址是如何生成的?

节点请求主机能够以一种“点对点”的形式将MAC地址请求消息发送到目标主机D,是因为D主机的请求节点组播地址FF02::1:FFAA:4C3E在整个链路上是唯一的,所以源主机可以直接将节点请求信息发到目标主机节点请求组播地址上,节点请求组播地址是提高MAC地址解析的核心技术,那么这个目标主机的节点请求组播是如何生成的?

节点请求组播的构成如下图12.60所示,该组播地址是将一个单播IPv6地址(可以是本地链路地址也可以是全球单播地址)的后24位填充到一个请求节点组播地址的124位的固定前缀FF02::1:FF中,生成一个唯一的节点请求组播地址。


121929178.png


通过分析一个IPv6的节点请求组播地址实例来分析IPv6请求节点的组播地址的构成


一台IPv6主机的本地链路地址为FECO:0000:0000:0000:0230:18FF:FEAA:4C3E,现在通过对这个地址的实践分析,来理解该地址所对应的节点请求组播地址的构成原理,如下图12.61所示。首先是还原节点请求组播地址的124位固定前缀的标准格式:“FF02:0000:0000:0000:0000:0001:FF”然后取出IPv6主机的本地链路地址FECO:0000:0000:0000:0230:18FF:FEAA:4C3E中的最后24位,填充到“FF02:0000:0000:0000:0000:0001:FF”前缀中,IPv6使用十六进制表达,那么一个十六进制字符是4个二进制位,所以需要将IPv6单播地址中的最后6个字符(二进制为24位)取下填充到124位固前缀中形成最后的地址:FF02:0000:0000:0000:0000:0001:FFAA:4C3E,最后使用“零压缩”法表示成为:FF02::1:FFAA:4C3E。

122022153.png


理解IPV6的组播地址与MAC地址的映射关系

IPv6的节点请求多播地址去替代了ARP地址解析协议的目标广播地址255.255.255.255,注意:这只能表示IPv6的节点请求从网络层上的优化与改进,在数据链路层会有什么样改进这是本小节讨论的重点。

在IPv4的ARP地址解析协议中的请求消息报文的目标链路层地址为FFFF.FFFF.FFFF哪么在IPv6中节点请求消息报文的目标链路层地址是什么?在IPv4中组播的IP地址是可以映射成为数据链路层的MAC地址,在IPv6中这个概念仍然生效,IPv6的节点请求组播地址也可以映射成数据链路层地址,具体方法如下图12.62所示组播的MAC地址是通地IPv6的组播IP地址映射而来,映射的原则是:将IPv6组播地址的后32位取出,填充到固定前缀是3333的MAC地址中来生成数据链路层地址。


122107606.png

分析一个IPv6的组播地址映射到MAC地址来理解IPv6组播地址与组播MAC地址的关系


比如一个众所周知的IPv6组播地址:FF02::1它所对应的MAC地址是什么?首先将该“零压缩”的IPv6地址还原为完整格式的IPv6地址为:FFF02:0000:0000:0000:0000:0000: 0000: 0001,然后将该地址的最后32个二进制位取出,一个十六进制位就为4个二进制位,所以最后32个二进制位就是0000:0001,将这部分填充到IPv6组播MAC的固定前缀3333,就得到FF02::1所对应的MAC地址是3333:0000:0001。具体过程如下图12.63所示。


122227473.png

注意:除了众所周知的IPv6组播所对应的MAC地址是上述构成原理以外,其它的IPv6组播(如:节点请求组播)也是相同道理,这里不再重复讲述。