首发于IE进化论
IPv6基础篇(四):邻居发现协议NDP

IPv6基础篇(四):邻居发现协议NDP

上一期我们介绍了ICMPv6的整体介绍,本期我们将基于ICMPv6介绍IPv6体系中基础的邻居发现协议,即IPv6 ND。邻居发现协议代替了IPv4协议栈中的ARP和路由发现的功能,实现了地址解析,重复地址检测,路由器发现以及路由重定向等功能。


一、IPv6邻居发现协议使用的ICMPv6消息类型

IPv6邻居发现协议使用5种类型的ICMPv6消息类型,用来实现地址解析,重复地址检测,路由器发现以及路由重定向等功能。具体的ICMPv6的消息类型及具体作用如下:

1、ICMPv6邻居请求(Neighbor Solicitation)消息

邻居请求报文NS(Neighbor Solicitation)报文:Type字段值为135,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP请求报文。用来获取邻居的链路层地址,验证邻居是否可达,进行重复地址检测等。

2、ICMPv6邻居通告(Neighbor Adivertisment)消息

邻居通告报文NA(Neighbor Adivertisment)报文:Type字段值为136,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP应答报文。用来对NS消息进行响应。另外,当节点在链路层变化的时候主动发出NA消息,告知邻居本节点的变化。

3、ICMPv6路由器请求(Router Solicitation)消息

ICMPv6路由器请求(Router Solicitation)消息:Type字段值为133,节点启动后,通过RS消息向路由器发出请求,请求前缀和其他配置信息,用于节点的自动配置。

4、ICMPv6路由器通告(Router Advertisement)消息

ICMPv6路由器通告(Router Advertisement)消息:Type字段值为134,对RS消息进行回应。在没有抑制RA消息发布的条件下,路由器会周期性地发布RA消息,其中包括前缀信息选项和一些标志位的信息。

5、ICMPv6重定向(Redirect)消息

ICMPv6重定向(Redirect)消息:Type字段值为137,当满足一定的条件时,缺省网关通过向源主机发送重定向消息,使主机重新选择正确的下一跳地址进行后续报文的发送。


二、地址解析

获取同一链路上邻居节点的链路层地址(与IPv4的ARP功能相同),通过邻居请求消息NS和邻居通告消息NA实现。节点1要获取节点节点2的链路层地址。

节点1在向节点2发送报文之前要解析出节点2的链路层地址。地址解析的过程主要如下(我们使用HCL模拟器来模拟这个过程):

组网如下:

整体报文交互总览(NS和NA):

①节点1会发送一个NS报文,Type值为135,源地址为节点1的IPv6地址。目的地址为节点2的被请求节点组播地址,要请求的为节点2的链路层地址。同时NS的报文的Options字段中携带了节点1的链路层地址。如下图:

②节点2收到NS消息后,会回应NS消息,源地址为节点2的IPv6地址,目的地址为节点1的IPv6地址,节点2的链路层地址会被放在Option字段里。

③节点1获取到了节点2的链路层地址。

最后我们在路由器上可以查看到RouterA的IPv6地址信息和所有的邻居信息:

在Ping链路本地地址时,需要使用-i参数,来指定链路本地地址的接口。


三、重复地址检测

当节点获取到一个IPv6地址后,需要使用重复地址检测功能确定该地址是否已被其他节点使用(与IPv4的免费ARP功能相似)。通过NS和NA可以实现重复地址检测。

在进行DAD检测时,一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址(Tentative Address)。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和实验地址所对应的Solicited-Node组播组。

IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向一个自己将使用的试验地址所在的Solicited-Node组播组发送一个以该实验地址为请求的目标地址的NS报文,如果收到节点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该实验地址通讯。

DAD检测过程:

PC1的IPv6地址2000::1为新配置地址,即2000::1为PC1的试验地址。PC1向2000::1的Solicited-Node组播组发送一个以2000::1为请求的目标地址的NS报文进行重复地址检测,由于2000::1并未正式指定,所以NS报文的源地址为未指定地址。当PC2收到该NS报文后,有两种处理方法:

如果PC2发现2000::1是自身的一个实验地址,则PC2放弃使用这个地址作为接口地址,并且不会发送NA报文。

如果PC2发现2000::1是一个已经正常使用的地址,那么PC2会向该地址的ALL-NODES组播组发送一个NA报文,该消息中会包含2000::1。这样,PC1收到这个消息后就会发现自身的实验地址是重复的,从而弃用该地址。


本期先介绍到这里,下期我们继续介绍邻居发现协议,重点分析路由器发现以及路由重定向功能。

编辑于 2020-03-03 10:54