一、概述
在IPv4网络环境当中,我们想要与对端进行网络通信时,首先需要去解析对方的MAC地址这样我们才能封装二层数据帧,就算访问不同网络时也需要解析网关的MAC,这些都是需要我们的ARP协议来进行操作完成的,但是在我们的IPv6网络环境当中并没有ARP协议,而是通过NDP协议来完成类似的操作,此文章我们将详细与大家介绍NDP协议的报文结构,NDP的工作机制等,方便大家对IPv6协议的进一步了解。
二、ICMPv6
因为我们的NDP协议是封装在ICMPv6之上的所以这里我们先介绍一下ICMPv6协议并比较ICMPv6与ICMPv4的区别,ICMPv4在IPv4网络当中并不算特别重要,少了ICMPv4协议也可以正常通信,但在IPv6当中要是没有了ICMPv6则无法正常通信了,所以ICMPv6在IPv6网络当中非常重要。
ICMPv6是IPv6的基础协议之一,用于向原节点传递报文转发的信息或错误。
协议类型好(即IPv6 Next Header)为58。
在IPv6当中,ICMPv6除了提供ICMPv4的对应功能之外,还有其他一些功能的基础,如邻居发现、无状态地址配置、重复地址检测、PMTU发现等。
三、NDP
1、NDP能够实现的功能
- 地址解析-ARP的功能
- DAD-地址冲突检测-免费ARP功能
- NUD-邻居不可达检测
- 路由器发现-生成前缀信息-网关
2、报文类型
常见的NDP报文类型有四个分别为:
- RS(Router Solicitation)路由器请求报文
- RA(Router Advertisement)路由器通告报文
- NS(Neighbor Solicitation)邻居请求报文
- NA(Neighbor Advertisement)邻居通告报文
2、NS和NA
在讲NS之前,我们先回顾一下IPv4中ARP是如何去解析对方的地址的。
首先我们想要去解析对方的MAC首先得有对方的三层信息就是IP,发出一个ARP的Request广播报文来寻找对方,对方在接收到我们的请求报文之后就会将自己的MAC地址填进去回复一个Reply响应报文,当我们接收到对方的响应报文时就得到了对方的MAC地址就可以封装二层数据了。
要注意的一点是,在IPv4当中使用ARP去请求MAC时发送的是一个广播报文,但在IPv6当中并没有广播报文,那我们在发送请求报文时目的IP怎么填写呢?
这里就需要用到我们IPv6详解当中介绍的被请求节点组播地址了,我们NS在请求对方MAC的时候目的IP填写的就是我们通过计算得出的对方的被请求节点组播地址。
举个例子:
此时我们让AR1去请求AR2的MAC,那么就会发出这样的一个报文
AR2在接收到这个NS请求报文之后,拆包发现目的MAC为自己的被请求节点组播地址的MAC,就会继续往上层进行拆包,拆完后发现对方要请求我的MAC,AR2首先会将ICMPv6 Option当中的Link-layer address(AR1的MAC)与源IP做一个绑定形成一个邻居表,随后发送一个NA报文给对方告诉对方AR2我的MAC是多少。
AR1在收到AR2发送的NA邻居通告报文之后就会通过里面的MAC和IPv6地址做一个绑定形成邻居表。
3、DAD
当我们在接口上配置好IPv6地址并UP之后,会发送一份NS报文,这个报文类似于IPv4网络当中的免费ARP。用来检测是否有地址冲突的,假如这个网络当中存在地址冲突,对方就会回复一个NA报文,本设备在接收到对方的NA报文之后就知道网络中已经有人使用了这个地址。
与IPv4不同的是,在IPv4网络当中如果存在地址冲突但双方还是可以正常使用该地址的只不过可能会将报文误发给对方,但IPv6网络当中如果发现存在地址冲突,本设备收到了对方的NA报文以后就会将该地址的状态置为DUPLICATE状态,不能使用该地址。
举个例子:
我们将AR2的接口IPv6地址配置与AR1一致,AR2的地址UP的时候就会发送一份NS用来做DAD地址冲突检测
AR1在收到AR2发送的NS报文之后就会回复一份NA,AR2在收到这份NA报文之后就知道该地址已经被人使用了,会将该地址置为DUPLICATE状态。
4、RS和RA
在IPv6网络当中我们可以通过RS和RA报文来获取到前缀信息以及网关
举个例子:
我们让AR2去获取IPv6地址前缀,AR2会发出一份RS,当AR1收到这份RS时,就会将前缀放入到RA当中回复给AR2,AR2收到RA之后通过前缀+EUI64计算出一个IPv6地址进行使用。这就是我们所说的即插即用。
AR2的RS报文
AR1的RA报文
以上就是本章的全部内容了,感谢大家的浏览观看!文章若有错误或疑问可联系博主删除更改。
四、NDP案例
1、地址解析案例