邻居发现协议(Neighbor Discovery Protocol,NDP)是IPv6协议体系中最重要的基础协议之一,很多IPv6功能都依赖NDP来实现。一般说来,NDP可以实现的功能包括:替代IPv4的ARP来形成邻居表;默认网关的自动获取;无状态地址自动配置;路由重定向等。
NDP定义了5类ICMPv6报文,即路由器请求(Router Solicitor,RS)报文、路由器通告(Router Advertisement,RA)报文、邻居请求(Neighbor Solicitor,NS)报文、邻居通告(Neighbor Advertisement,NA)报文和路由重定向报文。这5种类型的ICMPv6报文都是消息类型的报文,用来实现邻居链路层地址解析、网关发现、地址自动配置和路由重定向等功能。
1、RS报文
RS报文供IPv6主机用以查找本地链路上存在的路由器,主机发送RS报文后会触发同网段的路由器立即回复RA报文,以获取前缀信息、MTU信息等,而不用等待路由器周期性地发送RA报文。
2、RA报文
路由器会周期性(思科路由器默认是200秒)地发送RA报文,向邻居节点通告自己的存在。RA报文可以携带一些路由前缀、自身链路层等参数信息。
3、NS报文
NS报文用于查询邻居节点的链路层地址。NS报文中的目的地址字段存放的是想要解析成链路层地址的IPv6单播地址。选项字段可以携带自身的链路层地址。当NS报文用于邻居可达性检测时,目的地址是单播地址;当用于邻居解析时,目的地址是被请求节点的组播地址FF02::1:FF00:0/104加目的单播地址的最后24位。IPv6节点在检测IPv6地址冲突时,也会发送邻居请求报文,此时目的IPv6地址是被请求节点的组播地址FF02::1:FF00:0/104加自己IPv6地址的最后24位,若收不到回复则表示IPv6地址没有冲突,IPv6地址配置生效。在实际配置中发现,在为Windows计算机配置IPv6地址时若存在地址冲突,不会弹出提示信息,这一点与IPv4地址的配置不同(在地址冲突时会弹出提示信息)。因此只能在命令行模式下执行ipconfig命令来查看IPv6地址是否生效。若没有生效,则可能是地址配置存在冲突。
4、NA报文
IPv6节点通过使用NA报文来通告自己的存在,或者告诉邻居需要更新自己的链路层地址信息。当节点发送NA报文来回应NS报文时,目的地址使用单播地址,如果目的是告诉邻居需要更新自己的链路层地址信息,则使用组播地址FF02::1作为目的地址。需要注意的是,路由器除了发送RA报文,也会发送NA报文。NA报文中有3个标志位:当R位为1时表示此报文是由路由器发送的;当S位为1时表示这是NS报文的回复;当O位为1时则表示需要更改原先的邻居表条目。在S位为1的情况下,NA报文的源地址字段是对应的NS报文中的目的地址字段,如果S位为0,则NA报文的源地址就是自身需要更新链路层地址信息的接口IPv6地址。
5、路由重定向报文
当路由器收到一个报文时,若发现同网段有更好的下一跳,则向发送方发送重定向报文(这与IPv4类似)。