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、无状态自动获取案例

相关推荐
岁岁种桃花儿8 分钟前
详解 Kubernetes 命令:kubectl exec -it nginx -- bash 及实战场景
运维·nginx·kubernetes
小牛马爱写博客17 分钟前
DNS 服务器与 DHCP 服务器详解及配置指南
linux·运维·服务器·dns·dhcp
维尔切19 分钟前
HAProxy 负载均衡器
linux·运维·数据库·负载均衡
VueVirtuoso24 分钟前
前后端部署 + Nginx 配置 + Cloudflare 全攻略(通俗易懂版)
运维·nginx
QQ129584550432 分钟前
服务器跨域问题CORS的解决
运维·服务器
小白银子34 分钟前
零基础从头教学Linux(Day 42)
linux·运维·服务器·网络·nginx
DDC楼宇自控与IBMS集成系统解读1 小时前
园区3D可视化数字孪生管理平台与 IBMS 智能化集成系统:打造智慧园区新范式
运维·3d可视化·楼宇自控系统·数字孪生管理平台·ibms集成系统·3d可视化数字孪生管理平台·智能化集成系统
望获linux1 小时前
【Linux基础知识系列:第一百四十篇】理解SELinux与系统安全
linux·运维·服务器·数据库·chrome·macos
初学者_xuan1 小时前
零基础新手小白快速了解掌握服务集群与自动化运维(七)Nginx模块--Nginx反向代理与缓存功能(二)
运维·nginx·自动化
火星MARK1 小时前
如何配置 Ingress 的 SSL/TLS 证书?
网络·网络协议·ssl