IPv6中的ARP“NDP协议详解“

一、概述

在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、地址解析案例

2、DAD案例

3、无状态自动获取案例

相关推荐
用户03284722207010 小时前
如何搭建本地yum源(上)
运维
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
程序猿追3 天前
那个右下角的小数字怎么“卡”住我打字——我用 HarmonyOS 自己写了一个字数限制输入框
pytorch·华为·harmonyos
古德new3 天前
鸿蒙PC使用electron迁移:Joplin Electron 桌面适配全记录
华为·electron·harmonyos
世人万千丶3 天前
桌面便签小应用 - HarmonyOS ArkUI 开发实战-TextArea与Flex布局-PC版本
华为·harmonyos·鸿蒙·鸿蒙系统
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
慧海灵舟3 天前
AGenUI 鸿蒙端实战踩坑录:从 Column 布局消失到异步组件宽度为 0
华为·harmonyos
yuegu7773 天前
HarmonyOS应用<节气通>开发第33篇:状态管理实战
华为·harmonyos
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信