NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协议,并对它们作了改进。
作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不可达检测、重复地址监测、地址自动配置等功能。如下图:
一、邻居发现协议功能
1.地址解析:
地址解析是一种确定目的节点的链路层地址的方法。NDP中的地址解析功能不仅替代了原IPv4中的ARP,同时还用邻居不可达检测(NUD)方法来维持邻居节点之间的可达性状态信息。
2.无状态地址配置:
NDP中特有的地址自动配置机制,包括一些列相关功能,如路由器发现、接口ID自动生成、重复地址监测等。通过无状态自动配置机制,链路上的节点可以自动获得IPv6全球单播地址。
a)路由器发现:路由器与其他相连的链路上发布网络参数信息,主机捕获此信息后,可以获得全球单播IPv6地址前缀、默认路由、链路参数(链路MTU)等信息。
b)接口ID自动生成:主机根据EUI-64规范或其他方式为接口自动生成接口标识符。
c)重复地址监测(DAD):根据前缀信息生成或手动配置IPv6地址后,为保证该地址的唯一性,在其可以使用之前,主机需要检验它是否已被链路上的其他节点所使用。
d)前缀重新编址:当网络前缀变化时,路由器在与其相连的链路上发布新的网络参数信息,主机捕获这些新信息后,重新配置前缀、链路MTU等地址相关信息。
3.路由重定向:
当在本地链路上存在一个更好的到达目的网络的路由器时,路由器需要通告节点来进行相应配置改变。
二、邻居发现协议报文类型
ICMPv6类型 | 消息名称 | 说明 |
133 | RS | 当接口工作时,主机发送路由器请求消息,要求路由器立即产生路由器通告消息,而不必等待下一个预定时间。 |
134 | RA | 路由器周期性地通告它的存在以及配置的链路和网络参数,或者对路由器请求消息作出响应。 |
135 | NS | 节点发送邻居请求消息来请求邻居的链路层地址,以验证它先前所获取并保存在缓存中的邻居链路层地址的可达性,或者验证它自己的地址在本地链路是唯一的。 |
136 | NA | 邻居请求消息的响应。节点也可以发送非请求邻居通告来指示链路层地址的变化 |
137 | Redirect | 对于特定的目的地址,如果不是最佳路由,路由器则通知主机到达目的的最佳下一跳 |
三、邻居发现相对于IPv4的改进
- 邻居不可达检测是基础协议的一部分,在路由器出错或链路接口改变的情况下,改善了数据包的传输;
- 路由器通告和ICMP重定向使用本地链路地址来识别路由器,即便网络重新编码,与路由器的关系可以保持;
- 邻居发现协议被用来检测一个连路上重复的IP地址;
- 路由器发现是基础协议的一部分,IPv4需要从路由表中获取信息;
- 路由器通告数据包中包含了路由器的链路层地址,节点无需再请求;
- 重定向消息包含了路由器的链路层地址,节点无需再请求;
- 路由器通告数据中包含了一个链路的前缀(子网信息),无需再配置子网掩码;
- 路由器通告消息不再包含优先级,代表稳定性,由邻居发现协议来确保可达;
- 邻居发现提供了一种易于对网络重新编号的机制,引入新的前缀和地址;
- 路由器通告使得无状态自动配置成为可能,可以通知何时使用有状态地址配置;
- ICMP实现链路层地址解析,与arp相比可以实现与传播介质无关,更加通用,可以实现安全机制;
- 一个链路可以分配多个前缀。默认路由器知道所有前缀,但路由器也可以配置成不通告前缀,接收到数据包,发送ICMP重定向;
- 标准身份验证和安全机制可以用于邻居发现。