ICMPv6与NDP

article/2025/10/30 8:30:04

1      ICMPv6

1.1    报文格式

ICMPv6协议号为58,即next header值为58,除了IPv4的作用外,还增加了邻居发现、无状态自动配置、PMTU等功能,报文格式如下:

0          7

15

31

Type

Code

Checksum

Message Body

Type:8bit,表明消息类型,0~127代表错误报文(即最高位为0),128~255代表消息报文(即最高位为1);

Code:8bit,表明具体的原因;

Checksum:16bit,校验和,验证报头完整性

Message Body:可变长,数据部分。

Typer类型表

Type

Code

备注

1(目的不可达)

0

没有去往目的地的路由

1

与目的地的通信被管理员禁止

2

超出源地址范围

3

地址不可达

4

端口不可达

5

源地址在进出策略中拒绝

6

拒绝去目的地的路由

2(数据包过大)

0

此报文必须是路由器发送,用于响应数据包大于出接口MTU情况时不能被转发,此报文会携带本接口MTU发给源端,是PMTU发现的基础

3(超时)

0

超出TTL限制

1

分片重组超时

4(参数错误)

1

基本头或者扩展头有错误的字段

2

有不可识别的next header字段

3

扩展头中有未知的选项

128

0

Echo Request

129

0

Echo Reply

133

0

RS(router solicitation)消息

134

0

RA(router advertisement)消息

135

0

NS(Neighbor Solicitation)消息

136

0

NA(Neighbor Advertisement)

137

0

Redirect消息

 

1.2    RS消息

主机刚接入网络并配置为自动获取地址,主机需要自动获取前缀、前缀长度、默认网关等信息时就会发送RS(router solicitation )消息。

源IP为发送接口的Link Local地址或未指定,目的FF02::1(所有节点组播相当于广播)或FF02::2(所有路由器),路由器收到RS后立即回复RA。

 

Type=133

Code=0

Checksum

Reserved

Option… …

 

Type:8bit,值为133

Code:8bit,值为0

Checksum:校验和,验证报头完整性

前3字段为正常的ICMPv6报头

Reserved:32bit,保留为0

Option:选项值,目前只定义了发送者的链路层地址(MAC),如果未指定则不包含该选项

1.3    RA消息

RA(router advertisement)消息由路由器周期性发送或者收到RS后立即发送,为主机提供前缀、前缀长度、默认网关等编址和配置信息,源IP为发出消息接口的Link Local地址,目的为FF02::1(所有节点)

Type=134

Code=0

Checksum

Cur Hop Limit

M

O

Reserved

Router Lifetime

Reachable Time

Retrans Timer

Options… …

  

Type:8bit,值134

Code:8bit,保留全0

Checksum:16bit,校验和

前3字段为ICMPv6报头

Cur Hop Limit:8bit,路由器建议采用无状态自动配置的主机在IP包里的跳数限制为该字段的值,0表示不推荐,由主机自行设置

M位:1bit,管理地址配置位,0表示使用无状态自动配置,1表示告诉主机使用DHCPv6来获取配置,当M位为1时O位无意义,因为所有参数都可以通过DHCPv6获取

O位:1bit,其他配置标志位,0表示DHCPv6服务器没有其他可用信息,1表示其他参数使用DHCPv6服务器获取,包括路由器生存时间、邻居可达时间、邻居重传时间、链路MTU、DNS等

如果M和O位都不设置(全0),表示无法通过DHCPv6获取配置信息

Reserved:6bit,保留

Router Lifetime:16bit,默认路由器关联生存时间,为单位,最大65535

华为确实1800s,表示主机把该路由器当作默认网关的有效时间,0表示主机不将该路由器作为默认网关,主机每次收到RA将刷新该计时器

Reachable Time:32bit,毫秒为单位,表示通告邻居可达时间,用作邻居不可达检测,0表示未指定

Retrans Timer:32bit,重传计时器,毫秒为单位,表示主机在主机重传邻居请求消息前等待时间,用作地址解释和邻居不可达检测,0表示未指定

RS和RA消息可完成无状态自动配置和路由器发现

1.4    NS消息

NS(Neighbor Solicitation)邻居请求消息用于完成类似IPv4的ARP解析功能,查找目标的链路层地址,源地址接口的Global地址,目标地址是被访问的地址所对应的被请求节点的组播地址,消息中包含源链路层地址(一般指MAC),NS还可以用来检测邻居可达性和地址冲突,在进行地址冲突检测时源地址为未指定地址(全0)

Type=135

Code=0

Checksum

 

Reserved

 

Target Address

 
 
 
 

Option… …

  

Type:8bit,值135

Code:8bit,保留全0

Checksum:16bit,校验和

前3字段为ICMPv6报头

Reserved:32bit,保留

Target Address:128bit,目的IPv6地址,不能使用组播地址

Option:选项,发送者的链路层地址(一般指MAC),当源IP为未指定地址时不能有该选项,在有IPv6地址的链路层上,必须包含此选项,即发送源IP不是全0(接口上有IP)

1.5    NA消息

NA(Neighbor Advertisement)邻居通告消息)

1.      收到NS消息后回复NA消息,单播形式,源IP是NS的目的IP,目的IP是NS的源IP,如果收到的NS源为未指定IP,则目的IP为FF02:1(所有节点)。类似ARP响应;

2.      节点需快速传播新的信息(类似免费ARP),目的地址为FF02:1(所有节点)

Type=136

Code=0

Checksum

 

R

S

O

Reserved

 

Target Address

 
 
 
 

Option… …

  
      

 

Type:8bit,值136

Code:8bit,保留全0

Checksum:16bit,校验和

前3字段为ICMPv6报头

R路由器(Router)位:1bit,路由器标记位,1表示该节点为路由器,在邻居不可达检测中检测路由器是否变为主机

S被请求(Solicited)位:1bit,请求标记位,1表示收到NS后回应的NA,S位在邻居不可达检测中用作可达性确认,在组播的NA(DAD)和主动发送的 NA 中,S 比特一定不能置 1

O重载(Override)位:1bit,替代标记位,1表示替代当前已缓存的IPv6地址的链路层地址,从而更新邻居缓存表项;0表示不更新,如果没有相应的链路层地址则添加新的表项

Reserved:29bit,保留

Target Address:128bit,如果是NS回应的NA消息,该字段为收到的NS消息中的Target Address,如果非响应的NA消息,该字段为链路层地址发生变化的IPv6地址

Option:选项,包含此NA消息发送者的链路层地址,回应组播NS的NA必须包含此选项,回应单播NS的NA可以不包含此选项,因为单播NS请求发送者有正确的链路层地址

1.6    Redirect消息

Redirect重定向消息用于通知主机去往目的有更优的下一跳,只对主机有效,对路由器无效,消息的源地址为发送接口的链路本地地址,目的地址是触发次重定向报文的源地址

Type=137

Code=0

Checksum

 

Reserved

 

Target Address

 
 
 
 

Destination Address

 
 
 
 

Options..

   
    

 

Type:8bit,值137

Code:8bit,保留全0

Checksum:16bit,校验和

前3字段为ICMPv6报头

Reserved:32bit,保留

Target Address:128bit,通知到主机的最优下一跳路由器,必须是下一跳路由器的link local地址,当目的地市邻居时,Target Address必须是Destination Address,否则重定向后的下一跳路由器地址

Destination Address:128bit,需要被重定向的目的地址

Option:重定向后使用的下一跳路由器的链路层地址

2      NDP

NDP,Neighbor Discovery Protocol,邻居发现协议

l  对于主机,使用NDP发现相邻的路由器、自动配置地址、地址前缀即路由等。

l  对于路由器,公告路由器的相关参数、路由及链路的地址前缀。

l  对于节点,解析IPv6数据包将被转发到的邻居节点的链路层地址、获取邻接点的可达性、确定邻接点的链路层地址什么时候发生变化。

NDP用到的地址:

Ø  未指定地址(::):表示发送者暂时无地址

Ø  链路本地地址:只在链路范围内的单播地址

Ø  FF02::1(所有节点):到本链路范围的所有节点地址

Ø  FF02::2(所有路由器):到本链路范围的所有路由器地址

Ø  被请求节点组播地址:一个IPv6接口会通过自动映射技术为自己的每个单播地址(包括链路本地地址)创建一个请求节点组播地址,由固定的FF02::1FF00:0/104和单播地址的最后24位组成

NDP依靠5种ICMPv6报文实现:RS、RA、NS、NA、Redirect

2.1    无状态自动配置

1.        PC接入网络发出RS消息(Type 133的ICMPv6),想路由器进行请求,目标地址FF02::2

2.        路由器回应RA,该消息包括PC所需要的前缀、前缀长度等,目的地址FF02::1

3.        PC收到RA后,使用消息中的前缀和前缀长度等完成自动配置,并将RA中宣告的链路本地地址添加到默认路由器列表作为默认网关

4.        使用该地址前会进行DAD(重复地址检测)

 

2.2    路由器发现

局域网中的路由器会定期发送RA报文,目的为所有节点FF02::1,为主机提供网络配置信息,如网中有多台路由器,则会根据优先级(Router Preference)选择默认路由器,优先级使用的是M和O位后的保留字段。

另外RA消息中还有两个有效期:优选生存期(Preferred Llifetime)和有效生存期(Valid Lifetime),主机以无状态自动配置拿到的地址进行DAD后并且无冲突视为优选地址

1.        优选生存期就是指优选地址的时间,主机通过优选地址与其他设备通信,优选生存期到期,将不再使用该地址新建链接

2.        有效生存期是指主机收到RA消息前缀可以使用的时间,必须大于优选生存期,优选生存期到期后有效生存期到期前已建立的链接可以用,直到有效生存期到期

 

2.3    地址解析

使用NS和NA完成链路层地址解析,类型IPv4的ARP。

当PC1访问PC2,PC1不知道PC2的链路层地址,这时候发送NS消息请求PC2的链路层地址。步骤如下:

1.        PC1发送NS消息(Type135的IMCPv6),IPv6报文的目标地址PC2的接口IPv6单播地址转换后的被请求节点组播地址,ICMPv6的Target Address是PC2的IP,为什么目的地址是被请求节点组播地址?(RFC 2461和RFC4861)

2.        PC2收到NS后,识别目标地址是自己接口的请求组播地址,并检查Target Address是自己的IP,单播方式回应NA,该消息包含PC2的MAC地址同时PC2将PC1的IPv6和MAC添加到邻居缓存表。

3.        PC1收到PC2的NA后PC1将PC2的IPv6和MAC添加到本地邻居缓存表

2.4    DAD(重复地址检测)

Duplicate Address Detect

一个接口配置IPv6单播地址,无论是链路本地地址或全局单播地址,手动配置或无状态获取或DHCPv6获取,使用前都必须进行DAD。步骤如下:

1.        比如PC1配置了IPv6地址2001::1,进行DAD前该地址称为试验(tentative)地址

2.        PC1发出NS确定是否其他设备在使用该IP,IPv6报文的目的IP是2001::1的请求组播地址FF02::1:FF00:1,ICMPv6的Target Address是2001::1

3.        如果PC2的IPv6地址也是2001::1,那么PC2收到NS后会回应NA,告诉PC1该地址正在使用,否则不回应

4.        PC1在发送NS后会设定定时器,如果定时器超时后没有收到NA,说明该地址可以使用,切换到已分配(assigned)状态

2.5    NUD(邻居不可达检测)

Neighbor Unreachability Detection

与IPv4的ARP缓存表类似,NDP会将已发现的邻居信息存入邻居缓存表,包括IPv6地址和二层地址(一般指MAC),NDP会维护邻居缓存表会通过NS消息定期跟踪邻居状态,RFC4861定义了5种邻居状态,NUD利用这些状态和状态间的切换来检测和解析邻居的可达性

Ø  Incomplete(未完成状态):表示解析还在进行,本机已发出NS,还未收到NA

Ø  Reachable(可达状态):本机已收到对方的NA,获得对端的链路层地址

Ø  Stale(过期状态):邻居可达时间超时,表示未知是否可达。或者收到了邻居的非请求NA,携带的链路层地址和本地表项的地址不一致,该邻居立即变为Stale

Ø  Delay(延迟状态):Delay不是一个稳定的状态,而是一个延时等待状态,当向Stale状态的邻居发送报文时,该邻居变为Delay状态,并发送NS消息

Ø  Probe(探测状态):节点向处于Probe状态的邻居持续发送单播NS报文,如持续收不到NA回应,将删除表项,如收到NA,邻居变为Reachable

Ø  Empty(空闲状态):表示节点上没有相关邻居缓存表项

IPv6NUD状态

 

邻居状态跟踪与地址解析的区别

地址解析的NS目的是被请求节点组播地址,而邻居状态跟踪的NS目的是单播

邻居状态跟踪的NA消息中S位必须置位,表示是可达性确认

2.6    重定向原理

路由器发送重定向消息需要满足一下规则

1.        检查收到的数据包源地址,必须是本设备的邻居表中的邻居;

2.        目的下一跳接口等于收到数据包的接口

3.        数据包的目的不是一个组播地址。

主机接受到的重定向消息必须满足以下条件,否则丢弃:

1.        报文的源地址必须是link local地址,路由器必须使用link local地址作为RA消息已经重定向消息的源地址,以便主机唯一识别路由器

2.        Hop Limit字段必须等于255,报文不可能被路由器转发;

3.        ICMP校验和有效

4.        ICMP Code为0

5.        ICMP报文的长度为40Byte或以上

6.        所包含的选项长度必须大于0

3      实验测试https://blog.51cto.com/xxy12345/2510376


http://chatgpt.dhexx.cn/article/lunGDo8k.shtml

相关文章

ndpi工作流程

这里以ndpi的例程ndpiReader.c为例,讲述一下ndpi从抓包到最终分析出具体协议的流程。简单来讲ndpi是从下层开始逐层向上对数据包进行分析的。 先上一发自己画的流程图 这张图是我在最开始看ndpi源码的时候做的流程图,还不是非常的清楚和正确&#xff0…

【随笔记】linux usb gadget ncm wrong ndp sign 问题修复

一、模拟网卡简介 在 Linux 通过 usb 模拟网卡时,有四种方式: 1. 使用 usb gadget rndis 2. 使用 usb gadget ecm 3. 使用 usb gadget ncm 4. 使用 usb gadget eem rndis:是微软公司制定的协议规范, 不过似乎规范不完整, 引起 rndis host …

nDPI分析

nDPI分析 一.概述 nDPI是保持高度欢迎的OpenDPI,在GPL证书下发布,它的目标是增加新的协议,扩展原有的库;为了支持多平台的体验,它除了支持UNIX系列外,还支持windows版本;而且,可以…

如何实现在on ethernetPacket中自动回复NDP response消息

对于IPv4协议来说,如果主机想通过目标ipv4地址发送以太网数据帧给目的主机,需要在数据链路层填充目的mac地址。根据目标ipv4地址查找目标mac地址,这是ARP协议的工作原理 对于IPv6协议来说,根据目标ipv6地址查找目标mac地址,它使用的不是ARP协议,而是邻居发现NDP(Neighb…

IPv6 NDP邻居发现协议 1

NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协议,并对它们作了改进。作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不可达…

NPDP是什么?

NPDP由美国产品开发与管理协会(PDMA)发起,是国际公认的唯一的新产品开发专业认证,集理论、方法与实践为一体的全方位知识体系。 一,为什么要考NPDP认证? 1.对于个人: 1)确保精通新…

802.11 NDP Sounding

NDP Sounding 1.NDP原理2.NDP 过程3.帧结构3.1 NDPA结构3.2 CBF帧 1.NDP原理 802.11n标准提供的波束成形技术,可以通过预先补偿发射天线的相位,让两条波束进行叠加以实现最好的效果 显式波束成形需要终端反馈信道信息: AP向STA发送探测数据…

【IPv6】IPv6 NDP邻居状态详解

NDP 邻居状态 任意两个通信的主机在通信之前,先要建立邻居。(省的去查找arp了) 因为接下来的文字会很乱,排版费劲,所以用这个来。 未完成(Incomplete),可达(Reachable),陈旧(Stale),延迟(Delay),探查(Probe) 正常过程…

ICMPV6协议及NDP协议

一、ICMPV6 1、基于ipv6的ICMPv6(Internet control message protocol for IPv6)是 IPv6 下的 Internet 控制报文协议;在 IPv6 中,ICMPv6 整合实现了 IPv4 中的 ICMP(ping命令)、ARP 以及 IGMP 的所有功能&a…

IPV6 邻居发现协议(NDP)

IPV6除了显著增加了地址空间外,另一个最显著的特征就是它的即插即用性。 邻居发现协议(Neighbor Discovery Protocol,NDP)就是使用以下的功能实现即插即用特性的协议: 路由器发现:当一个节点连接到一个IPV6的链路时,它…

802.11 - NDP反馈报告

目录 概述 帧格式 能力指示 NFRP Trigger帧格式 Common Info字段 HE TB feedback NDP帧格式 NDP Feedback Report Parameter Set element格式 NDP反馈报告流程 概述 STA行为 NDP反馈报告的TXVECTOR参数 STA处理流程 NDP反馈报告流程中的Power save操作 概述 NDP反…

ipv6的NDP协议有哪些功能,是如何进行工作的

ipv6的NDP协议有哪些功能 NDP(neighbor Discovery protocol)是ICMPv6的子协议是IPV6协议体系中一个重要的基础协议,邻居发现协议替代了IPV4的ARP,ICMP路由器发现。它定义了使用ICMPv6报文实现地址解析,跟踪邻居状态&a…

IPV6邻居发现协议(NDP)

概述 NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协议,并对它们作了改进。作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不…

11.NDP协议分析与实践

NDP 协议分析与实践 1. 概述 1.1 简介 Neighbor Discovery Protocol 基于 ICMPv6 实现,用于替代 IPv4 中的 ARP 和 ICMP 路由器发现基于 ICMPv6 实现节点发现(主机和路由)、重复地址检测、地址解析、邻居不可达检测和重定向等功能 1.2 NDP 报文格式 1.2.1 路由…

IPv6邻居发现协议--NDP详解

一、ICMPv6 -Internet控制报文协议 ICMPv6是IPV6的基础协议之一,用于向源节点传递报文转发的信息或错误 协议类型号(即:IPv6Next Header)为58 icmpv6可以提供icmpv4的的对应功能之外,还有其他一些功能的基础如邻居发…

IPv6中NDP协议简介

本文介绍IPv6中一种重要协议——NDP协议。NDP协议是实现IPv6通信的重要协议之一,本文将详细介绍IPv6中NDP的协议实现过程和技术细节。 阅读本文,您需要又有一定的IPv6基础知识,您如果对此还存在困惑,欢迎查阅下列文章:…

5. NDP

NDP(Neighbor Discovery Protocol)NDP实现了IPv6中诸多重要机制。 路由器发现:该功能帮助设备发现链路上的路由器,并获得路由器通告的信息。 无状态自动配置:无状态自动配置是IPv6的一个亮点功能,它使得IP…

NDP原理详解

概述: 节点使用ND,可以确定连接在同一链路上的邻居的链路层地址,快速清除已经变成无效的缓存值。主机也使用ND发现能为其转发报文的路由器。最后,节点使用此协议主动跟踪哪一个邻居可达,哪一个邻居不可达,…

NDP 协议介绍

邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。 邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器 发现(RouterDiscovery),它定义了…

一文解释NDP协议(IPv6邻居发现协议)ICMPv6

目录 目录 一、前言介绍: 1.1、NDP简单说明: 1.2、ICMPv6-Internet控制报文协议 1.3、IPv6和IPv4相比有哪些优势? 二、IPv6邻居发现协议--NDP详解 2.1、IPv6地址解析 2.1.1、邻居请求(Neighbor solicition)NS …