1. ICMP
	1.1 ICMPv4
	1.2 ICMPv6
	1.3 基于ICMP消息的工具
2. ICMPv6消息的通用格式
3. ICMPv6消息类型及代码列表
4. ICMPv6-NDP(133-137)
	4.1 NDP(133-137)提供的功能
	4.2 NDP(133-137)消息可携的选项
	4.3 重复地址检测DAD
	4.4 邻居不可达检测(NUD)
5. ICMPv6其他功能
	5.1 MLD(130-132,143)
	5.2 SEND(148-149)
	5.3 MRD(151-153)
6. 两张缓存表
	6.1 Neighbor Cache
	6.2 Destination Cache

1. ICMP

1.1 ICMPv4

ICMP 依靠IP来完成它的任务,它是IP的主要部分。
它与传输协议(如TCP和UDP)显著不同:它一般不用于在两点间传输数据。 通常用于返回的错误信息或是分析路由。 
IPv4中的ICMP被称作ICMPv4,IPv6中的ICMP则被称作ICMPv6。
每个ICMP消息都是直接封装在一个IP数据包中的,因此,和UDP一样,ICMP是不可靠的。
 

1.2 ICMPv6

互联网控制消息协议版本 6 ( ICMPv6 ) 是互联网控制消息协议(ICMP) 在互联网协议版本 6 (IPv6)中的实现。
ICMPv6 是 IPv6 不可或缺的一部分,执行错误报告和诊断功能。
 
ICMPv6 定义于 RFC 4443 "Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification". 
运行 TCP/IP协议的任何操作系统必定会以生成ICMP 消息(信息类消息或错误类消息)的方式,来传达与TCP/IP 运行状态有关的信息或错误报告。
用户还可以利用各种应用程序(例如ping 和 traceroute 实用工具),以发送 ICMP 消息的方式来测试两台IP设备之间的连通性。
 

1.3 基于ICMP消息的工具

traceroute 命令
在PC中,traceroute和tracert是诊断命令行界面命令,用于显示互联网协议(IP)网络上数据包的可能路由(路径)和传输延迟。
traceroute 是通过发送包含有特殊的TTL的包,然后接收ICMP超时消息和目标不可达消息来实现的。 
注意 RFC 1393 “Traceroute Using an IP Option”定义了一种更为有效的执行路由跟踪的方法。
在(RFC 6814) 正式弃用部分 IPv4 选项 中 废弃了RFC 1393、RFC 1385、RFC 1770、RFC 1475
 
Ping不通, 不一定不通.
  • ping 在IPv4下, 用ICMP的 (Type: 8 Echo request) 和 (Type: 0 Echo reply) 消息来实现的。
  • ping 在IPv6下, 用ICMPv6的 (128, Echo Request 请求), (129, Echo Reply 应答) 消息来实现的。
用户可让一台设备发送 ICMPv6 Echo Request 消息,促使目标设备回复 ICMPv6 Echo Reply 消息,以验证两台设备间的网络层连通性。
若发送设备未收到相应的ICMPv6 Echo Reply 消息,也不能说与目标设备之间丧失了网络层连通性,  有可能是设备间的联网设备(例如路由器或防火墙)丢弃了ICMPv6 Echo Request/Reply 消息,  或目标设备自身不接受或不响应ICMPv6 Echo Request 消息。
 

2. ICMPv6消息的通用格式

所有ICMPv6 消息的格式都是相同的,ICMPv6 消息的通用格式与ICMPv4 消息基本相同。
如下图所示,位列 ICMPv6 头部之前的IPv6 主包头或扩展包头的下一个头部字段值为58(封装 ICMPv4 消息的IPv4 包头的协议字段值为1)。
在IPv6 数据包中,位列ICMPv6消息之前的包头未必是IPv6 主包头,也可以是各种 IPv6 扩展包头中的一种。
 
  • 类型字段(8位): 其值用来指明 ICMPv6 消息的类型.  例如 ICMPv6 Echo Request消息、目的不可达消息或数据包过长消息。
  • 代码字段(8位): 根据“类型”字段值分类的每一种ICMPv6 消息的具体含义由代码字段值指明。 例如类型1表示目标不可达, 具体路由还是地址问题就由代码字段来说明. 
  • 校验和字段(16位): 该字段值来源于生成IPv6 消息的主机针对ICMPv6 消息以及IPv6 包头的部分内容所执行的校验和计算,用来检测 ICMPv6 消息在传输过程中发生的任何损坏。
 

3. ICMPv6消息类型及代码列表

用户可根据类型字段(8位)值,将各种ICMPv6 消息分为以下两大类。
  • ICMPv6 错误类消息:类型字段值为 0~127。最高位必定为0(类型字段值为 0xxxxxx)。 
  • ICMPv6 信息类消息:类型字段值为 128~255。最高位必定为1(类型字段值为 1xxxxxx)。 
分类 Type Type 类型含义 Code Code Meaning 代码含义 生成 Maddress ICMPv4 Code Type 分类
Error 1 Destination unreachable
目的地不可达
0 无到达目的地的路由 (no route) 路由器   网络不可达 0 1 Error
1 与目的地的通信被管理禁止 (prohibited) 防火墙     1
2 超出源地址所能企及的范围 (beyond scope) 路由器     2
3 地址不可达. 由路由器或主机生成 (设备)   主机不可达 3
4 端口不可达 目的主机     4
5 源地址不符合入口/出口策略 (policy) 防火墙     5
6 拒绝到达目的地的路由 (reject) 路由器     6
7 源路由报头错误       7
2 Packet too big 数据包太大 0 需要分片. 路劲 PMTU发现(RFC 8201) 路由器     0 2
3 Time exceeded 超时 0 传输过程中超出跳数限制 (hop limit exceeded) 路由器   TTL 0 3
1 碎片重组时间已超出 (time exceeded) 目的节点     1
4 Parameter problem 参数问题 0 遇到错误的报头字段 (erroneous header)       0 4
1 遇到无法识别的下一个报头类型 (unrecognized)       1
2 遇到无法识别的 IPv6 选项       2
100 Private experimentation 实验             100
101 Private experimentation 实验             101
127 Reserved for expansion 保留             127
Ping 128 Echo Request 回显请求 0 接收设备忽略 (RFC 4443) (设备)     0 128 Ping
129 Echo Reply 回显应答 0 接收设备忽略 (设备)     0 129
MLD 130 Multicast Listener Query (MLD) 查询 (RFC 2710) 0 通用查询,多播地址特定查询 LLA ff02::1   0 130 MLD
131 Multicast Listener Report (MLDv1) 报告 0 接收设备忽略 RFC 2710       0 131
132 Multicast Listener Done (MLD) 完成 0 接收设备忽略       0 132
NDP 133 Router Solicitation (NDP) 请求 RFC 4861 0 IPv6 前缀发现; SLAAC动态地址分配;
默认网关的IPv6 地址
主机 ff02::2 路由器发现 0 133 NDP
134 Router Advertisement (NDP) 通告 0 路由器 ff02::1 路由器发现 0 134
135 Neighbor Solicitation (NDP) 请求 0 地址冲突检测(DAD); 邻居不可达检测(NUD);
地址解析功能
(设备) 恳求节点多播 ARP请求 0 135
136 Neighbor Advertisement (NDP) 通告 0 (设备)   ARP应答 0 136
137 Redirect Message (NDP) 重定向 0 路由器与主机间,用来发现更优的第一跳路由器 路由器   重定向 0 137
  138 Router Renumbering (RFC 2894)
用于路由器重新编址,
通知一组路由器,让它们执行重新编址操作的机制
0 路由器重新编号命令 (Renumbering)       0 138  
1 路由器重新编号结果       1
255 序列号重置 (Sequence)       255
Node 139 ICMP Node Information Query (RFC 4620)
请求 IPv6节点提供某些网络信息,
例如请求 IPv6 节点 提供其主机名或完全限定域名
0 数据字段包含(查询主题)的 IPv6 地址       0 139 Node
1 数据包含(查询)的名称,或在 NOOP 下为空。       1
2 数据字段包含(查询主题)的 IPv4 地址。       2
140 ICMP Node Information Response
ICMP节点信息响应
0 成功回复。回复数据字段可为空 (successful)       0 140
1 若响应方拒绝答复,回复数据字段将为空。       1
2 若响应方不知道查询的 Qtype,回复空。       2
Inverse 141 Inverse ND Solicitation Message 反向ND请求 0 类似IPv4的 RARP 请求(RFC3122)     RARP请求 0 141 Inverse
142 Inverse ND Advertisement Message 反向ND通告 0 类似IPv4的 RARP 应答帧     RARP应答 0 142
MLD 143 Multicast Listener Discovery (MLDv2) reports 报告   RFC 9777 LLA, (::) ff02::16 224.0.0.22   143 MLD
Mobile 144 Home Agent Address Discovery Request Message 0 归属代理地址发现请求及回复
移动前缀请求及回复
用来支持移动 IPv6 (RFC 3775)
      0 144 Mobile
145 Home Agent Address Discovery Reply Message 0       0 145
146 Mobile Prefix Solicitation 移动前缀请求 0       0 146
147 Mobile Prefix Advertisement 移动前缀通告 0       0 147
SEND 148 Certification Path Solicitation (SEND) 认证路径请求   为邻居发现协议提供安全保障 LLA, (::) ff02::2     148 SEND
149 Certification Path Advertisement (SEND) 认证路径通告   LLA ff02::1     149
MRD 151 Multicast Router Advertisement (MRD) 多播路由器通告   用来发现多播路由器 (RFC 4286) 路由器 ff02::6a 224.0.0.106   151 MRD
152 Multicast Router Solicitation (MRD) 多播路由器请求   (设备) ff02::2 224.0.0.2   152
153 Multicast Router Termination (MRD) 多播路由器终止   路由器 ff02::6a 224.0.0.106   153
  155 RPL Control Message 控制消息             155  
Eecho 160 Extended Echo Request 扩展回显请求 0 请求扩展回显 (Extended)       0 160 Eecho
161 Extended Echo Reply 扩展回显回复 0 无错误       0 161
1 查询格式错误 (Malformed)       1
2 无此接口       2
3 无此表项 (Entry)       3
4 多个接口满足查询 (Satisfy)       4
  200 Private experimentation 私人实验 (RFC 4443)             200  
  201 Private experimentation 私人实验             201  
  255 Reserved for expansion 保留             255  
 
用于IPv4 的 ICMP消息类型及代码列表
 

4. ICMPv6-NDP(133-137)

邻居发现协议( NDP ),或简称为邻居发现( ND ),是与Internet 协议版本 6 (IPv6)一起使用的Internet 协议套件中的一种协议。 
它在Internet 模型的互联网层运行,负责收集网络通信所需的各种信息,包括本地连接的配置以及域名服务器和网关。
IPv6 ND 几乎具备所有IPv4 网络环境中的地址解析、路由器发现和路由重定向功能,但在运作方式上存在某些明显的差异。
IPv6 ND 还包括了新的功能,例如 IPv6 前缀发现、地址冲突检测(DAD)以及邻居不可达检测(Neighbor Unreachability Detection, NUD°
 

4.1 NDP(133-137)提供的功能

ICMPv6 邻居发现协议包括以下几种 ICMPv6 信息类消息(详见RFC 4861):
类型(133-137)的: RS, RA, NS, NA, 重定向(Redirect)消息。
这些消息用于提供以下功能:
  • 路由器发现:主机可以定位位于所连接链路上的路由器。
  • 前缀发现:主机可以发现连接链路的在线地址前缀。
  • 参数发现:主机可以找到链接参数(例如,MTU)。
  • 地址自动配置:可选的无状态网络接口地址配置(SLAAC)。
  • 地址解析:IP地址和链路层地址的映射。类似于 IPv4 中的地址解析协议(ARP)
  • 反向邻居发现(IND)协议扩展: 允许节点确定并通告与给定链路层地址相对应的 IPv6 地址,类似于IPv4 的反向 ARP。
  • 下一跳确定:主机可以找到目的地的下一跳路由器。
  • 邻居不可达检测 (NUD):确定邻居在链路上不再可达。
  • 重复地址检测(DAD):节点可以检查某个地址是否已被使用。
  • 通过路由器通告 (RA) 选项分配递归 DNS 服务器 (RDNSS) 和 DNS 搜索列表 (DNSSL)。这是自 2010 年起提出的一项标准,并于 2017 年 3 月更新,但并非所有客户端都支持。
  • 数据包重定向: 为某些目的地提供更好的下一跳路由。
 
IPv6 路径 MTU 发现
IPv6 路径 MTU 发现机制定义于RFC 8201 “Path MTU Discovery for IP version 6” 
构成数据包转发路径的各条链路的最 低MTU值被称为路径MTU(PMTU)值。 
由于指定的源、目的主机之间的流量转发路径可能会随时改变,因此 PMTU 值也会随之而变。
所以说,源主机必须根据 PMTU值,动态调整有待发送的IPv6 数据包的长度。
路径 MTU 发现机制支持IPv6单、多播数据包的发送。
 

4.2 NDP(133-137)消息可携的选项

5种ICMPv6 邻居发现消息可携带一或多个选项,其中的某些选项可在同一条消息内 多次出现。
这些选项有助于 IPv6 设备行使各种与邻居发现有关的功能。 以下所列为常见 的五种 ICMPv6 邻居发现选项。 
 
  1. 源链路层地址选项(类型字段值为 1): 该选项包含了发送 IPv6 数据包的设备的第2层地址(一般为以太网 MAC 地址)。
    • NS 邻居恳求消息、RS 路由器恳求消息以及 RA 路由器通告消息通常会包含该选项。
  2. 目标链路层地址选项(类型字段值为2): 该选项包含了执行地址解析的IPv6 设备有待获悉的第2层地址(一般为以太网 MAC 地址)。
    • NA 邻居通告消息和 Redirect 重定向消息通常会包含该选项。
  3. 前缀信息选项(类型字段值为3): 该选项包含了执行 SLAAC 的IPv6主机希望接收的IPv6前缀及其他地址信息。
    • RA 路由器通告消息会携带前缀信息选项。
  4. 重定向头部选项(类型字段值为4): 该选项由ICMPv6 Redirect 重定向消息携带,包含了触发 ICMPv6 重定向消息的IPv6 数据包的全部或部分内容。
  5. MTU 选项(类型字段值为5): MTU选项由 RA 路由器通告消息携带,作用是让本地链路上的所有IPv6 设备采用相同的MTU值。
 

4.3 重复地址检测DAD

RFC 4429 “Optimistic Duplicate Address Detection (DAD) for IPv6”讨 论了无须执行 DAD 的特殊情况。 
注意 IPv6 地址冲突检测(DAD)定义于
  • RFC 4429 Optimistic Duplicate Address Detection (DAD) for IPv6 (优化DAD)
  • RFC 4861 Neighbor Discovery for IP version 6 (IPv6) (NDP)
  • RFC 4862 IPv6 Stateless Address Autoconfiguration (SLAAC)
  • RFC 7527 Enhanced Duplicate Address Detection (增强DAD)
 

4.4 邻居不可达检测(NUD)

邻居不可达检测(Neighbor Unreachability Detection, NUD)定义于 RFC 4861" Neighbor Discovery for IP Version 6 (IPv6) 
确定与邻 居设备之间具备双向通信能力: 只要满足以下两个条件之一,
  • IPv6 设备发出 NA 消息作为对邻居设备发出的NS 消息的回应。 
  • IPv6 设备所运行的高层协议“指出”:本机与邻居设备之间成功建立了连接,例 如,与邻居设备之间建立起了 TCP 连接。 
IPv6 设备只有进行单播 通信时,才会执行邻居不可达检测操作。 
连接了大量IPv6主机的第一跳路由器在执行NUD 操作时,会加重其控制平面的负担。
此时,路由器不但要维护一张极为庞大的邻居缓存表,其CPU 还必须处理海量的 NS 和NA 消息
 
IPv6 设备 所执行的NUD(邻居不可达检测)算法,会让邻居缓存表记录处于5种可达性状态之一. 两种最常见的状态是 Reachable(可达)和 Stale(过期)。 
 
  • Fail (Delete Entry)状态: 失败(删除条目) 这并不是一种邻居缓存表记录所处的状态,它表示邻居缓存表中不存在指定的IPv6 地址以及与之相关联的MAC 地址的对应关系。
  • Incomplete 状态: 不完整 表示IPv6 设备正在执行地址解析操作,尚未知晓与指定的IPv6地址相关联的链路层地址。
    • 也就是说,IPv6 设备已经发出了NS 消息,意在解析与指定的IPv6 地址相关联的MAC 地址。
    • 若IPv6 设备连发3条NS 消息,都未能收到拥有该 IPv6 地址的邻居设备回复的NA 消息,则会删除状态为“Incomplete"的邻居缓存表记录,因为拥有指定的IPv6地址的邻居设备并不存在。
  • Reachable 状态: 可达 IPv6 设备刚收到拥有指定的IPv6 地址的邻居设备发送的数据包,并确定该邻居设备可达。
    • 为了解析与指定的IPv6 地址相关联的MAC 地址,IPv6设备在发出NS 消息之后,收到了拥有该IPv6 地址的邻居设备回复的NA 消息。
    • 此时,IPv6 设备会将与该邻居设备相关联的邻居缓存表记录(从Incomplete 状态)转变为 Reachable 状态。
  • Stale 状态: 陈旧 从拥有指定 IPv6 地址的邻居设备收到数据包之后,若在一段时间内(这段时长被称为可达时间)两者之间未再次发生通信,IPv6 设备便会将与该邻居设备相关联的邻居缓存表记录的状态从Reachable 转变为 Stale。
    • 收到“不请自来”的NA 消息(某邻居设备主动发送的NA 消息)时,IPv6设备也会将与该邻居设备相关联的邻居缓存表记录置为该状态。 此时,IPv6 设备无须执行任何邻居发现操作。
  • Delay 状态: 延迟 这是一种临时状态,表示IPv6设备已向邻居设备发出了数据包, 正在等待回复,目前还不能确认该邻居设备是否可达。 (例如,在建立 TCP 连接时,IPv6 设备向邻居设备发出了TCP SYN报文段,正等待邻居设备回复的 TCP SYN ACK 报文段)
    • 若在5秒之内收到了邻居设备回复的数据包,则 IPv6 设备会将与该邻居设备相关联的邻居缓存表记录转变为 Reachable状态; 否则,会转变为 Probe状态。
  • Probe: 探测 这是一种临时状态,表示IPv6 设备正在重新解析与指定的IPv6 地址相关联的MAC 地址,会像处于 Incomplete 状态那样,再次将NS 消息发往拥有该 IPv6地址的邻居设备。
    • 若拥有该 IPv6 地址的邻居设备回复相应的NA 消息,则IPv6设备会将与该邻居设备相关联的邻居缓存表记录转变为 Reachable 状态。
    • 若IPv6设备连发3条NS 消息,都未能收到拥有该IPv6 地址的邻居设备回复的NA 消息,则会删除状态为“Probe”的邻居缓存表记录。
 

5. ICMPv6其他功能

ICMPv6 具有一个用于扩展以实现新功能的框架。
目前已发布了多个扩展,定义了新的 ICMPv6 消息类型以及现有 ICMPv6 消息类型的新选项。
例如,邻居发现协议(NDP) 是一个基于 ICMPv6 的节点发现协议,它取代并增强了ARP的功能。
安全邻居发现(SEND) 是 NDP 的扩展,具有额外的安全性。
Pv6路由器使用多播侦听器发现(MLD) 来发现直连链路上的多播侦听器,就像IPv4中使用的Internet 组管理协议(IGMP) 一样。
多播路由器发现(MRD) 允许发现多播路由器。

5.1 MLD(130-132,143)

Pv6路由器使用多播侦听器发现(MLD) 来发现直连链路上的多播侦听器, 就像IPv4中使用的Internet 组管理协议(IGMP) 一样。
多播侦听器发现( MLD ) 是互联网协议第六版(IPv6) 协议套件的一个组件。
IPv6 路由器使用 MLD 来发现直连链路上的多播侦听器,类似于IPv4中使用的互联网组管理协议(IGMP) 。
该协议嵌入在ICMPv6中,而不是使用单独的协议。
MLDv1(RFC2710)与IGMPv2 类似,MLDv2(RFC9777)与 IGMPv3 类似。
与 MLDv1 相比,MLDv2 协议增加了对“源过滤”的支持, 即节点能够报告仅监听来自特定源地址的数据包以支持SSM (源特定多播 Source-Specifc Multicast RFC3569), 或监听来自除特定源地址之外的所有发送到特定多播地址的数据包。
MLDv2 旨在与 MLDv1 互操作。
 
MLD 的 Type 信息: 
  • 130  多播侦听器查询
  • 131  MLDv1 多播侦听器报告
  • 143  MLDv2 多播侦听器报告
  • 132  多播侦听器完成
 
其中 130  多播侦听器查询消息有三种变体: 
  • General Query: 查询器发送“通用查询”来了解哪些多播地址在连接的链路上有监听者。
    • “多播地址”字段和“源数量 (N)”字段均为零。⽬标地址: ff02::1
  • Multicast Address Specifc Query: 查询器发送“多播地址特定查询”来了解特定多播地址在连接的链路上是否有监听者。
    • “多播地址”字段包含感兴趣的多播地址,而“源数量 (N)”字段设置为零。查询的⽬标地址: 感兴趣的多播地址
  • Multicast Address and Source Specifc Query: 查询器发送“多播地址和源特定查询”来了解特定多播地址的指定列表中的任何源在连接的链路上是否有监听者。
    • “多播地址”字段包含感兴趣的多播地址,而“源地址 [i]”字段包含感兴趣的源地址。查询的⽬标地址: 感兴趣的多播地址
 

5.2 SEND(148-149)

安全邻居发现(SEND) 是 NDP 的扩展,具有额外的安全性。 在 RFC 3971 中定义,在 RFC 6494、RFC 6495、RFC 6980 中被更新。
它使用加密生成地址(CGA) 和资源公钥基础设施(RPKI),提供了一种独立于IPsec的加密方法来保护 NDP 的替代机制。
 
在IPv6中,邻居发现协议(NDP) 负责发现本地链路上的其他网络节点,确定其他节点的链路层地址,查找可用的路由器,并维护通往其他活动邻居节点路径的可达性信息 (RFC 4861)。
NDP 并不安全,且易受恶意干扰。SEND 旨在提供一种替代机制,采用独立于IPsec(IPv6 通信安全最初的固有方法)的加密方法来保护 NDP。
 
148 Certification Path Solicitation (SEND) 认证路径请求
  • 源地址:分配给发送接口的链路本地单播地址(LLA: ff80::/64), 如果发送接口未分配地址,则分配给未指定的地址。
  • 目标地址:通常是全路由器多播地址(All-Routers: ff02::2)、 请求节点多播地址(Solicited-Node: ff02::1:ff00:0/104)或 主机默认路由器的地址。
 
149 Certification Path Advertisement (SEND) 认证路径通告
  • 源地址:分配给发送此消息的接口的链路本地单播地址(LLA)。 请注意,路由器可能使用多个地址,因此此地址不足以作为路由器的唯一标识。
  • 目标地址:接收方的请求节点多播地址(Solicited-Node: ff02::1:ff00:0/104)或 链路范围内的全节点多播地址(All-Nodes: ff0::1)。
 
跳数限制: 255
 

5.3 MRD(151-153)

多播路由器发现( MRD ) 提供了一种在IP 网络上发现多播路由器的通用机制。
对于IPv4,该机制基于IGMP。对于IPv6,该机制基于MLD。多播路由器发现由 RFC 4286 定义。
 
多播路由器发现 (Multicast Router Discovery) 包含三条用于发现多播路由器的消息。
  • 151 Multicast Router Advertisement (MRD) 多播路由器通告,  由路由器发送,用于通告 IP 多播转发功能已启用。 周期性(4~180秒),  收到请求消息后 发送.
  • 152 Multicast Router Solicitation (MRD) 多播路由器请求,  设备可以通过LLA发送[多播路由器请求]消息,以便从多播路由器请求[通告消息]。
  • 153 Multicast Router Termination (MRD) 多播路由器终止,  当路由器停止某个接口上的 IP 多播路由功能时,会发送[多播路由器终止]消息。
 
通告多播路由器的位置外,通告还传达有关组管理协议变量的有⽤信息。 此信息可⽤于⼦⽹的⼀致性检查 。
 
⽬标地址 
通告和终⽌消息被发送到 All-Snoopers 多播地址。IPv6(ff02::6a) IPv4(224.0.0.106)
请求消息被发送到所有路由器多播地址。IPv6(ff02::2) IPv6MAC(33-33-ff-00-00-02) IPv4(224.0.0.2)
 
⽣存时间/跳数限制: IPv4 TTL 和 IPv6 跳数限制设置为 1。
 

6. 两张缓存表

IPv6 主机会为每块 NIC 维护以下两张缓存表:
  • 邻居缓存表(Neighbor Cache), 功能方面等同于IPv4 ARP 缓存表。
  • 目的缓存表(Destination Cache)。
 

6.1 Neighbor Cache

邻居缓存表 除了能反映出邻居设备的IPv6 单播地址和 MAC 地址的对应关系以外,邻居缓存表记录 还能告知用户:邻居设备是路由器还是主机、邻居设备的IPv6 地址的可达状态、 本机是否有排队待发的IPv6 数据包正在等待地址解析操作的完成,以及本机将要执行的下一次邻居不可达检测操作的时间。
IPv6 设备会根据收到的NA 消息所包含的信息,来维护本机邻居缓存表。
 
Windows 主机的邻居缓存表:
C:\> netsh interface ipv6 show neighbors
Linux 主机的邻居缓存表:
Linux# ip -6 neighbor show
MacOS 主机的邻居缓存表:
MacOS$ ndp -a
 

6.2 Destination Cache

目的缓存表
 >  netsh Interface ipv6 show destinationcache
IPv6 设备还会维护另外一张表,名为目的缓存表。
IPv6 主机会把刚刚与本机发生过通信的目的主机的IPv6 地址记录进目的缓存表,包括位于不隶属于本地链路上(本地子网)的目的主机的IPv6 地址。
若出现在目的缓存表里的目的主机的IPv6 地址不隶属于本 地链路, 则与该 IPv6 地址形成对应关系的将会是下一跳路由器的IPv6 地址。
每台 IPv6设备都会维护一张默认路由器的IPv6 地址列表,转发目的地址在本地链路(本地子网)之外的IPv6 数据包时,会从列表中选择一个 IPv6 地址作为转发此类 IPv6 数据包的默认路由器的IPv6 地址。
然后,IPv6 设备还会将选定的默认路由器的IPv6 地址保存进目的缓存表,与所要转发的IPv6 数据包的目的地址形成对应关系。