1363 字
7 分钟
IPv6中的ND和NA
IPv6 中的 ND 和 NA 是 IPv6 核心协议—— 邻居发现协议 中的两个关键组成部分。
1. ND - 邻居发现
ND 是 Neighbor Discovery 的缩写,中文为 邻居发现 。
它不是一个单独的报文类型,而是 一整套协议机制 的总称。ND 协议定义了用于发现同一链路上(同一局域网内)其他节点、解析其 MAC 地址、发现路由器以及维护可达性信息的各种消息和过程。
ND 协议的核心功能包括:
- 地址解析 :替代 IPv4 中的 ARP 协议。通过请求和通告来将 IPv6 地址解析为链路层地址(如 MAC 地址)。
- 路由器发现 :主机如何发现本地链路上的路由器,并获取网络前缀和其他配置参数(用于 SLAAC)。
- 前缀发现 :主机发现本地链路上的网络前缀。
- 参数发现 :主机发现链路参数,如 MTU。
- 重复地址检测 :主机在启用一个地址前,检查该地址是否已被链路上的其他节点使用。
- 邻居不可达检测 :确定一个邻居(无论是主机还是路由器)是否仍然可达。
- 重定向 :路由器通知主机存在一个更好的第一跳路由器用于到达特定目的地。
ND 协议主要通过交换 5 种类型的 ICMPv6 报文来实现这些功能:
| ICMPv6 类型 | 报文名称 | 英文全称 | 主要作用 |
|---|---|---|---|
| 133 | 路由器请求 | Router Solicitation (RS) | 主机主动请求路由器发送 RA 报文 |
| 134 | 路由器通告 | Router Advertisement (RA) | 路由器宣告其存在和网络前缀信息 |
| 135 | 邻居请求 | Neighbor Solicitation (NS) | 用于地址解析、DAD、NUD |
| 136 | 邻居通告 | Neighbor Advertisement (NA) | 响应 NS 或主动通告地址变化 |
| 137 | 重定向 | Redirect Message | 路由器指导主机使用更好的下一跳 |
从上面可以看出,NA 正是 ND 协议框架下的一种具体报文类型。
2. NA - 邻居通告
NA 是 Neighbor Advertisement 的缩写,中文为 邻居通告 。
它是 ND 协议中使用的 一种具体的 ICMPv6 报文(类型 136),是对 邻居请求 或某些情况下主动发出的响应报文。
NA 报文的主要作用
- 响应邻居请求 :
- 当一台设备收到一个 NS 报文(例如,对方想解析你的 MAC 地址)时,它必须回一个 NA 报文作为响应。
- 示例 :设备 A 想和设备 B(IPv6 地址为
2001:db8::1)通信,但不知道 B 的 MAC 地址。A 会发送一个 NS 报文(目标地址是 B 的请求节点多播地址),问“谁是2001:db8::1?请告诉你的 MAC 地址”。设备 B 收到后,会回一个 NA 报文(单播给 A),说“我是2001:db8::1,我的 MAC 地址是 xx:xx:xx:xx:xx”。
- 主动通告 :
- 设备可以在未收到请求的情况下,主动发送 NA 报文来通知链路上的其他设备其链路层地址的变更。这有助于网络中的其他设备迅速更新它们的邻居缓存,类似于 IPv4 中的 gratuitous ARP。
- 完成重复地址检测 :
- 在 DAD 过程中,一台设备会给自己想要的地址发送一个 NS 报文。如果这个地址已经被使用,那么该地址的所有者就会回一个 NA 报文,宣告“这个地址我正在用!”,从而阻止请求设备使用该地址。
- 告知路由信息 :
- NA 报文中有一个重要的标志位——Router Flag。当这个标志位被设置时,表明发送者是一台路由器。这对于主机维护默认网关列表非常重要。
NA 报文中的重要字段
- 目标地址 :NA 报文所通告的 IPv6 地址。
- R 位 :路由器标志。1 表示发送者是路由器,0 表示是主机。
- S 位 :请求标志。1 表示该 NA 是对一个 NS 请求的响应。 主动发送的 NA 报文 S 位为 0。
- O 位 :覆盖标志。1 表示通告的内容应覆盖现有的缓存条目。通常 DAD 过程会设置 O=0,而地址解析响应会设置 O=1。
- 选项 :通常包含发送者的 链路层地址 (如 MAC 地址)。
总结与关系
| 特性 | ND | NA |
|---|---|---|
| 定义 | 一套完整的协议和功能集合 | 一种具体的 ICMPv6 报文类型 |
| 角色 | 总体框架 ,相当于“ 地址解析和邻居管理系统 ” | 具体工具 ,相当于该系统下的“ 响应和通告消息 ” |
| 类比 | 类似于一整套“ 邮政投递系统 ”,包括写信、送信、查地址等规则。 | 类似于这个系统中一种特定类型的“ 回信 ”或“ 地址变更通知单 ”。 |
| 关系 | ND 协议定义了何时以及为何要使用 NA 报文。 | NA 是实现 ND 协议核心功能(如地址解析)的关键报文之一。 |
简单来说:
ND 是“ 做什么和为什么做 ”(功能),而NA 是“ 怎么做 ”的一种方式(实现功能的报文)。没有 ND 协议的定义,NA 报文就失去了意义;而没有 NA 报文,ND 的许多功能也无法实现。