NDP协议是IPv6网络中基础重要的一个协议。NDP协议全称是邻居发现协议。
NDP协议首先解决的一个问题是---我是谁?
NDP中的RS和RA解决了我是谁的问题。
RS报文
当主机刚刚接入网络并被配置自动获取地址后,会发送RS报文请求前缀,前缀网段及网关等信息。
RA报文
路由器接收到RS报文后或者定期发送RA报文,报文中携带前缀、前缀网段及网关信息等信息。注意,这里的前缀等均指全球单播地址前缀,即(2000::之类的)。
主机收到RS报文后,通过EUI-64补齐后64位地址,即可组成一个全球单播IPV6地址。
NDP协议解决的第二个问题是---你在哪?
IPv6中没有了ARP协议,使用了NDP协议中的NS和NA完成了ARP协议的功能。
NS对应ARP请求报文,NA对应ARP应答报文。不过值得一提的是,与ARP在二层半的位置不同,NS和NA是依托于ICMPv6报文完成的。这是纯纯的三层了。在NS和NA报文中是有IPv6报文基本报头的,也就是说需要填充源和目的IPv6地址。我们假设PC1请求PC2
NS报文:源是PC1全球单播地址 目的是PC2请求节点组播地址(是PC2地址对应的组播组)
NS报文中为什么使用请求节点组播地址? 参看链接:
NA报文:源是PC2全球单播地址,目的是PC1全球单播地址。
知道了我是谁,也知道了你在哪,咱俩是不是可以说话了?
非也,还要使用NDP协议确认一下我是我。这简直离谱,我怎么不是我了?其实是为了避免IPv6网络中的地址冲突问题。使用DAD即可解决这个问题。
DAD是一个特殊的RS报文,报文中请求的IPv6即是本机的IPv6地址
由于DAD也是一个三层报文,基本报文头的源是::,也就是空地址,而目的地址是本机(PC1)地址的请求节点组播地址。
如果PC2确实使用了这个地址,此时PC2回复一个特殊的NA报文,由于此时PC1还没有ipv6地址(有的那个也冲突了不能用),所以这个报文的目的地址是FF02::1,所有ipv6节点。源则是当前冲突的这个IPv6地址。给PC1当头一棒。
NDP的三个基本功能
我是谁---RS/RA
你在哪---NS/NA
我是不是我---DAD(NS/NA的特殊用法)