IPV6 邻居发现协议(NDP)

2023-10-30 18:18
文章标签 协议 发现 ipv6 邻居 ndp

本文主要是介绍IPV6 邻居发现协议(NDP),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IPV6除了显著增加了地址空间外,另一个最显著的特征就是它的即插即用性。
邻居发现协议(Neighbor Discovery Protocol,NDP)就是使用以下的功能实现即插即用特性的协议:

  • 路由器发现:当一个节点连接到一个IPV6的链路时,它能够发现本地的路由器,不必借助DHCP。
  • 前缀发现:当一个节点连接到一个IPV6的链路时,它能够发现分配给该链路的前缀。
  • 参数发现:节点能够发现它所相连的链路的参数(链路的MTU和跳数限制等)。
  • 地址自动配置:节点能够确定他的完整性,不需要DHCP。
  • 地址解析 :节点不需要借助ARP就能够发现所连接链路上其他节点的链路层地址。
  • 下一跳确定:一条链路上的节点能够确定到达目的节点的下一跳链路层节点。
  • 邻居不可达检测 :节点能检测到链路上的邻居(主机或路由器)何时不再可达。
  • 地址冲突检测:节点能检测到他所要使用的地址是否已经被链路上的其他节点所占用。
  • 重定向:对于非连接的目的节点,路由器能够通过重定向消息通知主机存在比它自己更好的下一跳路由。

NDP消息

NDP定义了5种ICMPv6报文类型:

  • 类型133 路由器请求(RS):由主机发起,用来请求一个路由器发送一个RA

  • 类型134 路由器通告(RA):由路由器发起,通告路由器的存在和链路的细节参数(链路前缀,MTU,跳数限制等),周期性发送,也用于答RS。

  • 类型135 邻居请求(NS):由节点主机发起,用来请求另一台主机的链路层地址,或实现地址冲突检测、邻居不可达检测。

  • 类型136 邻居通告(NA):有节点发起用来响应NS,如果一个节点改变了他的链路层地址,那么它能够主动发送一个NA来通告这个新地址。

  • 类型137 重定向(Redirect)

NDP消息通常在链路本地的范围内收发。
为了进一步增强安全性,承载所有NDP消息的IPV6数据包的跳数限制为255,如果收到的数据包跳数小于255的,说明该数据包最少已经经过一台路由器,因此该数据包应该被丢弃。这样可以防止NDP受到来自不与本地链路相连的源节点的攻击或欺骗。

路由器发现

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

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

RA报文:每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送RA报文,最小缺省周期为200S,RA报文中会带有网络前缀信息,及其他一些标志位信息。未经请求的RA源地址是路由器接口的链路地址,目的地址是所有节点的多播地址(FE02::1)。

RS报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文。RS的源地址可以是未指定的地址(::),也可以是该主机的链路本地地址,目的地址则始终是所有路由器的多播地址(FE02::2)。

当一台主机收到一条RA时,它就会将这台路由器添加到他的缺省路由器列表中,如果存在多台路由器条目时,要么在列表中依次轮询,要么选择保持单台路由器作为缺省路由。

地址自动配置

当一台IPV6的主机第一次连接到链路上时,他能够自我配置自己接口的链路地址:在自己接口的48位的MAC地址中间插入一个保留的16位数值0xFFFE,并把它的U/L位(第七位)翻转,这样就得到了一个64位接口ID。在接口ID前面加上链路本地前缀FE80::/10,就得到了链路本地地址
在这里插入图片描述
如果主机只需要和所在链路上的设备通信时,自动配置的地址已经足够,但是要和链路以外的主机通讯时,就需要更大的范围地址,通常使用以下两种方法获取地址:

  • 有状态:借助DHCPV6获取地址。
  • 无状态:主机将RA发来的链路前缀加上自己确定的接口ID,这样就得到了一个全球唯一的IPV6地址

地址冲突检测(类FARP)

当节点获取到一个新的地址时会将该地址归类位临时状态,在地址冲突检测没有完成并确认之前该地址不能被使用。
Host A的IPv6地址FC00::1为新配置地址,即FC00::1为Host A的试验地址。Host A向FC00::1的Solicited-Node组播组发送一个以FC00::1为请求的目标地址的NS报文进行重复地址检测,由于FC00::1并未正式指定,所以NS报文的源地址为未指定地址。当Host B收到该NS报文后,有两种处理方法
1.如果Host B发现FC00::1是自身的一个试验地址,则Host B放弃使用这个地址作为接口地址,并且不会发送NA报文。

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

邻居地址解析(类ARP)

Host A在向Host B发送报文之前它必须要解析出Host B的链路层地址,所以首先Host A会发送一个NS报文,其中源地址为Host A的IPv6地址,目的地址为Host B的被请求节点组播地址,需要解析的目标IP为Host B的IPv6地址,这就表示Host A想要知道Host B的链路层地址。同时需要指出的是,在NS报文的Options字段中还携带了Host A的链路层地址。

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

邻居不可达性的检测

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

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

下面以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设A、B之前从未通信),说明邻居状态迁移的过程。

A先发送NS报文,并生成缓存条目,此时,邻居状态为Incomplete。

若B回复NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后邻居状态由Incomplete变为Empty,即删除表项。

经过邻居可达时间,邻居状态由Reachable变为Stale,即不确定邻居节点的可达性。

如果在Reachable状态,A收到B的非请求NA报文,且报文中携带的B的链路层地址和表项中不同,则邻居状态马上变为Stale。

在STALE状态到达老化时间后进入Delay状态。

在经过一段固定时间(5秒)后,邻居状态由Delay变为Probe,其间若有NA应答,则邻居状态由Delay变为Reachable。

在Probe状态,A每隔一定时间间隔(1秒)发送单播NS,发送固定次数(3次)后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty,即删除表项。

邻居不可达性的检测需要双向检测,所以当一个未经请求的RA或NA不能改变邻居缓存条目的状态到Reachable。

这篇关于IPV6 邻居发现协议(NDP)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/309732

相关文章

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

【微服务】Ribbon(负载均衡,服务调用)+ OpenFeign(服务发现,远程调用)【详解】

文章目录 1.Ribbon(负载均衡,服务调用)1.1问题引出1.2 Ribbon负载均衡1.3 RestTemplate整合Ribbon1.4 指定Ribbon负载均衡策略1.4.1 配置文件1.4.2 配置类1.4.3 定义Ribbon客户端配置1.4.4 自定义负载均衡策略 2.OpenFeign面向接口的服务调用(服务发现,远程调用)2.1 OpenFeign的使用2.1 .1创建

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

基于IPv6的下一代网络技术的特征分析

1.引言   随着IPv4地址的耗尽,以及网络接入用户的不断庞大,向IPv6过渡已经是势在必行,IPv6作为新一代的网络协议,不仅具有海量的IP地址资源,而且由于其数据包可以更大,从而实现更可靠、更快速地进行数据的传输,同时通过在数据报头中添加流标记和业务级别大大地改善QoS,且任何设备接入IPv6后即可获取相应的设置,大大地简化用户操作,满足移动性等要求,最重要的一点是,IPv6通过I

DNS协议基础笔记

1.定义 DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 2.域名解析过程 当用户在浏览器中输入一个域名,浏览器首先会检查自己的缓存中是否有该域名对应的 IP 地址。本地 DNS 服务器收到查询请求后,首先会检查自己的缓存中是否有该域名对应的 IP 地址。根域名服务器收到查询请