IPv6知识概述 - ND协议

news2024/11/18 12:24:27

IPv6知识概述 - ND协议

参考文章:https://blog.csdn.net/Gina_wj/article/details/106708770

IPv6基础篇(四):邻居发现协议NDP

ND协议功能概述

ND(Neighbor Discovery,邻居发现)协议是IPv6的一个关键协议,它综合了IPv4中的ARP,ICMP路由发现和ICMP重定向等协议,并对他们做了改进。作为IPv6的基础性协议,ND协议还提供了前缀发现,邻居不可达检测,重复地址检测,地址自动配置等功能,具体如下所示:

1)地址解析
地址解析是一种确定目的节点的链路层地址的方法。ND中的地址解析功能不仅替代了原IPv4中的ARP协议,同时还用**邻居不可达检测(NUD)**方法来维护邻居节点之间的可达性状态信息。

2)无状态地址自动配置
ND协议中特有的地址自动配置机制,包括一系列相关功能,如路由器发现,接口ID自动生成,重复地址检测等。通过无状态自动配置机制,链路上的节点可以自动获得IPv6全球单播地址。

路由器发现
路由器在 与其相连的链路上发布网络参数等信息,主机捕获次信息后,可以获得全球单播IPv6地址前缀、默认路由、链路参数(链路MTU)等信息。

接口ID自动生成
主机根据EUI-64规范或其他方式为接口自动生成接口标识符。

重复地址检测
根据前缀信息生成IPv6地址或手动配置IPv6地址后,为保证地址的唯一性,在这个地址可以使用之前,主机需要检验此IPv6地址是否已经被链路上的其他节点所使用。

前缀重新编址
当网络前缀变化时,路由器再与其相连的链路上发布新的网络参数信息,主机捕获这些信息,重新配置前缀,链路MTU等地址相关信息。

3)路由器重定向
当在本地链路上存在一个到达目的网络的更好地路由器时,路由器需要通过节点来进行相应配置改变。

ND协议报文

ND协议定义了5种ICMPv6报文类型,如下表所示:
image.png
NS/NA报文主要用于地址解析
RS/RA报文主要用于无状态地址自动配置
Redirect报文用于路由器重定向。


IPv6邻居发现协议使用5种类型的ICMPv6消息类型,用来实现地址解析,重复地址检测,路由器发现以及路由重定向等功能。具体的ICMPv6的消息类型及具体作用如下:

1、ICMPv6邻居请求(Neighbor Solicitation)消息


其中各字段的含义如下:
1)Target Address:待解析的IPv6地址,16types。Target Address不能是组播地址,可以是链路本地地址、站点本地地址和全球单播地址。
2)Options:地址解析中只使用了链路层地址选项(Link-Layer Address Option),是发送NS报文节点的链路层地址。链路层地址选项的格式如下图所示:

其中各字段含义如下:
1)Type:选项类型,在链路层地址选项中包括如下两种:

  • Type=1,表明链路层地址为Source Link-Layer Address(源链路层地址),在NS,RS,Redirect报文中使用。
  • Type=2,表明链路层地址为Target Link-Layer Address(目标链路层地址),在NA,Redirect报文中使用。

2)Length:选项长度,以8bytes为单位。
3)Link-Layer Address:链路层地址。长度可变,对于以太网为6bytes。

邻居请求报文NS(Neighbor Solicitation)报文:Type字段值为135,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP请求报文。用来获取邻居的链路层地址,验证邻居是否可达,进行重复地址检测等。

2、ICMPv6邻居通告(Neighbor Adivertisment)消息


其中各字段的含义如下:
1)Target Address:待解析的IPv6地址,16types。Target Address不能是组播地址,可以是链路本地地址、站点本地地址和全球单播地址。
2)Options: 地址解析中只使用了链路层地址选项(Link-Layer Address Option),是发送NS报文节点的链路层地址。链路层地址选项的格式如下图所示:

其中各字段含义如下:
1)Type:选项类型,在链路层地址选项中包括如下两种:

  • Type=1,表明链路层地址为Source Link-Layer Address(源链路层地址),在NS,RS,Redirect报文中使用。
  • Type=2,表明链路层地址为Target Link-Layer Address(目标链路层地址),在NA,Redirect报文中使用。

2)Length:选项长度,以8bytes为单位。
3)Link-Layer Address:链路层地址。长度可变,对于以太网为6bytes。
————————————————
邻居通告报文NA(Neighbor Adivertisment)报文:Type字段值为136,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP应答报文。用来对NS消息进行响应。另外,当节点在链路层变化的时候主动发出NA消息,告知邻居本节点的变化。

3、ICMPv6路由器请求(Router Solicitation)消息


其中字段含义如下:
Options(选项)字段:只能是源链路层地址选项,表明该报文发送者的链路层地址,不过如果IPv6报头的源地址为未指定地址,则不能包括该选项。

ICMPv6路由器请求(Router Solicitation)消息:Type字段值为133,节点启动后,通过RS消息向路由器发出请求,请求前缀和其他配置信息,用于节点的自动配置。

4、ICMPv6路由器通告(Router Advertisement)消息


其中字段含义如下:
image.pngimage.png
选项字段中个选项的含义如下:
1)源链路层地址选项:路由器发送RA报文的接口的链路层地址。
2)MTU选项:包含了在链路上运行的链路层协议所能支持的MTU最大值。
3)前缀信息选项(Prefix Information Option):用于地址自动配置的前缀信息,可包含多个。前缀信息选项在RFC2461中定义,用于表示地址前缀和有关地址自动配置的信息,值用于RA报文中;在其他的消息中,此选项应该被忽略。其格式如下图所示:

其各字段的含义如下所示:
image.pngimage.png
4)路由信息选项(Route Information Option):用于主机生产默认路由。路由信息选项在RFC4191中定义,取代了原前缀信息选项的功能。接收RA报文的主机将选项中的信息添加到自己的贝蒂路由表中,以便在发送报文时做出更好地转发决定,其个数如下图所示:

其中各字段含义如下所示:
image.png

ICMPv6路由器通告(Router Advertisement)消息:Type字段值为134,对RS消息进行回应。在没有抑制RA消息发布的条件下,路由器会周期性地发布RA消息,其中包括前缀信息选项和一些标志位的信息。

5、ICMPv6重定向(Redirect)消息

ICMPv6重定向(Redirect)消息:Type字段值为137,当满足一定的条件时,缺省网关通过向源主机发送重定向消息,使主机重新选择正确的下一跳地址进行后续报文的发送。

IPv6地址解析过程

过程解析

在IPv6中,ND协议通过在节点间交互NS和NA报文完成IPv6地址到链路层地址的解析,解析后用得到的链路层地址和IPv6地址等信息来建立相应的邻居缓存表项。其解析过程如下图所示:

:::warning

  1. NodeA发送一个NS报文到链路上,目的IPv6地址为NodeB对应的被请求节点组播地址**(FF02::1:FF02:B),选项字段中携带了NodeA的链路层地址00E0-FC00-0001。**
  2. NodeB接收到该NS报文后,由于报文的目的地址FF02::1:FF01:B时NodeB的被请求节点组播地址,所以NodeB会处理该报文;同时,根据NS报文中的源地址和源链路层地址选项更新自己的邻居缓存表项。
  3. NodeB发送一个NA报文来应答NS,同时在消息的目标链路层地址选项中携带自己的链路层地址00E0-FC00-0002
  4. NodeA接收到NA报文后,根据报文中携带的NodeB链路层地址,创建一个到目标节点NodeB的邻居缓存表项。

通过交互,NodeA和NodeB就获得了对方的链路层地址,建立其到达对方的邻居缓存表项,从而可以互相通信。
当一个节点的链路层地址发生改变时,以所有节点组播地址FF02::1为目的地址发送NA报文,通知链路上的其他节点更新邻居缓存表项。
:::

抓包再具体看一下解析过程

获取同一链路上邻居节点的链路层地址(与IPv4的ARP功能相同),通过邻居请求消息NS和邻居通告消息NA实现。节点1要获取节点节点2的链路层地址。

节点1在向节点2发送报文之前要解析出节点2的链路层地址。地址解析的过程主要如下(我们使用HCL模拟器来模拟这个过程):

①节点1会发送一个NS报文,Type值为135,源地址为节点1的IPv6地址。目的地址为节点2的被请求节点组播地址,要请求的为节点2的链路层地址。同时NS的报文的Options字段中携带了节点1的链路层地址。如下图:

②节点2收到NS消息后,会回应NS消息,源地址为节点2的IPv6地址,目的地址为节点1的IPv6地址,节点2的链路层地址会被放在Option字段里。

③节点1获取到了节点2的链路层地址。

最后我们在路由器上可以查看到RouterA的IPv6地址信息和所有的邻居信息:


在Ping链路本地地址时,需要使用-i参数,来指定链路本地地址的接口。

邻居不可达检测(NUD)

NUD(Neighbor Unreachability Detection,邻居不可达检测)是节点确定邻居可达性的过程,其检测过程如下图所示:

邻居可达性是单向的,如果需要达到“双向”可达,还需NodeB发送NS探测报文,NodeA给NodeB回应S标志置为的NA报文。

IPv6地址解析的优点

IPv6的地址解析过程包括两部分:一部分解析了目的IP地址所对应的链路层地址;另一部分是邻居可达性状态的维护过程,即邻居不可达检测。 IPv6地址解析相对于IPv4的ARP解析,有以下优点:

  1. 加强了地址解析协议与底层链路的独立性

对每一种链路层协议都使用相同的地址解析协议,无须再为每一种链路层协议定义一个新的地址解析协议。

  1. 增强了安全性

ARP攻击,ARP欺骗是IPv4中严重的安全问题。在第三层实现地址解析,可以利用三层标准的安全认证机制来防止这种ARP攻击和ARP欺骗。

  1. 减小了报文传播范围

在IPv4中,ARP广播必须泛滥到二层网络中每台主机。IPv6地址解析利用三层组播寻址限制了报文的传播范围,通过将地址解析请求仅发送到待解析地址所属的被请求节点组播组,减小了报文传播范围,节省了网络带宽。

无状态地址自动配置

:::info
可阅读之前发表的文章:
无状态地址自动配置 (SLAAC)
:::
IPv6同时定义了无状态与有状态地址自动配置机制。有状态地址自动使用DHCPv6协议来给主机动态分配IPv6地址无状态地址自动配置通过ND协议来实现。在无状态自动配置中,主机通过接受链路上的路由器发出的RA消息,结合接口的标识符而生成一个全球单播地址。
无状态地址自动配置有以下优点:
1)真正的即插即用。节点连接到没有DHCP服务器的网络时,无须手动配置地址等参数便可访问网络。
2)网络迁移方便。当一个站点的网络前缀发生变化,主机能够方便地进行重新编址而不影响网络连接。
3)地址配置方式选择灵活。系统管理员可根据情况决定使用何种配置方式——有状态,无状态还是两者兼容。

无状态自动配置设计以下3种机制:路由器发现DAD检测前缀重新编址

路由器发现

在路由器通告报文RA中承载着路由器的相关信息,ND协议通告RS和RA的报文交互完成路由器发现,前缀发现和参数发现三大功能,协议交互主要有两种情况:主机请求触发路由器通告和路由器周期性发送路由器通告。

  • 主机请求触发路由器通告

当主机启动时,会向本地链路范围内所有的路由器发送RS报文,触发链路上的路由器相应RA报文。主机接收到路由器发出的RA报文后,自动配置默认路由器,建立默认路由列表,前缀列表和设置其他的配置参数。
为了避免链路上有过多的RS报文,启动时每个节点最多只能发送3个RS报文。

  • 路由器周期性发送路由器通告

重复地址检测DAD

**DAD(Duplicate address Detection,重复地址检测)**是节点确定即将使用的地址是否在链路上唯一存在的过程。所有的IPv6单播地址,包括自动配置或手动配置的单播地址,在节点使用之前必须要通过重复地址检测。

当节点获取到一个IPv6地址后,需要使用重复地址检测功能确定该地址是否已被其他节点使用(与IPv4的免费ARP功能相似)。**DAD监测通过NS和NA可以实现重复地址检测。**DAD过程如下所示:

需要注意的是,IPv6节点对任播地址不进行DAD检测,因为任播地址可以被分配给多个接口使用。

在进行DAD检测时,一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址(Tentative Address)。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和实验地址所对应的Solicited-Node组播组。

IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向一个自己将使用的试验地址所在的Solicited-Node组播组发送一个以该实验地址为请求的目标地址的NS报文,如果收到节点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该实验地址通讯。

DAD检测过程:

PC1的IPv6地址2000::1为新配置地址,即2000::1为PC1的试验地址。PC1向2000::1的Solicited-Node组播组发送一个以2000::1为请求的目标地址的NS报文进行重复地址检测,由于2000::1并未正式指定,所以NS报文的源地址为未指定地址。当PC2收到该NS报文后,有两种处理方法:

  1. 如果PC2发现2000::1是自身的一个实验地址,则PC2放弃使用这个地址作为接口地址,并且不会发送NA报文。
  2. 如果PC2发现2000::1是一个已经正常使用的地址,那么PC2会向该地址的ALL-NODES组播组发送一个NA报文,该消息中会包含2000::1。这样,PC1收到这个消息后就会发现自身的实验地址是重复的,从而弃用该地址。

前缀重新编址

前缀重新编址(Prefix Renumbering)允许网络从以前的前缀平稳过渡到新的前缀,提供对用户的网络重新编址能力。路由器通告RA报文中的优先时间和有效时间参数来实现前缀重新编址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1099616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

01【Git的基本使用与底层原理】

下一篇:02【Git的分支与数据恢复】 目录:【Git系列教程-目录大纲】 文章目录 一、Git概述1.1 Git简介1.2 集中式与分布式1.2.1 集中式版本控制1.2.2 分布式版本控制 1.3 Git的使用流程1.3.1 本地仓库1.3.2 协同开发 1.4 Git的配置1.4.1 Git的配置等级1…

从头开始机器学习:线性回归

从头开始机器学习&#xff1a;线性回归 跟随 16 分钟阅读 28月 <> 1 一、说明 本篇实现线性回归的先决知识是&#xff1a;基本线性代数&#xff0c;微积分&#xff08;偏导数&#xff09;、梯度和、Python &#xff08;NumPy&#xff09;&#xff1b;从线性方程入手。 代…

【LeetCode刷题(数据结构与算法)】:用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回队列开头…

运维 | 如何在 Linux 系统中删除软链接 | Linux

运维 | 如何在 Linux 系统中删除软链接 | Linux 介绍 在 Linux 中&#xff0c;符号链接&#xff08;symbolic link&#xff0c;或者symlink&#xff09;也称为软链接&#xff0c;是一种特殊类型的文件&#xff0c;用作指向另一个文件的快捷方式。 使用方法 我们可以使用 ln…

双目标定之张正友标定法数学原理详解matlab版

目录 前言 1.相机标定 1.1 双目视觉基本原理 1. 2 相机的四个坐标系 1.3 相机畸变与校正 2.1 相机标定 张正友友棋盘格标定法在matlab的实现 这一篇主要详细介绍标定原理和相机各个坐标系之间的关系为后续的定位测距和重建做基础 前言 最近重新整理了一下自己做过的双目…

【单片机基础】使用51单片机制作函数信号发生器(DAC0832使用仿真)

文章目录 &#xff08;1&#xff09;DA转换&#xff08;2&#xff09;DAC0832简介&#xff08;3&#xff09;电路设计&#xff08;4&#xff09;参考例程&#xff08;5&#xff09;参考文献 &#xff08;1&#xff09;DA转换 单片机作为一个数字电路系统&#xff0c;当需要采集…

ICML2021 | RSD: 一种基于几何距离的可迁移回归表征学习方法

目录 引言动机分析主角&#xff08;Principal Angle&#xff09;表征子空间距离正交基错配惩罚可迁移表征学习实验数据集介绍 实验结果总结与展望 论文链接 相关代码已经开源 引言 深度学习的成功依赖大规模的标记数据&#xff0c;然而人工标注数据的代价巨大。域自适应&…

10种新型网络安全威胁和攻击手法

2023年&#xff0c;网络威胁领域呈现出一些新的发展趋势&#xff0c;攻击类型趋于多样化&#xff0c;例如&#xff1a;从MOVEit攻击可以看出勒索攻击者开始抛弃基于加密的勒索软件&#xff0c;转向窃取数据进行勒索&#xff1b;同时&#xff0c;攻击者们还减少了对传统恶意软件…

android U广播详解(二)

android U广播详解&#xff08;一&#xff09; 基础代码介绍 广播相关 // 用作单个进程批量分发receivers&#xff0c;已被丢弃 frameworks/base/services/core/java/com/android/server/am/BroadcastReceiverBatch.java // 主要逻辑所在类&#xff0c;包括入队、分发、结束…

Spacedrive:开源跨平台文件管理 | 开源日报 No.57

denoland/deno Stars: 91.2k License: MIT Deno 是一个简单、现代和安全的 JavaScript 和 TypeScript 运行时&#xff0c;使用 V8 引擎并用 Rust 构建。其主要功能包括&#xff1a; 默认情况下具有高度安全性&#xff0c;除非显式启用&#xff0c;否则无法访问文件、网络或环…

docker入门加实战—网络

docker入门加实战—网络 我们运行了一些容器&#xff0c;但是这些容器是否能够进行连通呢&#xff1f;那我们就来试一下。 我们查看一下MySQL容器的详细信息&#xff1a; 主要关注&#xff0c;Networks.bridge.IPAddress属性信息&#xff1a; docker inspect mysql # 或者过…

RT-Thread学习笔记(二):RT-Thread内核

RT-Thread内核 什么是RTOS&#xff1f;RTOS内核包含哪些内容&#xff1f;RT-Thread内核架构RT-Thread系统架构 RT-Thread内核文件RT-Thread系统启动流程RT-Thread 内核配置文件 什么是RTOS&#xff1f;RTOS内核包含哪些内容&#xff1f; RTOS(Real Time Operating System)指的…

PyTorch 深度学习之循环神经网络(基础篇)Basic RNN(十一)

0.Revision: DNN dense 重义层 全连接 RNN处理带有序列的数据 1. What is RNNs? linear layer 1.1 What is RNN? tanh (-1, 1) 1.2 RNN Cell in PyTorch 1.3 How to use RNNCell *先把维度搞清楚 多了一个序列的维度 2. How to use RNN 2.1 How to use RNN - numLayers…

nginx正反向代理,负载均衡

Nginx 正向代理&#xff0c;反向代理 &#xff0c;负载均衡 Nginx有两种代理协议 七层代理&#xff08;http协议&#xff09; 四层代理&#xff08;tcp/udp流量转发&#xff09; 四层代理七层代理概念 四层代理 四层代理&#xff1a;基于tcp/ip协议层的转发代理方式&#…

grid网格布局,比flex方便太多了,介绍几种常用的grid布局属性

使用flex布局的痛点 如果使用justify-content: space-between;让子元素两端对齐&#xff0c;自动分配中间间距&#xff0c;假设一行4个&#xff0c;如果每一行都是4的倍数那没任何问题&#xff0c;但如果最后一行是2、3个的时候就会出现下面的状况&#xff1a; /* flex布局 两…

Android versionCode会变成指定数值加001、002、003等后缀

“活久见”—今天遇到个奇怪的问题&#xff0c;指定的versionCode最终在打包出来的apk中,versionCode变成&#xff08;指定数值 00X的形式&#xff09; 如下所示&#xff1a; 注&#xff1a;当前build.gradle中的versionCode为26 后来搜索代码&#xff0c;发现原来是这个配置导…

系统架构与Tomcat的安装和配置

2023.10.16 今天是学习javaweb的第一天&#xff0c;主要学习了系统架构的相关知识和原理&#xff0c;下载了web服务器软件&#xff1a;Tomcat&#xff0c;并对其进行了配置。 系统架构包括&#xff1a;C/S架构 和 B/S架构。 C/S架构&#xff1a; Client / Server&#xff08;…

052:mapboxGL同一个图层,设置每个feature不同的颜色

第052个 点击查看专栏目录 本示例是介绍演示如何在vue+mapbox中同一个图层,设置每个feature不同的颜色。 这里的数据都是点,通过每个geojson数据的属性中color的值,来同通过get的方式将颜色值挂在到circle-color上。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实…

JavaFX:控件边框设置

JavaFX中控件的边框也可以进行设置。主要有两种方式&#xff0c;一种是Java方式&#xff0c;一种是CSS方式。 JavaFX中控件继承自Region类。setBorder方法用来设置边框属性。 // The border of the Region, which is made up of zero or more BorderStrokes, and zero // or …

Python制作PDF转Word工具(Tkinter+pdf2docx)

一、效果样式 二、核心点 1. 使用pdf2docx完成PDF转换Word 安装pdf2docx可能会报错&#xff0c;安装完成引入from pdf2docx import Converter运行也可能报错&#xff0c;可以根据报错提示看缺少那些库&#xff0c;先卸载pip uninstall xxx,使用pip install python-docx -i htt…