网络学习:邻居发现协议NDP

目录

前言:

一、报文内容

二、地址解析----NS/NA

目标的被请求组播IP地址

邻居不可达性检测:

重复地址检测

路由器发现

地址自动配置

默认路由器优先级和路由信息发现

重定向


前言:

        邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议 替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),它定义了使 用ICMPv6报文实现地址解析,邻居不可达性检测,重复地址检测,路由器发现,重定向以及ND代理等功能。

一、报文内容

NDP协议中一共有五种ICMPv6报文类型,分别是RS,RA,NS,NA和Redirect报文

ICMPV6类型消息名称
type=133RS(Router Soliciation 路由器请求报文)
type=134RA(Router Advertisement 路由器公告报文)
type=135NS(Neighbor Solicitatio 邻居请求报文)
type=136NA(Neighbor Advertisement 邻居通告报文)
type=137Redirect(重定向报文)

NS和NA报文主要用于地址解析,RA和RS报文主要用于无状态地址自动配置,Redirect报文用于路由器重定向。

二、地址解析----NS/NA

在IPv4中,当主机需要和目标主机通信时,必须先通过ARP协议获得目的主机的链路层地址。在IPv6中,同 样需要从IP地址解析到链路层地址的功能。邻居发现协议实现了这个功能。

ARP报文是直接封装在以太网报文中,以太网协议类型为0x0806,普遍观点认为ARP定位为第2.5层的协议。 NDP本身基于ICMPv6实现,以太网协议类型为0x86DD,即IPv6报文,IPv6下一个报头字段值为58,表示 ICMPv6报文,由于NDP协议使用的所有报文均封装在ICMPv6报文中,一般来说,ND被看作第3层的协议, 在三层完成地址解析。与IPv4的ARP相比,IPv6地址解析技术工作在OSI参考模型的网络层,与链路层协议无 关。

主要带来以下几个好处:

  • 地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议。
  • 可以使用三层的安全认证机制避免地址解析攻击----ARP攻击、ARP欺骗。
  • 使用组播方式发送请求报文,减少了二层网络的性能压力-----二层网络会进行洪范,而使用组播可以圈 定目标主机,从而限定了报文传播范围,节省网络带宽。

地址解析过程中使用了两种ICMPv6报文:邻居请求报文NS(Neighbor Solicitation)和邻居通告报文NA (Neighbor Advertisement)。

  • NS报文:Type字段值为135,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP请求报文。
  • NA报文:Type字段值为136,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP应答报文。

Host A在向Host B发送报文之前它必须要解析出Host B的链路层地址,所以首先Host A会发送一个NS报文。

源IP地址为Host A的IPv6地址,目的IP地址为Host B的被请求节点组播地址,需要解析的目标IP为Host B的 IPv6地址,这就表示Host A想要知道Host B的链路层地址。源MAC地址为节点A的MAC地址,目标MAC是节点B的被请求节点组播MAC地址。同时需要指出的是,在NS报文的Options字段中还携带了Host A的链路层地址。

目标的被请求组播IP地址

在IPv6组播地址中,有一种特别的组播地址,称为被请求节点组播地址(Solicited-node Address)。 被请求节点组播地址是一种具有特殊用途的地址,主要用于重复地址检测和获取邻居节点的链路层地址时,代替IPv4中使用的广播地址。

该地址是通过计算得出: 被请求节点组播地址由前缀FF02::1:FF00::/104和单播地址的最后24位组成。对于节点或路由器的接口 上配置的每个单播和任播地址,都自动启用一个对应的被请求节点组播地址。被请求节点组播地址使 用范围为链路本地。这里使用2000::1/64举例:

最终2000::1的被请求组播IP地址为FF02::1:FF00::1/104。在例如:如4037::01:800:200E:8C6C对应 于FF02::1:FF0E:8C6C。

组播IPv6报文的目的IP地址是组播IPv6地址,而目的MAC地址则必须是组播MAC地址,并且该地址必 须与组播IPv6地址对应。33-33是专门为IPv6组播预留的MAC地址前缀,MAC地址的后32bit从对应的 组播IPv6地址的后32bit拷贝而来。

所以FF02::1:FF00::1/104的组播MAC地址为33-33-FF00-0001。

当Host B接收到了NS报文之后,就会回应NA报文,其中源地址为Host B的IPv6地址,目的地址为Host A的 IPv6地址(使用NS报文中的Host A的链路层地址进行单播),Host B的链路层地址被放在Options字段中。 这样就完成了一个地址解析的过程。

值得注意的是,因为IPV6地址这样的设定就导致可能出现IPV6网络中存在多个前缀不同但是后24位相同的 IPV6地址,从而产生多个主机使用了一个组播MAC地址,导致网络混乱,所以在ICMPV6数据包中会携带 Target Address字段2000::2,指示目标主机,只有对应的主机会接收该请求,其余主机会丢弃该数据包。

以上抓包,采用以下环境完成:

实际上这个过程大家也不用想的过于复杂,只不过涉及到了一些地址的计算。

类比IPV4的PING

路由器 AR1需要构造 ICMP echo request 报文,将PC1的IP地址 填入报文的目的 IP 地址字段。但在发送该 报文前, 路由器 A 需要确认它已经掌握了以下 4 个信息:

  • 目的 MAC 地址
  • 源 MAC 地址
  • 源 IP 地址
  • 目的 IP 地址

在这 4 个信息中,路由器 A 能轻松填上其中 3 个。

我们敲的命令是 “ping PC1” ,所以路由器 A 知道报文应该填写的目的 IP 地址为 PC1的地址,同时,路由器 R1自身已知自己的源MAC地址和源IP地址。

IPV6的PING

IPv6 中的 Ping 和 IPv4 非常类似,区别在于它使用的是 ICMPv6 echo request 报文。同样的,为了让报文 能顺利发到目的地址 2001:DB8::AB:2, 路由器 A 同样需要以下 4 个信息:

  • 目的 MAC 地址
  • 源 MAC 地址
  • 源 IPv6 地址
  • 目的 IPv6 地址

和 IPv4 情形类似,我们可以很轻松地得到上面 4 个信息中的 3 个。

  • 源 MAC 地址
  • 源 IPv6 地址
  • 目的 IPv6 地址

现在我们同样只差一项了:2000::2 对应的 MAC 地址。

那么现在轮到…额,等等。我们不能使用 IPv4 网络中的 ARP 了。为什么呢?因为 ARP 是广播,而 IPv6 压 根没有广播,那我们应该怎么做呢?

根据前面所学,我们知道了,如果一个接口上配置了 2000::2/64 这样一个全球单播地址,它会根据接口配置 的单播地址自己计算出一个对应的组播地址 FF02::1:FF00::2 并加入这个组播组。

那这个地址有什么作用呢?

类似IPV4协议,虽然R1并不知道PC1的MAC地址,但它至少知道PC1一定会侦听一个 MAC 地址:FF:FF-FFFF-FF-FF 这个广播地址。通过这个广播地址,路由器 R1就能与PC1 搭上话,询问 PC1对应的MAC 地址是多 少。事实上不止PC1会监听这个广播地址,所有位于这个广播域的设备都会监听,只不过只有PC1会回复。

而现在,尽管在 IPv6 没有广播了,但路由器 R1还是知道PC1 必然侦听的一个 MAC 地址:33-33-FF-FF-00- 02—这个MAC地址是根据2000::2的组播地址FF02::1:FF00::2计算得出。

这下子路由器R1就能和 PC1 通信了,它也就能获取到想要的单播地址对应的 MAC 地址了,这也被称为 IPv6 的邻居发现(Neighbor Discovery)

邻居不可达性检测:

通过邻居或到达邻居的通信,会因各种原因而中断,包括硬件故障等。如果目的地失效,则恢复是不可能 的,通信失败;如果路径失效,则恢复是可能的。 因此节点需要维护一张邻居表,每个邻居都有相应的状 态,状态之间可以迁移。

邻居状态有5种,分别是:未完成(Incomplete)、可达(Reachable)、陈旧(Stale)、延迟(Delay)、 探查(Probe)。

display ipv6 neighbors —查看IPV6邻居表 

邻居状态迁移过程如下,其中Empty表示邻居表项为空,初始状态。

  1. 首先初始情况下Empty不是状态,只是代表没有发送NS报文之前,IPV6邻居为空
  2. 当A节点发送NS报文之后,自身会产生缓存消息,状态变为Incomplete—表示未完成
  3. 当A节点收到对方节点回复的NA报文,并且信息验证无误后,邻居状态由Incomplete变为Reachable (可达),否则固定时间后邻居状态由Incomplete变为Stale(陈旧)—默认时间为30S
  4. 经过30S邻居可达时间,状态由Incomplete变为Stale,意为未知目标是否可达 实际上stale状态是一个稳定状态,就是不会自己改变,因为正常情况下建立邻居后不会发送ICMP报 文,也就不会发送NS,所以实际上大部分的IPV6邻居都处于Stale状态。此时如果超过老化时间(缺省 情况下是20分钟),该表项没有被使用,也进入到DELAY状态。
  5. 如果在Reachable状态,A收到B的非请求NA报文,且报文中携带的B的链路层地址和表项中不同,则邻 居状态马上变为Stale。
  6. 在Stale状态若A要向B发送数据,则邻居状态由Stale变为Delay,并发送NS请求
  7. 向邻居发送NS报文,如果在指定时间内(缺省情况下是5秒)没有收到响应,则进入PROBE状态;若收 到NA应答,则变为REACH状态。其间若有NA应答,则邻居状态由Delay变为Reachable—,默认时 间5S
  8. 在Probe状态,按照RA报文发布的时间间隔Retrans Timer(或者主机配置值)发送单播邻居请求报文 NS,如果有应答,则进入REACH状态。如果无应答则邻居状态变为Empty,即删除表项。—时间间隔 默认3S。

重复地址检测

重复地址检测DAD(Duplicate Address Detect)是在接口使用某个IPv6单播地址之前进行的,主要是为了 探测是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。 一个IPv6 单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址(Tentative Address)。此时该接口 不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和试验地址所对应的 Solicited-Node组播组。

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

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

  • 如果Host B发现FC00::1是自身的一个试验地址,则Host B放弃使用这个地址作为接口地址,并且不会 发送NA报文。
  • 如果Host B发现FC00::1是一个已经正常使用的地址,Host B会向FF02::1发送一个NA报文,该消息中会 包含FC00::1。这样,Host A收到这个消息后就会发现自身的试验地址是重复的。Host A上该试验地址 不生效,被标识为duplicated状态。

从抓包结果来看,第一个NS包请求的是本地链路地址,R1路由器的0/0/0口除了自己配置的地址外,还存在 一个本地链路地址,这里R1上的本地链路地址为FE80::2E0:FCFF:FEF6:41EA,本地链路地址对应的组播地址 为 FF02::1:FFF6:41EA,这个数据包用来检测本地链路地址是否重复。也就是说实际上,IPV6地址检测会检测接口配置的IPV6地址是否冲突,同时也会检测本地链路地址是否会冲突。

https://support.huawei.com/enterprise/zh/doc/EDOC1100272823#ZH-CN_TOPIC_0000001467623457

路由器发现

路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。

在IPv6中,IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信息,然后主机自己生 成地址的接口标识部分。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:

  • 路由器通告RA(Router Advertisement)报文:每台设备为了让二层网络上的主机和设备知道自己的 存在,定时都会组播发送RA报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。RA报文的 Type字段值为134。
  • 路由器请求RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通 信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文。RS报文的Type字段值为133。

地址自动配置

IPv4使用DHCP实现自动配置,包括IP地址,缺省网关等信息,简化了网络管理。IPv6地址增长为128位,且 终端节点多,对于自动配置的要求更为迫切,除保留了DHCPV6作为有状态自动配置外,还增加了无状态自 动配置。无状态自动配置即自动生成链路本地地址,主机根据RA报文的前缀信息,自动配置全球单播地址 等,并获得其他相关信息。

IPv6主机无状态自动配置过程:

1. 根据接口标识产生链路本地地址。

接口激活IPV6服务后,将根据自身的接口MAC地址,生成本地链路地址。

2. 发出邻居请求,进行重复地址检测。

3. 如地址冲突,则停止自动配置,需要手工配置。

4. 如不冲突,链路本地地址生效,节点具备本地链路通信能力。

5. 主机会发送RS报文(或接收到设备定期发送的RA报文)。

6. 根据RA报文中的前缀信息和接口标识得到IPv6地址。

同时,值得注意的是上述所有报文均使用组播进行传递,NS—邻居发现报文使用被请求链路组播地址, RS/RA使用FF02::1用于在本地链路范围的所有节点的请求。

配置命令:

server端(R1)[Huawei]ipv6 —全局启动IPV6服务[Huawei-GigabitEthernet0/0/0]ipv6 enable —接口启动IPV6协议[Huawei-GigabitEthernet0/0/0]ipv6 address 2000::1 64—接口配置IPV6地址[Huawei-GigabitEthernet0/0/0]undo ipv6 nd ra halt —用来使能系统发布RA报文功能,重要配置 client端(R2)[Huawei]ipv6 —全局启动IPV6 [Huawei-GigabitEthernet0/0/0]ipv6 enable —接口启动IPV6服务[Huawei-GigabitEthernet0/0/0]ipv6 address auto global —接口无状态自动获取地址

默认路由器优先级和路由信息发现

当主机所在的链路中存在多个设备时,主机需要根据报文的目的地址选择转发设备。在这种情况下,设备通 过发布默认路由优先级和特定路由信息给主机,提高主机根据不同的目的地选择合适的转发设备的能力。

在RA报文中,定义了默认路由优先级和路由信息两个字段,帮助主机在发送报文时选择合适的转发设备。

主机收到包含路由信息的RA报文后,会更新自己的路由表。当主机向其他设备发送报文时,通过查询该列表 的路由信息,选择合适的路由发送报文。

主机收到包含默认设备优先级信息的RA报文后,会更新自己的默认路由列表。当主机向其他设备发送报文 时,如果没有路由可选,则首先查询该列表,然后选择本链路内优先级最高的设备发送报文;如果该设备故 障,主机根据优先级从高到低的顺序,依次选择其他设备。

重定向

当网关设备发现报文从其它网关设备转发更好,它就会发送重定向报文告知报文的发送者,让报文发送者选择另一个网关设备。重定向报文也承载在ICMPv6报文中,其Type字段值为137,报文中会携带更好的路径下 一跳地址和需要重定向转发的报文的目的地址等信息。

Host A需要和Host B通信,Host A的默认网关设备是Switch A,当Host A发送报文给Host B时报文会被送到 Switch A。Switch A接收到Host A发送的报文以后会发现实际上Host A直接发送给Switch B更好,它将发送 一个重定向报文给主机A,其中报文中更好的路径下一跳地址为Switch B,Destination Address为Host B。 Host A接收到了重定向报文之后,会在默认路由表中添加一个主机路由,以后发往Host B的报文就直接发送 给Switch B。

当设备收到一个报文后,只有在如下情况下,设备会向报文发送者发送重定向报文:

  • 报文的目的地址不是一个组播地址。
  • 报文并非通过路由转发给设备。
  • 经过路由计算后,路由的下一跳出接口是接收报文的接口。
  • 设备发现报文的最佳下一跳IP地址和报文的源IP地址处于同一网段。
  • 设备检查报文的源地址,发现自身的邻居表项中有用该地址作为全球单播地址或链路本地地址的邻居存 在。

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

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

相关文章

【晴问算法】入门篇—贪心算法—区间不相交问题

题目描述 给定n个开区间,从中选择尽可能多的开区间,使得这些开区间两两没有交集。 输入描述 输出描述 输出一个整数,表示最多选择的开区间个数。 样例1输入 4 1 3 2 4 3 5 6 7 输出 3 解释 最多选择(1,3)、(3,5)、(6,7)三个区间,它…

SAP前台处理:销售业务集成<VA03/VL03N/VLPOD/VF03) 01/02

一、背景: 从销售订单创建VA01>发货过账VL01N >POD确认>VF01开票 这个流程涉及的凭证流及各个节点如何查询上游下游凭证; 二、凭证流: 从销售订单查看销售凭证流 VA03 双击交货单:带出交货单对应行项目及分批次项目…

SpringBoot(文件上传功能,阿里云OSS存储,几种配置文件用法)【详解】

目录 一、新增员工 二、文件上传-技术点 1. 文件上传功能 1.客户端上传文件三要素 2 服务端接收文件 Controller接收文件示例 修改允许上传的文件大小 2. 本地存储文件 3. 阿里云OSS存储(这里只写一种,可以用其它的) 1.介绍 2.开通…

try~catch语句

用try~catch语句来处理异常,将可能出现的异常操作放在 try部分,将发生异常后的处理放在catch部分。 带finally子语句的try~catch 语法格式 执行机制 ★注意★: try~catch中执行了return → finally子语句仍被执行; try~catch中执…

VScode(8)之阅读大型CC++工程

VScode(8)之阅读大型CC工程(Linux内核)代码 Author:Once Day Date:2023年4月25日/2024年3月17日 漫漫长路,有人对你微笑过嘛… 全系列文章请查看专栏: VScode开发_Once-Day的博客-CSDN博客 参考文档: 1. 历史包袱 由于上世纪70-80年代的…

语音神经科学—04.Speech Computations of the Human Superior Temporal Gyrus

Speech Computations of the Human Superior Temporal Gyrus(人类颞上沟的言语计算) 专业术语 Superior Temporal Gyrus 颞上沟 phoneme 音素 syllable 音节 speech perception 语音感知 vocal tract 声道 acoustic 声学的 articulatory 发音的 spectro…

【基于Seeed xiao ESP32S3 Sense的自动化HA鱼缸设计】

1.前言 基于Seeed xiao ESP32S3 Sense的自动化HA鱼缸 在当今物联网与智能家居科技日益发达的时代,将先进技术和传统养鱼艺术融合,创造出智能、自动化且极具观赏价值的鱼缸已成为一种创新趋势。SeeedStudio推出的Xiao ESP32-S3 Sense开发板以其卓越的性能…

command failed: npm install --loglevel error --legacy-peer-deps

在使用vue create xxx创建vue3项目的时候报错。 解决方法,之前使用的https://registry.npm.taobao.org 证书过期更换镜像地址即可 操作如下: 1.cd ~2.执行rm .npmrc3. sudo npm install -g cnpm --registryhttp://registry.npmmirror.com…

基于高斯模型的运动目标检测(车辆检测),Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

Vue3:标签的ref属性用法

一、情景说明 我们在写前端页面的时候,肯定会遇到获取DOM内容的情况。 以往,我们是用原生的js方法去获取,如document.getXxxx 但是,这中方法会有个问题,如果父组件和子组件的id相同,则会出错。 在Vue3中&…

ASP.NET 服务器控件

目录 一、使用的软件 1、下载 2、新建文件(写一个简单的web网页) 二、相关知识点 1、Web窗体网页的组件 (1)可视化组件 (2)用户接口逻辑 2、Web Form网页的代码模型 (1)单文件…

《硬件历险》之Mac抢救出现问题的时间机器硬盘中的数据

本文虽然使用“抢救”一词,但是运气比较好,远没有达到访问和修改底层的信息来抢救的地步。如果你是需要通过访问和修改底层信息来抢救数据,建议阅读刘伟的《数据恢复技术深度揭秘(第二版)》或者寻找专业人士的帮助。 《…

视频基础知识(一) 视频编码 | H.26X 系列 | MPEG 系列 | H.265

文章目录 一、视频编码二、 H.26X 系列1、H.2612、H.2633、H.2643.1 I帧3.2 P帧3.3 B帧 4、H.265 三、 MPEG 系列1、MPEG-12、MPEG-23、MPEG-44、MPEG-7 🚀 个人简介:CSDN「博客新星」TOP 10 , C/C 领域新星创作者💟 作 者&…

微信小程序调用百度智能云API(菜品识别)

一、注册后生成应用列表创建应用 二、找到当前所需使用的api菜品识别文档 三、点链接看实例代码 这里需要使用到如下几个参数(如下),其他的参数可以不管 client_id : 就是创建应用后的API Keyclient_secret: 就是创建…

GAN及其衍生网络中生成器和判别器常见的十大激活函数(2024最新整理)

目录 1. Sigmoid 激活函数 2. Tanh 激活函数 3. ReLU 激活函数 4. LeakyReLU 激活函数 5. ELU 激活函数 6. SELU 激活函数 7. GELU 激活函数 8. SoftPlus 激活函数 9. Swish 激活函数 10. Mish 激活函数 激活函数(activation function)的作用是对网络提取到的特征信…

鸿蒙开发实战:【Faultloggerd部件】

theme: z-blue 简介 Faultloggerd部件是OpenHarmony中C/C运行时崩溃临时日志的生成及管理模块。面向基于 Rust 开发的部件,Faultloggerd 提供了Rust Panic故障日志生成能力。系统开发者可以在预设的路径下找到故障日志,定位相关问题。 架构 Native In…

21 OpenCV 直方图均衡化

文章目录 直方图概念均衡的目的equalizeHist 均衡化算子示例 直方图概念 图像直方图,是指对整个图像像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图-直方图。直方图反映了图像灰度的分布情况。 均衡的目的…

Ypay源支付2.8.8免授权聚合免签系统

本帖最后由 renleixiaoxu 于 2024-3-15 09:46 编辑 产品介绍 XPay是专为个人站长打造的聚合免签系统,拥有卓越的性能和丰富的功能。采用全新轻量化的界面UI,让您可以更加方便快捷地解决 知识付费和运营赞助的难题。同时,它基于高性能的Thin…

Unity在UGUI上通过绘制网格顶点自由画线

该插件的实现是使用UI组件的绘图API来动态生成和修改几何形状,可自由动态更改画线的粗细、拐角圆滑度、颜色,自由增减节点,不额外增加gameobject,并且在原生的UGUI上以ScreenSpace-Overlay的状态下,显示效果如下所示 …

数学建模-邢台学院

文章目录 1、随机抽取的号码在总体的排序2、两端间隔对称模型 1、随机抽取的号码在总体的排序 10个号码从小到大重新排列 [ x 0 , x ] [x_0, x] [x0​,x] 区间内全部整数值 ~ 总体 x 1 , x 2 , … , x 10 总体的一个样本 x_1, x_2, … , x_{10} ~ 总体的一个样本 x1​,x2​,……