IPV6邻居发现协议(NDP)

概述

       NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协议,并对它们作了改进。作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不可达检测、重复地址监测、地址自动配置等功能。

地址解析

        地址解析是一种确定目的节点的链路层地址的方法。NDP中的地址解析功能不仅替代了原IPv4中的ARP协议,同时还用邻居不可达检测(NUD)方法来维护邻居节点之间的可达性状态信息。

无状态地址自动配置

      NDP中特有的地址自动配置机制,包括一系列相关功能,如路由器发现,接口ID自动生成,重复地址检测等。通过无状态自动配置机制,链路上的节点可以自动获得IPv6全球单播地址。

路由器发现

      路由器在 与其相连的链路上发布网络参数等信息,主机捕获次信息后,可以获得全球单播IPv6地址前缀、默认路由、链路参数(链路MTU)等信息。

接口ID自动生成

       主机根据EUI-64规范或其他方式为接口自动生成接口标识符,转换过程如下:

1、对于一个MAC地址,由两部分组成,24位的公司的ID(由IEEE唯一分配),24位公司的扩展ID(公司自己编制),联合产生全球唯一的48位MAC地址(也称IEEE 802地址),如下:

ccccccUG cccccccc cccccccc  xxxxxxxx xxxxxxxx xxxxxxxx

|      24位IEEE分配       ||     24位厂商自己编制    |

注:第一字节的第7位称为U/L位,表示此地址是全球管理还是本地管理。如果为0就为全球管理,为1就为本地管理。

第一字节第8位称为I/G为,表示此地址是单播地址还是组播地址。如果为0就为单播地址,为1就为组播地址。

2、先将此48位MAC地址公司ID和公司扩展ID之间插入特定16位值0xFFFE,形成64位的EUI-64地址,如下:

ccccccUG cccccccc cccccccc 11111111 11111110  xxxxxxxx xxxxxxxx xxxxxxxx

             |       24位IEEE分配      |       FFFE      |      24位厂商自己编制     |

3、再将EUI-64地址的第一字节第7为反转,形成IPV6地址的接口ID,加之IPV6前缀形成完整的IPV6地址。

4、实例:

      a. MAC地址为 00-AA-00-3F-2A-1C

      b.转换EUI-64为 00-AA-00-FF-FE-3F-2A-1C

      c.第一个字节为0000 0000,第7为反转为0000 0010转换16进制为0x02。

      d.得到结果为02-AA-00-FF-FE-3F-2A-1C,转换为ip6表示格式为2AA:FF:FE3F:2A1C

5、link-local 地址也是通过此方法获取。

注:地址范围性质不变。

       在MAC地址中,第7比特为1表示本地管理,为0表示全球管理在EUI-64的ipv6地址格式中,第7位为0表示本地管理,为1表示全球管理为每个网卡生成一个Link-Local的IP地址,简单点说就是一个固定的前缀加上mac地址,由于mac地址全球唯一,所以这样构成的IP地址是唯一的,有了这个地址后,就可以局域网进行通信了,但是这种地址路由器是不会转发的。

重复地址检测

       根据前缀信息生成IPv6地址或手动配置IPv6地址后,为保证地址的唯一性,在这个地址可以使用之前,主机需要检验此IPv6地址是否已经被链路上的其他节点所使用。

前缀重新编址

       当网络前缀变化时,路由器再与其相连的链路上发布新的网络参数信息,主机捕获这些信息,重新配置前缀,链路MTU等地址相关信息。

路由器重定向

       当在本地链路上存在一个到达目的网络的更好地路由器时,路由器需要通过节点来进行相应配置改变。

详细介绍

IPv6地址解析

       地址解析在报文转发过程中具有至关重要的作用。当一个节点需要得到同一条链路上另外一个节点的链路层地址时,需要进行地址解析。IPv6使用NDP实现了这个功能,且有所增强。IPv6的地址解析过程包括两部分:一部分解析目的IP地址所对应的链路层地址;另一部分是邻居可达性状态的维护过程,即邻居不可达检测。

IPv6地址解析的优点

IPv6地址解析相对于IPv4的ARP解析,有以下优点:

加强了地址解析协议与底层链路的独立性

       对每一种链路层协议都使用相同的地址解析协议,无须再为每一种链路层协议定义一个新的地址解析协议。

增强了安全性

       ARP攻击,ARP欺骗是IPv4中严重的安全问题。在第三层实现地址解析,可以利用三层标准的安全认证机制来防止这种ARP攻击和ARP欺骗。

减小了报文传播范围

       在IPv4中,ARP广播必须泛滥到二层网络中每台主机。IPv6地址解析利用三层组播寻址限制了报文的传播范围,通过将地址解析请求仅发送到待解析地址所属的被请求节点组播组,减小了报文传播范围,节省了网络带宽。

IPv6地址解析过程

       在IPv6中,ND协议通过在节点间交互NS和NA报文完成IPv6地址到链路层地址的解析,解析后用得到的链路层地址和IPv6地址等信息来建立相应的邻居缓存表项。其解析过程如下图所示:


1)NodeA发送一个NS报文到链路上,目的IPv6地址为NodeB对应的被请求节点组播地址(FF02::1:FF02:B),选项字段中携带了NodeA的链路层地址00E0-FC00-0001。
2)NodeB接收到该NS报文后,由于报文的目的地址FF02::1:FF01:B时NodeB的被请求节点组播地址,所以NodeB会处理该报文;同时,根据NS报文中的源地址和源链路层地址选项更新自己的邻居缓存表项。
3)NodeB发送一个NA报文来应答NS,同时在消息的目标链路层地址选项中携带自己的链路层地址00E0-FC00-0002。
4)NodeA接收到NA报文后,根据报文中携带的NodeB链路层地址,创建一个到目标节点NodeB的邻居缓存表项。
        通过交互,NodeA和NodeB就获得了对方的链路层地址,建立其到达对方的邻居缓存表项,从而可以互相通信。
当一个节点的链路层地址发生改变时,以所有节点组播地址FF02::1为目的地址发送NA报文,通知链路上的其他节点更新邻居缓存表项。

邻居不可达检测(NUD)

       NUD(Neighbor Unreachability Detection,邻居不可达检测)是节点确定邻居可达性的过程,其检测过程如下图所示:

       在IPv6中,NDP通过在节点间交互NS和NA报文完成IPv6地址到链路层地址的解析,然后通过解析后得到的链路层地址和IPv6等地址信息来建立相应的邻居缓存表项。如图所示,NodeA的链路层地址为00E0-FC00-0001,全局地址为1::1:A;NodeB的链路层地址为00E0-FC00-0002,全局地址为1::2:B。当NodeA要发送数据报文到NodeB时,需要NDP完成地址解析过程。

        邻居可达性是单向的,如果需要达到“双向”可达,还需NodeB发送NS探测报文,NodeA给NodeB回应S标志置为的NA报文。

邻居缓存表状态

邻居可达性状态机保存在邻居缓存表中,共有如下6种状态:

(1)INCOMPLETE(未完成状态):表示正在解析地址,但邻居链路层地址尚未确定。

(2)REACHABLE(可达状态):表示地址解析成功,该邻居可达。

(3)STALE(失效状态):表示可达时间耗尽,未确定邻居是否可达。

(4)DELAY(延迟状态):表示未确定邻居是否可达。DELAY状态不是一个稳定的状态,而是一个延时等待状态。

(5)PROBE(探测状态):节点会向处于PROBE状态的邻居持续发送NS报文。

(6)EMPTY(空闲状态):表示节点上没有相关邻接点的邻居缓存表项

IPV6邻居发现协议(NDP)_第1张图片

邻居状态机

图中实线箭头表示由NS/NA报文交互导致的状态变化,各状态间的相互转换如下:

① 在EMPTY状态时,如果有报文要发送给邻接节点,则在本地邻居缓存表建立该邻接节点的表项,并将该表项置于INCOMPLETE状态,同时向邻接节点以组播方式发送NS报文。

② 节点收到邻居回应的单播NA报文后,将处于INCOMPLETE状态的邻居缓存表项转化为REACHABLE状态。如果地址解析失败(发出的组播NS超时),则删除该表项。

③ 处于REACHABLE状态的表项,如果在REACHABLE_TIME时间内没有收到关于该邻居的“可达性证实信息”,则进入STALE状态。此外,如果该节点收到邻居节点发出的非S置位NA报文,并且链路层地址有变化,相关表项会进入STALE状态。

④ 处于STALE状态的表项,当有报文发往该邻居时,这个报文会利用缓存的链路层地址进行封装,并使该表项进入DELAY状态,等待收到“可达性证实信息”。

⑤ 进入DELAY状态后,如果DELAY_FIRST_PROBE_TIME时间之内还未收到关于该邻居的“可达性证实信息”,则该表项进入PROBE状态。

⑥ 在PROBE状态时,节点会周期性地用NS报文来探测邻居的可达性,探测最大时间间隔为RETRANS_TIMER,在最多尝试MAX_ UNICAST_SOLICIT次后,如果仍未收到邻居回应的NA报文,则认为该邻居已不可达,该表项将被删除

NUD过程与地址解析过程的区别

主要不同之处在于以下两点:

(1)NUD的NS报文的目的MAC是目的节点的MAC地址;目的IPv6地址为NodeB的单播地址,而不是被请求节点组播地址。

(2)NA报文中的S标记须置位,表示是可达性确认报文,即这个NA报文是专门响应NS报文的。

无状态地址自动配置

        IPv6同时定义了无状态与有状态地址自动配置机制。有状态地址自动使用DHCPv6协议来给主机动态分配IPv6地址,无状态地址自动配置通过ND协议来实现。在无状态自动配置中,主机通过接受链路上的路由器发出的RA消息,结合接口的标识符而生成一个全球单播地址。
去状态地址自动配置有以下优点:
1)真正的即插即用。节点连接到没有DHCP服务器的网络时,无须手动配置地址等参数便可访问网络。
2)网络迁移方便。当一个站点的网络前缀发生变化,主机能够方便地进行重新编址而不影响网络连接。
3)地址配置方式选择灵活。系统管理员可根据情况决定使用何种配置方式——有状态,无状态还是两者兼容。

无状态自动配置的3种机制

路由器发现

       路由器发现是指主机定位本地链路上的路由器和确定其配置信息的过程,主要包含以下3方面内容:

(1)路由器发现(Router Discovery):主机发现邻居路由器及选择某一个路由器作为默认网关的过程。

(2)前缀发现(Prefix Discovery):主机发现本地链路上的一组IPv6前缀,生成前缀列表。该列表用于主机的地址自动配置和on-link判断。

(3)参数发现(Parameter Discovery):主机发现相关操作参数的过程,如MTU、报文的默认跳数限制、地址分配方式等信息。

重复地址检测

    DAD(Duplicate Address Detection,重复地址检测)是节点确定即将使用的地址是否在链路上唯一的过程。所有的IPv6单播地址,包括自动配置或手动配置的单播地址,在节点使用之前必须要通过重复地址检测。DAD机制通过NS和NA报文实现。节点会发送NS报文,其源地址为未指定地址,目的地址为接口配置的IPv6地址。在NS报文发送到链路上后,如果在规定时间内没有收到应答的NA报文,则认为这个单播地址在链路上是唯一的,可以分配给接口;反之,如果收到应答的NA报文,则表明这个地址已经被其他节点所使用,不能配置到接口。

前缀重新编址

     前缀重新编址(Prefix Renumbering)允许网络从以前的前缀平稳地过渡到新的前缀,用于提供对用户透明的网络重新编址能力。路由器通过RA报文中的优先时间和有效时间参数来实现前缀重新编址。

(1)优先时间(Preferred Lifetime):无状态自动配置得到的地址保持优先选择状态的时间。

(2)有效时间(Valid Lifetime):地址保持有效状态的时间。

       对于一个地址或前缀,优先时间小于或等于有效时间。当地址的优先时间到期时,该地址不能被用来建立新连接,但是在有效时间内,该地址还能用来保持以前建立的连接。在重新编址时,站点内的路由器会继续通告当前前缀,但是有效时间和优先时间将被减小到接近于0;同时,路由器开始通告新的前缀。这样,在每个链路上至少有两个前缀共存,RA消息中包括一个旧的和一个新的IPv6前缀信息。

无状态地址自动配置过程

        NDP的无状态自动配置包含两个阶段:链路本地地址的配置和全球单播地址的配置。当一个接口启用时,主机会首先根据本地前缀FE80::/64和EUI-64接口标识符,为该接口生成一个链路本地地址,如果在后续的DAD中发生地址冲突,则必须对该接口手动配置本地链路地址,否则该接口将不可用。需要说明的是,一个链路本地地址的优先时间和有效时间是无限的,永远不超时。

对于主机上全球单播地址的配置步骤如下图所示:
在这里插入图片描述
地址配置完成后,路由器可以启动NUD检测,周期性发送NS报文,探测该地址是否可达。

地址的状态及生存周期

       自动配置的IPv6地址在系统中有一个生存周期,在这个生存周期中,这个地址根据与优先时间和有效时间的关系,可以被划分为临时(Tentative),优先(Preferred),反对(Deprecated)和无效(Invalid)4种状态,如下图所示:
在这里插入图片描述

路由器重定向

       在重定向过程中,路由器通过发送重定向报文来通知链路上的报文发送节点,在同一链路上存在一个更优的转发数据报文的路由器。接收到该消息的节点据此修改其本地路由表项。路由器仅为单播数据流发送重定向报文,而重定向报文也仅以单播形式发送到始发主机,并且只会被始发节点处理。

IPV6邻居发现协议(NDP)_第2张图片

路由器重定向过程

(1)NodeA首先传送第一个数据报文到它的默认路由器RTA,当该报文经过RTB到达NodeB后,RTA知道RTB是链路上转发报文的更好选择。

(2)RTA向始发报文的NodeA发送一个ICMPv6重定向报文,目标地址中含有RTB的IPv6地址,报文选项字段的目标链路层地址中含有RTB的链路层地址。

(3)NodeA获悉RTB是到NodeB的更好路径后,修改自己的目的缓存表,当再发送到NodeB的报文时优先发送到RTB,重定向完成。

报文介绍

ICMPv6报文类型

     NDP定义了5种ICMPv6报文类型,包括RS、RA、NS、NA和Redirect报文,如下所示

ICMPv6类型

消息名称

Type=133

RS(Router Solicitation,路由器请求)

Type=134

RA(Router Advertisment,路由器公告)

Type=135

NS(Neighbor Solicitationh,领居请求) 

Type=136

NA(Neighbor Advertisement,邻居公告)

Type=137

Redirect(重定向报文)

备注: NS/NA报文主要用于地址解析,RS/RA报文主要用于无状态地址自动配置,Redirect报文用于路由器重定向。

地址解析交互报文

NS报文

      NS报文是ICMPv6中类型为135的报文,其结构如下图所示:

在这里插入图片描述
其中各字段的含义如下:
1)Target Address:待解析的IPv6地址,16types。Target Address不能是组播地址,可以是链路本地地址、站点本地地址和全球单播地址。
2)Options:地址解析中只使用了链路层地址选项(Link-Layer Address Option),是发送NS报文节点的链路层地址。链路层地址选项的格式如下图所示:

在这里插入图片描述

其中各字段含义如下:
1)Type:选项类型,在链路层地址选项中包括如下两种:

         Type=1,表明链路层地址为Source Link-Layer Address(源链路层地址),在NS,RS,Redirect报文中使用。
         Type=2,表明链路层地址为Target Link-Layer Address(目标链路层地址),在NA,Redirect报文中使用。
2)Length:选项长度,以8bytes为单位。
3)Link-Layer Address:链路层地址。长度可变,对于以太网为6bytes。

NA报文

NA报文是ICMPv6中类型为136的报文,其结构如下图所示:

在这里插入图片描述

其中各字段的含义如下:
1)R:路由器标记(Router Flag)位,表示NA报文发送者的角色,置为“1”表示发送者都是路由器,置为“0”表示发送者为主机。
2)S:请求标记(Solicited Flag)位,置为“1”表示该NA报文是对NS报文的响应。
3)O:覆盖标记(Override Flag)位,置为“1”表示节点可以用NA报文中携带的目标链路层地址选项中的链路层地址来覆盖原有的邻居缓存表项。置为“0”表示只有在链路层地址位置时,才能用目标链路层地址选项来更新邻居缓存表项。
4)Target Address:待地址重复检测或地址解析的IPv6地址。如果NA报文是响应NS报文的,则该字段直接复制NS报文中的Target Address。
5)Options:只能是Type值为2的Target Link-Layer Address,是被解析节点的链路层地址。

地址自动配置交互报文

路由器请求报文(RS)

RS报文是ICMPv6中类型为133的报文,其结构如下图所示:

在这里插入图片描述
其中字段含义如下:
Options(选项)字段:只能是源链路层地址选项,表明该报文发送者的链路层地址,不过如果IPv6报头的源地址为未指定地址,则不能包括该选项。

路由器通告报文(RA)

RA报文是ICMPv6中类型为134的报文,其结构如下图所示:

在这里插入图片描述
其中字段含义如下:

字段    描述
Cur Hop Limit 跳数限制。协议规定默认IPv6中Hop Limit数值,若为0,表示路由器不适用该字段。设备实现中该值可配置,默认为64
M    管理地址配置标识(Managed Address Configuration)。M位为0表示无状态自动配置生成IPv6地址,如果M=1表示需要通过有状态(DHCPv6)方式获取IPv6地址。
O     其他有状态配置标识(Other Stateful Configuration)。O位为0表示除了IPv6地址以外的其他参数需要通过无状态自动配置获取,如果O=1表示除了IPv6地址以外的其它需要通过有状态(DHCPv6)方式进行获取。协议规定,若M标记置为1,则O标记也应置为1,否则无意义。
H     Home Agent,移动IPv6中定义的字段。
Prf   默认路由器优先级(Default Router Preference)
P  代理标识(Proxy)
Router Lifetime 与默认路由器关联的生存期,以秒为单位。最大值18.2小时。取0值的Lifetime指出路由器不是默认路由器并且不应当出现在默认路由器列表中,但RA报文的其他信息仍然有效。Router Lifetime仅适用于作为默认路由器的路由器应用;对包括在其他消息字段或选项中的信息不适用。需要对它们的信息规定时间限制的选项有它们自己的生存期字段。
Reacheable Time  此时间以毫秒计,在收到可达性确认后节点假定该邻居是可到达的。它由Neighbor Unreachability Detection算法使用。此值为0意味着没有(由此路由器)作出规定。
Retrans Timer 重发的Neighbor Solicitation消息间隔时间,以毫秒计。由地址解析和Neighbor Unreachability Detection算法使用。此值为0意味着没有(由此路由器)作出规定。
Options  选项字段,包含有源链路层地址选项,MTU选项,前缀信息选项,通过间隔选项,家乡代理信息选项,路由信息选项等。

选项字段中个选项的含义如下:
1)源链路层地址选项:路由器发送RA报文的接口的链路层地址。
2)MTU选项:包含了在链路上运行的链路层协议所能支持的MTU最大值。
3)前缀信息选项(Prefix Information Option):用于地址自动配置的前缀信息,可包含多个。前缀信息选项在RFC2461中定义,用于表示地址前缀和有关地址自动配置的信息,值用于RA报文中;在其他的消息中,此选项应该被忽略。其格式如下图所示:

在这里插入图片描述
其各字段的含义如下所示:

字段    描述
Type 选项类型,值为3
Length     选项长度,以8bytes为单位,值为4
Prefix Length     前缀长度,值为0-128
L     直连标记(on-link flag)。当取值为1时,表示该前缀可以作为on-link判断;否则表示该前缀不用作on-link判断,前缀本身也不包含on-link或on-off属性,默认值为1。
A     自动配置标记(Autonomous Address-configuration Flag)。当取值为1时,表示该前缀用于无状态地址配置;否则为有状态地址配置。默认值为1。
R     路由器地址标记(Router Address Flag)。用于移动IPv6(RFC3775),当取值为1时,表示Prefix字段不仅包含前缀信息,同时也包含了发送该RA报文的路由器地址。
Valid Lifetime     有效时间,表示该前缀产生的on-link地址处于有效状态的时间(单位为秒)。
Preferred Lifetime     优先时间,表示由该前缀通过无状态地址自动配置产生的地址处于优先状态的时间。
Prefix     前缀地址,长度为16bytes。该字段和Prefix Length字段一起明确定义了一个IPv6地址前缀

4)路由信息选项(Route Information Option):用于主机生产默认路由。路由信息选项在RFC4191中定义,取代了原前缀信息选项的功能。接收RA报文的主机将选项中的信息添加到自己的贝蒂路由表中,以便在发送报文时做出更好地转发决定,其个数如下图所示:

在这里插入图片描述

其中各字段含义如下所示:

字段     描述
Type     选项类型,值为24
Length    选项长度,以8bytes为单位,根据Prefix Length的长度,可取1,2,3这3个值。
Prefix Length     前缀长度,表示对路由有意义的前缀位数,值为0-128
Prf     默认路由器优先级(Default Router Preference)。
Route Lifetime     路由生命周期,表示用于路由信息选项的前缀处于有效状态的时间,当RA中的Router Lifetime = 0时,Route Lifetime也应该为0。
Prefix     前缀地址,表示有效的路由前缀,其长度由Prefix Length决定。

参考链接

IPv6知识概述 - ND协议_LEELOTOUS的博客-CSDN博客_ipv6 nd

IPv6邻居发现协议_lianliange85的专栏-CSDN博客

计算机网络 | IPv6 | 什么是IPv6_ThinPikachu的博客-CSDN博客

你可能感兴趣的:(IPV6,网络)