【2020-02-25】【转】IPv6邻居发现协议

发布时间:2026/7/23 21:01:00

【2020-02-25】【转】IPv6邻居发现协议
[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2020-02-25 标题【转】IPv6邻居发现协议分类网络通讯 / IPV6 标签ipv6IPv6邻居发现协议邻居发现协议NDP地址解析IPv6地址解析过程分析报文抓包分析跟踪邻居状态邻居状态的具体迁移过程重复地址检测重复地址检测原理抓包分析IPv6地址生命周期路由器发现地址自动配置默认路由器优先级和路由信息发现重定向本文转自【 https://cshihong.github.io/2018/01/29/IPv6邻居发现协议/ 】有删改。邻居发现协议NDP邻居发现协议**NDPNeighbor Discovery Protocol**是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARPAddress Resolution Protocol和ICMP路由器发现Router Discovery它定义了使用ICMPv6报文实现地址解析跟踪邻居状态重复地址检测路由器发现以及重定向等功能。地址解析在IPv4中当主机需要和目标主机通信时必须先通过ARP协议获得目的主机的链路层地址。在IPv6中同样需要从IP地址解析到链路层地址的功能。邻居发现协议实现了这个功能。ARP报文是直接封装在以太网报文中以太网协议类型为0x0806普遍观点认为ARP定位为第2.5层的协议。ND本身基于ICMPv6实现以太网协议类型为0x86DD即IPv6报文IPv6下一个报头字段值为58表示ICMPv6报文由于ND协议使用的所有报文均封装在ICMPv6报文中一般来说ND被看作第3层的协议。在三层完成地址解析主要带来以下几个好处地址解析在三层完成不同的二层介质可以采用相同的地址解析协议。可以使用三层的安全机制避免地址解析攻击。使用组播方式发送请求报文减少了二层网络的性能压力。地址解析过程中使用了两种ICMPv6报文邻居请求报文NSNeighbor Solicitation和邻居通告报文NANeighborAdvertisement。NS报文Type字段值为135Code字段值为0在地址解析中的作用类似于IPv4中的ARP请求报文。NA报文Type字段值为136Code字段值为0在地址解析中的作用类似于IPv4中的ARP应答报文。IPv6地址解析过程分析1 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的链路层地址。2 当Host B接收到了NS报文之后就会回应NA报文其中源地址为Host B的IPv6地址目的地址为Host A的IPv6地址使用NS报文中的Host A的链路层地址进行单播Host B的链路层地址被放在Options字段中。这样就完成了一个地址解析的过程。报文抓包分析拓扑如下首先在两端各配上IPv6地址然后在AR1上ping ipv6 -a 2000::1 2000::2。抓包如下NS报文内容如下AR1会以2000::1作为源地址目标地址为2000::2的被请求节点组播地址 ff02::1:ff00:2。然后将AR1的MAC地址携带在ICMPc6的Option中。在ICMPv6中还会携带Target Address2000::2这个用来防止在广播网中有多个前缀不同最后24bit相同而造成的混乱。携带这个字段后当主机收到这个报文后会首先检查该字段是否是自己的IPv6地址如果是则接收并回应NA报文。如果该字段的地址不是自己的IPv6地址则丢弃。NA报文内容如下当AR2收到AR1发送的NS报文后检查Target Address字段如果是自己的IPv6地址接收并将对端的IP地址和MAC地址绑定到自己的邻居表中。然后以自己IPv6地址2000::2为源地址对端IPv6地址2000::1为目的地址。并将自己的MAC地址封装在ICMPv6的Option中发送给对方。从而两端都知道了对方的MAC地址。可以进行二次封装。邻居通告报文中Flags字段解释R路由器标记。当置1时R位指出发送者是路由器。R位由Neighbor Unreachability Detection使用用于检测改变为主机的路由器。S请求标记。当置1时S位指出通告被发送以响应来自目的地地址的Neighbor Solicitation。S位用作Neighbor Unreachability Detection的可达性确认。在多播通告和非请求单播通告中置0。O替代标记。替代标志1表示通告中的信息替代缓存如更新链路层地址时对于任播的回应则不应置位。在针对任播地址的请求通告中以及在请求的前缀通告中它不能被置1。在其他请求通告中和在非请求通告中它应当被置1。Target Address对于请求的通告是在Neighbor Solicitation消息(该消息催促这个通告)中的Target Address字段。对于非请求通告是其链路层地址已经改变的地址。Target Address必须不是多播地址。跟踪邻居状态通过邻居或到达邻居的通信会因各种原因而中断包括硬件故障、接口卡的热插入等。如果目的地失效则恢复是不可能的通信失败如果路径失效则恢复是可能的。因此节点需要维护一张邻居表每个邻居都有相应的状态状态之间可以迁移。RFC2461中定义了5种邻居状态分别是未完成Incomplete可达Reachable陈旧Stale延迟Delay探查Probe邻居状态的具体迁移过程下面以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例假设A、B之前从未通信说明邻居状态迁移的过程。1 A先发送NS报文并生成缓存条目此时邻居状态为Incomplete。2 若B回复NA报文则邻居状态由Incomplete变为Reachable否则固定时间后邻居状态由Incomplete变为Empty即删除表项。3 经过邻居可达时间邻居状态由Reachable默认30s变为Stale即未知是否可达。4 如果在Reachable状态A收到B的非请求NA报文MAC地址修改且报文中携带的B的链路层地址和表项中不同则邻居状态马上变为Stale。5 在Stale状态若A要向B发送数据则邻居状态由Stale变为Delay并发送NS请求。6 在经过一段固定时间后邻居状态由Delay默认5s变为Probe每隔1s发送一次NS报文连续发送3次其间若有NA应答则邻居状态由Delay变为Reachable。7 在Probe状态A每隔一定时间间隔z(1s)发送单播NS发送固定次数(3)后有应答则邻居状态变为Reachable否则邻居状态变为Empty即删除表项。重复地址检测重复地址检测DADDuplicate 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的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状态。3 一种极端的情况如果同时收到NS报文则两端都放弃改地址。抓包分析当在AR3上配置2000::1/64地址时AR3首先会以 :: 为源地址以自己配置的2000::1的被请求节点组播地址为目的地址发送NS报文。如果有来自2000::1的NA回复则该地址不能用。如果没收到则该地址可以使用。在这个报文中因为AR1上已经使用了2000::1/64地址所以会回复一个NA。如下IPv6地址生命周期在preferred time和valid lifetime之间叫做deprecated弃用状态当地址达到这个时间段的时候地址不能主动的发起连接只能是被动的接受连接过了valid lifetime时间地址就变为invalid这时任何连接就会down掉。路由器发现路由器发现功能用来发现与本地链路相连的设备并获取与地址自动配置相关的前缀和其他配置参数。在IPv6中IPv6地址可以支持无状态的自动配置即主机通过某种机制获取网络前缀信息然后主机自己生成地址的接口标识部分。路由器发现功能是IPv6地址自动配置功能的基础主要通过以下两种报文实现路由器请求RSRouter Solicitation报文很多情况下主机接入网络后希望尽快获取网络前缀进行通信此时主机可以立刻发送RS报文网络上的设备将回应RA报文。RS报文的Tpye字段值为133。路由器通告RARouter Advertisement报文每台设备为了让二层网络上的主机和设备知道自己的存在定时都会组播发送RA报文RA报文中会带有网络前缀信息及其他一些标志位信息。RA报文的Type字段值为134。RA报文中字段解释Cur Hop Limit默认值应当放置在发出IP分组的IP首部的Hop Count字段中。 取0值意味着未(由该路由器)规定。MM位为0表示无状态自动配置生成IPv6地址如果M1表示需要通过有状态DHCPv6方式获取ipv6地址。OO位为0表示除了IPv6地址以外的其他参数需要通过无状态自动配置获取如果O1表示除了IPv6地址以外的其它需要通过有状态DHCPv6方式进行获取。Router Lifetime与默认路由器关联的生存期以秒为单位。最大值18.2小时。取0值的Lifetime指出路由器不是默认路由器并且不应当出现在默认路由器列表中。Router Lifetime仅适用于作为默认路由器的路由器应用对包括在其他消息字段或选项中的信息不适用。需要对它们的信息规定时间限制的选项有它们自己的生存期字段。Reachable time此时间以毫秒计在收到可达性确认后节点假定该邻居是可到达的。它由Neighbor Unreachability Detection算法使用。此值为0意味着没有(由此路由器)作出规定。Retrans Timer重发的Neighbor Solicitation消息间隔时间以毫秒计。由地址解析和Neighbor Unreachability Detection算法使用。此值为0意味着没有(由此路由器)作出规定。ICMP Prefix Option中的flag字段aoto-config:如果该位为1表示该前缀可以用于无状态自动配置如果为0不能用于无状态自动配置。on-link指定0-flag标识位。若配置该参数则只会本地链路内的主机RA报文中的前缀不是分配给本地链路的。主机若想该前缀指定的地址发送报文时需要经过默认路由器转发。地址自动配置IPv4使用DHCP实现自动配置包括IP地址缺省网关等信息简化了网络管理。IPv6地址增长为128位且终端节点多对于自动配置的要求更为迫切除保留了DHCP作为有状态自动配置外还增加了无状态自动配置。无状态自动配置即自动生成链路本地地址主机根据RA报文的前缀信息自动配置全球单播地址等并获得其他相关信息。IPv6主机无状态自动配置过程1 根据接口标识产生链路本地地址。2 发出邻居请求进行重复地址检测。3 如地址冲突则停止自动配置需要手工配置。4 如不冲突链路本地地址生效节点具备本地链路通信能力。5 主机会发送RS报文或接收到设备定期发送的RA报文。6 根据RA报文中的前缀信息和接口标识得到IPv6地址。默认路由器优先级和路由信息发现当主机所在的链路中存在多个设备时主机需要根据报文的目的地址选择转发设备。在这种情况下设备通过发布默认路由优先级和特定路由信息给主机提高主机根据不同的目的地选择合适的转发设备的能力。在RA报文中定义了默认路由优先级和路由信息两个字段帮助主机在发送报文时选择合适的转发设备。主机收到包含路由信息的RA报文后会更新自己的路由表。当主机向其他设备发送报文时通过查询该列表的路由信息选择合适的路由发送报文。主机收到包含默认设备优先级信息的RA报文后会更新自己的默认路由列表。当主机向其他设备发送报文时如果没有路由可选则首先查询该列表然后选择本链路内优先级最高的设备发送报文如果该设备故障主机根据优先级从高到低的顺序依次选择其他设备。重定向当网关设备发现报文从其它网关设备转发更好它就会发送重定向报文告知报文的发送者让报文发送者选择另一个网关设备。重定向报文也承载在ICMPv6报文中其Type字段值为137报文中会携带更好的路径下一跳地址和需要重定向转发的报文的目的地址等信息。Host A需要和Host B通信Host A的默认网关设备是Router A当Host A发送报文给Host B时报文会被送到Router A。Router A接收到Host A发送的报文以后会发现实际上Host A直接发送给Router B更好它将发送一个重定向报文给主机A其中报文中更好的路径下一跳地址为Router BDestination Address为Host B。Host A接收到了重定向报文之后会在默认路由表中添加一个主机路由以后发往Host B的报文就直接发送给Router B。

相关新闻

90后35岁时我决定从运维转行:找一门越老越吃香的职业!

90后35岁时我决定从运维转行:找一门越老越吃香的职业!

2026/7/23 20:50:59

90 后 35岁时我决定从运维转行:找一门越老越吃香的职业! 35岁之前,我总认为运维这个职位只要能熬得住、愿意加班的话,就一定能够熬出头来。但是真正做了几年之后才明白过来,巡检、处理报警、半夜救火等事情已经成为了…

剪映AI模板库突然消失?2024年Q3算法升级后,这12类账号正被悄悄限流——附3套合规替代方案

剪映AI模板库突然消失?2024年Q3算法升级后,这12类账号正被悄悄限流——附3套合规替代方案

2026/7/23 20:50:59

更多请点击: https://intelliparadigm.com 第一章:剪映AI模板库异常消失的底层机制解析 剪映AI模板库在客户端无预警“清空”并非界面渲染故障,而是由服务端策略性响应与本地缓存协同失效共同触发的复合型状态异常。其核心机制涉及三重依赖&…

Django计算机毕设之基于Django的轻量化鲜花电商购物平台的设计与实现 花艺产品线上订购与售后管理系统(完整前后端 代码+说明文档+LW,调试定制等)

Django计算机毕设之基于Django的轻量化鲜花电商购物平台的设计与实现 花艺产品线上订购与售后管理系统(完整前后端 代码+说明文档+LW,调试定制等)

2026/7/23 20:50:59

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【RT-DETR涨点改进】TGRS 2026 | 卷积创新改进篇 | 引入 3DSBE 三维光谱瓶颈增强模块,增强模型对通道间互补信息的利用能力,助力高光谱目标检测、遥感目标检测任务,有效涨点

【RT-DETR涨点改进】TGRS 2026 | 卷积创新改进篇 | 引入 3DSBE 三维光谱瓶颈增强模块,增强模型对通道间互补信息的利用能力,助力高光谱目标检测、遥感目标检测任务,有效涨点

2026/7/23 21:51:02

一、本文介绍 🔥本文给大家介绍使用 3DSBE 三维光谱瓶颈增强模块 改进RT-DETR网络模型,主要作用是在特征提取阶段强化不同通道或波段之间的相关性,减少冗余信息,并为后续多尺度融合提供更具判别力的特征表示。该模块通过空间下采样与通道扩展降低计算负担,再采用主、辅双…

为什么你的AI自动化项目卡在85%?资深架构师亲授“最后一公里”攻坚清单

为什么你的AI自动化项目卡在85%?资深架构师亲授“最后一公里”攻坚清单

2026/7/23 21:51:02

更多请点击: https://kaifayun.com 第一章:为什么你的AI自动化项目卡在85%? 当模型在验证集上稳定达到84.7%–85.3%准确率却再难提升时,问题往往不在算法本身,而在于数据闭环的断裂与工程化落地的盲区。大量团队将精力…

AgentLock 首跑不要先测“能否拦截”:先验证 ALLOW、DENY、DEFER 与版本边界

AgentLock 首跑不要先测“能否拦截”:先验证 ALLOW、DENY、DEFER 与版本边界

2026/7/23 21:51:02

很多 Agent 安全测试一上来就塞一段提示注入,然后看工具有没有被拦住。这个顺序不可靠:如果你没有记录安装的版本、策略文件、上下文来源和最终决策,测试结果无法复现。我在 AgentLock 的首跑里先做四件事。第一,分清证据版本。Do…

【免费赠书活动】吃透大模型底层数学,从公式原理到产业实战,打通AI进阶全链路

【免费赠书活动】吃透大模型底层数学,从公式原理到产业实战,打通AI进阶全链路

2026/7/23 21:51:02

人工智能大模型数学基础从数学公式到智能模型,打通AI底层逻辑——线性代数、微积分、概率与统计三大支柱,结合BERT、GPT、Stable Diffusion等前沿实战,带你从理论推导到代码落地,真正掌握大模型的数学引擎。本书特点基础→进阶→A…

TVA驱动的具身智能迭代逻辑(3)

TVA驱动的具身智能迭代逻辑(3)

2026/7/23 21:51:02

前沿技术探索:AI智能体视觉(TVA,Transformer-based Vision Agent)是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术,是集深度强化学习(DRL)、卷积神经网络(CNN…

2026年ERP实施服务指南

2026年ERP实施服务指南

2026/7/23 21:41:01

在数字经济与智能制造深度融合的2026年,企业资源规划(ERP)系统已不再是大型企业的专属奢侈品,而是决定中小型制造企业生存与发展的核心基础设施。面对日益复杂的供应链、激烈的市场竞争以及不断攀升的合规成本,一套契合…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/23 3:40:08

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/23 4:40:05

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/23 1:54:13

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

企业级AI搜索落地选型实战手册(含LLM+RAG+Hybrid架构对比矩阵与ROI测算模板)

企业级AI搜索落地选型实战手册(含LLM+RAG+Hybrid架构对比矩阵与ROI测算模板)

2026/7/23 0:09:56

更多请点击: https://kaifayun.com 第一章:企业级AI搜索落地选型实战手册(含LLMRAGHybrid架构对比矩阵与ROI测算模板) 企业级AI搜索系统落地成败,核心在于技术选型与业务价值的精准对齐。盲目堆砌大模型能力或过度依赖…

TM4C129LNCZAD外设实战:LCD、比较器与PWM寄存器配置详解

TM4C129LNCZAD外设实战:LCD、比较器与PWM寄存器配置详解

2026/7/23 0:09:56

1. 项目概述与核心价值在嵌入式系统开发,尤其是基于ARM Cortex-M内核的微控制器项目中,深入理解并熟练配置芯片的片上外设,是从“点亮LED”迈向“实现复杂系统功能”的关键一步。Tiva™ TM4C129LNCZAD作为TI公司Cortex-M4F家族中的高性能成员…

AtomCode `fmt_dur` 争议溯源:两个函数、三段演进、四个事实

AtomCode `fmt_dur` 争议溯源:两个函数、三段演进、四个事实

2026/7/23 0:09:56

一、快速声明与争议背景本文是对 AtomCode 终端 spinner 时长显示 fmt_dur 相关说法的事实性核验。2026 年 7 月 CSDN 上出现两篇互相矛盾的博文,近期又有 AI 在对话中输出格式描述 XhYm / YmZs / Zs。本文基于 AtomCode 仓库 main4677ddfa 及全分支 Git 历史给出可…