理解ICMPv6前缀请求与前缀公告消息


  IPv6的地址输入过于复杂,所以很多时候都选择使无状态的路由器前缀公告的方式或者使用有状态的DHCPv6为IPv6的主机分配IP地址。IPv6地址前缀公告是指路由器在本地链路上公告自己的地址前缀,然后让IPv6主机使用前缀公告的信息结合自己的MAC地址来自动配置本地的单播IPv6地址,这将从某种程度上减小了地址配置的复杂性,并且可以保证通过前缀公告的地址是唯一的,因为MAC地址本身就是唯一的。在IPv6前缀公告消息中,路由器所使用源地址为自己的本地链路地址(以FE80::/10开始),公告的目标地址是FF02::1(表示公告给整个链路上的IPv6节点),公告消息的为ICMPv6的134类型消息。而使用本地链路地址作为公告源地址是为了让IPv6在重新链路编址时,仍然可保持地址前缀公告的功能。公告目标地址FF02::1表示只要加入了这个组播组的节点都可以获取IPV6地址前缀公告的消息,默认情况下所有IPv6接点的主机都属于这个组播组。

然而对于IPV6地址前缀公告,要了解其相关的特性。首先是IPv6地址前缀公告是属于IPv6“无状态自动配置”的机制之一,那么在默认情况下,IPv6地址公告的前缀为64位,再结合EUI-64完成IPv6的128位地址的配置。其次对于在同一链路上的路由器网络接口上需配置一个全球单播地址(以2000::/3开始)或者本地站点地址(以FEC0::/10开始)用于公布地址前缀。其三是路由公告(router advertisement)消息是周期性进行发送给组播地址,申明其地址前缀。


注意:无状态自动配置:指没有通过手工的方式获取IPv6地址,也没有通过DHCPv6获取IPv6地址,其中通过DHCPv6获取IPv6地址是典型的“有状态自动配置”,而不管是有状态配置还是无状态配置IPv6地址,该地址应该属于全球单播地址或者本地站点地址。IPv6地址前缀公告,公告的不是以FE80::/10开头的本地链路地址,而是公布全球单播地址(以2000::/3开始)或者本地站点地址(以FEC0::/10开始)的地址前缀。而本地链路地址只是作为一个源地址来传递数据。


关于IPv6地址前缀公告的过程:

如图12.88所示,在路由器上的E1/0接口上配置了一个全球单播地址2001:1::1/64。那么接下来,路由器就会周期性的向同一本地链接上(linkA)发送地址前缀公告消息,即ICMPv6类型为134的消息,并以fe80::204:27ff:fef1:71a0为IPv6源地址,目标地址为组播地址FF02::1(指向linkA上的所有IPv6主机),公告前缀为2001:1::/64。此时,当节点(如:计算机)收到该地址前缀消息后,就通过该地址前缀结合EUI-64完成IPv6地址的自动配置。


理解ICMPv6前缀请求与前缀公告消息_第1张图片

关于主动请求IPv6地址前缀公告

   面对路由器周期性的在本地链路上发送IPv6地址前缀公告消息,那么就存在一个时间的间隔。如果一个节点(如计算机)启动时,需要花一段时间去等待路由器发送的地址前缀公告消息这显然不科学。那么在这种情况下,每一个节点可以通过向目标多播地址FF02::2发送路由请求消息(ICMPv6类型133消息)到本地链路上的所有路由器,当路由器收到该请求消息后,就通过目标多播地址FF02::1把地址前缀公告消息(ICMPv6类型134消息)发送给所有节点,完成对节点IPv6地址的自动配置。

   如图12.89所示,节点(计算机)通过将本地链路地址FE80::C800:11FF:FECC:1C作为源地址向目标多播地址FF02::2的所有路由器发送路由请求消息(ICMP类型133消息)。其中,源MAC为CA:00:11:CC:00:1C(请求主机的源MAC地址),目标MAC为3333:0000:0002(目标组播地址FF02::2映射而来的组播MAC地址;关于这个的映射关系请参看IPv6的组播地址与MAC地址的映射关系部分的描述。当路由器收到该请求消息后,立即通过本地链路地址FE80::C800:3FF:FE98:1C作为源地址,向目标多播地址FF02::1(指示LinkA上的所有IPv6节点)发送地址前缀公告消息(ICMP类型134消息),其中,源MAC为CA:00:03:98:00:1C(路由器E1/0的MAC地址),目标MAC为3333.0000.0001(由IPv6组播地址FF02::1映射而来)。此时节点就可以完成自动配置IPv6地址。


理解ICMPv6前缀请求与前缀公告消息_第2张图片