NDP(邻居发现协议,Neighbor Discovery Protocol)是IPv6网络层的一个核心组成部分,用于在IPv6网络中实现多种网络功能。NDP定义在RFC 4861中,它取代了IPv4中由ARP(地址解析协议)和RARP(反向地址解析协议)等协议所执行的多项功能。NDP的主要功能包括:

  1. 路由器发现(Router Discovery):NDP允许IPv6节点发现本地链路上的路由器,并确定它们的链路层地址。
  2. 前缀发现(Prefix Discovery):通过NDP,节点可以学习到它的IPv6地址前缀,这对于自动配置IPv6地址至关重要。
  3. 参数发现(Parameter Discovery):NDP可以用来发现网络的各种参数,如MTU(最大传输单元)大小、跳数限制等。
  4. 地址自动配置(Address Autoconfiguration):NDP支持无状态地址自动配置,允许节点在没有DHCPv6服务的情况下自动配置自己的IPv6地址。
  5. 地址解析(Address Resolution):NDP的地址解析功能类似于ARP,它可以将IPv6地址解析为链路层地址。
  6. 下一跳肯定(Next-Hop Determination):NDP可以帮助确定数据包发送到特定目的地的最佳下一跳地址。
  7. 邻居不可达检测(Neighbor Unreachability Detection):NDP提供了一种机制,用于检测邻居节点是否可达。
  8. 重复地址检测(Duplicate Address Detection, DAD):在配置IPv6地址时,NDP通过DAD机制确保没有其他设备使用相同的地址,以避免地址冲突。
  9. 重定向(Redirect):类似于IPv4中的ICMP重定向,NDP允许路由器通知主机更好的路由,即使用另一个路由器而不是当前的下一跳路由器。

NDP通过发送和接收特殊的IPv6 ICMPv6消息来执行上述功能,这些消息包括路由器通告(Router Advertisements)、路由器请求(Router Solicitations)、邻居通告(Neighbor Advertisements)和邻居请求(Neighbor Solicitations)等。通过这些机制,NDP为IPv6网络提供了一种高效且灵活的方式来处理网络层的关键任务。


ICMPv6(Internet Control Message Protocol for IPv6)是IPv6协议族中的一个重要组成部分,主要用于在IPv6网络中传递控制信息和报告错误。ICMPv6报文主要分为两大类:差错报告报文(Error Message)和信息提供报文(Informational Message)。差错报告报文用于报告网络通信中的错误和故障,例如终点不可达、分组过长等。信息提供报文则用于提供网络状态和诊断信息,例如回送请求和应答

在ICMPv6中,RS(Router Solicitation)和RA(Router Advertisement)报文用于IPv6的邻居发现协议(NDP)。RS报文由主机发送,用以请求路由器发送RA报文,而RA报文是由路由器发送,用以提供网络配置信息,如链路的网络前缀信息,主机根据接收的网络前缀和接口标识符创建全球单播地址,并将路由器的本地链路单播地址作为默认网关地址

NS(Neighbor Solicitation)和NA(Neighbor Advertisement)报文则用于IPv6的地址解析和重复地址检测(DAD)。当IPv6节点需要解析本地链路上一个IPv6地址的MAC地址时,它会发送一个ICMPv6邻居请求报文(NS)。如果检测到地址冲突,则会生成新的地址。这种机制使得IPv6地址解析的效率比IPv4的ARP广播高得多,因为只有目标节点会响应邻居通告报文,其他节点会直接丢弃该报文,不会交给网络层协议处理,这大大减少了网络上的不必要流量,提高了网络性能

此外,ICMPv6还支持通过RA报文进行DNS配置,这是通过RDNSS(Recursive DNS Server)和DNSSL(DNS Search List)选项实现的,允许IPv6路由器向主机通告DNS递归服务器地址和DNS搜索列表