第114篇:NDP 与 IPv6 邻居发现协议
关键词
NDP、IPv6、NS/NA、RS/RA、SLAAC、DAD、邻居发现
一、为什么需要 NDP?
IPv4 中使用 ARP 解析 IP→MAC 地址。但 ARP 存在很多缺陷: - 广播依赖(IPv4 ARP 使用广播) - 无安全机制(易被 ARP 欺骗) - 功能单一(只做地址解析)
IPv6 引入了 NDP(Neighbor Discovery Protocol),不仅替代了 ARP,还包含地址自动配置、重复地址检测、路由器发现、重定向等功能。
二、NDP 的报文类型
NDP 使用 ICMPv6 作为承载协议,共定义了 5 种报文:
| ICMPv6 类型 | 报文名称 | 功能 |
|---|---|---|
| 135 | NS(Neighbor Solicitation) | 邻居请求——类似 ARP 请求 |
| 136 | NA(Neighbor Advertisement) | 邻居通告——类似 ARP 应答 |
| 133 | RS(Router Solicitation) | 路由器请求——终端主动询问路由器信息 |
| 134 | RA(Router Advertisement) | 路由器通告——路由器定期广播/应答网络信息 |
| 137 | Redirect | 重定向——通知主机更好的下一跳 |
三、NDP 的五大核心功能
3.1 地址解析(替代 ARP)
IPv4 ARP 请求:广播 → 所有主机都被中断
IPv6 NS 请求:组播(Solicited-Node 组播地址)→ 只有目标主机收到
IPv6 地址解析过程:
主机 A 想获取主机 B(FE80::2)的 MAC 地址:
1. 主机 A 发送 NS(目标地址 = FE80::2 对应的 Solicited-Node 组播地址)
源 IP = FE80::1, 目标组播 = FF02::1:FF00:2
包含:目标地址 FE80::2
2. 主机 B 收到 NS,确认自己是 FE80::2
发送 NA(单播回复)
源 IP = FE80::2, 目标 = FE80::1
包含:MAC 地址 BB:BB:BB:BB:BB:BB
3.2 重复地址检测(DAD)
在 IPv6 中,设备在配置一个地址前必须先做 DAD(Duplicate Address Detection):
1. 主机 A 想配置地址 2001:DB8::1/64
2. 发送 DAD NS(目标地址 = 2001:DB8::1 的 Solicited-Node 组播地址)
源 IP = ::(未指定地址),目标组播 = FF02::1:FF00:1
3. 如果:
- 收到 NA 回复 → 地址重复,不能使用
- 超时无回复 → 地址唯一,可以使用
DAD 确保了 IPv6 地址的唯一性,这是 IPv6 SLAAC 的前提。
3.3 路由器发现
RS/RA 报文实现 IPv6 设备自动发现路由器:
终端启动 ──→ RS ──→ 路由器
│
└──→ RA(定期发送 + 回复 RS)
RA 包含的关键信息:
- 路由器是否可作为默认网关
- 前缀信息(2001:DB8::/64)
- 地址配置方式(SLAAC / DHCPv6 / 组合)
- MTU
- 跳数限制
3.4 重定向
当主机选择的路由器不是最优路径时,路由器可以发 Redirect 通知主机。
主机 A ── 访问 Internet ── 路由器 1
│ (不是最优路径)
路由器 2(更优路径)
路由器 1 发 Redirect:
目标 = 主机 A
内容:访问 Internet 的下一跳应该是路由器 2
3.5 邻居不可达检测(NUD)
IPv6 会主动检测邻居是否可达:
定期发送 NS → 检查邻居是否可达
如果 NA 无响应 → 删除邻居缓存 → 重新解析
四、NDP 的安全威胁
4.1 NDP 的脆弱性
NDP 和 ARP 一样没有内置认证:
| 攻击类型 | 类似 IPv4 | 说明 |
|---|---|---|
| NS/NA 欺骗 | ARP 欺骗 | 伪造 NA 冒充其他主机 |
| RA 欺骗 | DHCP 欺骗 | 伪造 RA 让终端配置错误的网络信息 |
| DAD 欺骗 | — | 对 DAD 回应 NA 导致地址无法使用 |
| 重定向欺骗 | ICMP 重定向 | 伪造重定向流量劫持 |
4.2 防护机制:RA Guard & ND Snooping
# 华为交换机:RA Guard 防 RA 欺骗
interface GigabitEthernet0/0/1
ipv6 nd raguard enable
# ND Snooping(类似 DHCP Snooping for IPv6)
ipv6 nd snooping enable
vlan 10
ipv6 nd snooping enable
# 配置信任端口(路由器端口)
interface GigabitEthernet0/0/24
ipv6 nd snooping trust
五、NDP 与 IPv4 ARP 的对比
| 对比项 | IPv4 ARP | IPv6 NDP |
|---|---|---|
| 协议载体 | 独立以太网协议(0x0806) | ICMPv6 |
| 请求方式 | 广播 | 组播(Solicited-Node) |
| 地址解析 | ARP Request/Reply | NS/NA |
| 路由器发现 | DHCP/静态 | RS/RA |
| 地址冲突检测 | 免费 ARP(非标准) | DAD(强制) |
| 重定向 | ICMP Redirect | ICMPv6 Redirect |
| 邻居可达性 | 无 | NUD |
| 安全性 | ARP 欺骗(严重) | 类似脆弱(需 RA Guard 等) |
六、NS/NA 报文结构
6.1 NS 报文
IPv6 头:源 = FE80::1, 目标 = FF02::1:FF00:2
ICMPv6 头:Type=135, Code=0
目标地址:FE80::2
Options:
Source Link-Layer Address:00-11-22-33-44-55(发送方 MAC)
6.2 NA 报文
IPv6 头:源 = FE80::2, 目标 = FE80::1
ICMPv6 头:Type=136, Code=0
R=0, S=1, O=1
目标地址:FE80::2
Options:
Target Link-Layer Address:AA-BB-CC-DD-EE-FF
七、常见排错命令
# 查看 IPv6 邻居缓存(类似 ARP 表)
display ipv6 neighbors
-----------------------------------------------
IPv6 Address MAC Interface State
FE80::1 0011-2233-4455 GE0/0/1 Reachable
FE80::2 AABB-CCDD-EEFF GE0/0/2 Stale
# 查看 IPv6 路由
display ipv6 routing-table
# 查看 ND Snooping 绑定表
display ipv6 nd snooping binding
# 抓取 ND 报文
# 用 Wireshark 过滤 icmpv6.type == 135 || icmpv6.type == 136
八、总结
| 知识点 | 核心要点 |
|---|---|
| NDP 本质 | IPv6 的邻居发现协议,替代 ARP |
| 5 种报文 | NS/NA/RS/RA/Redirect |
| 地址解析 | NS(组播)→ NA(单播),替代 ARP |
| DAD | 配置地址前自动检查是否冲突 |
| RS/RA | 终端发现路由器和前缀信息 |
| 安全 | NDP 无内置认证,需 RA Guard/ND Snooping |
九、思考
- NDP 的 NS/NA 报文与 IPv4 的 ARP 有什么异同?
- IPv6 的 DAD 是如何工作的?为什么 IPv6 需要 DAD?
- RA 报文包含哪些关键信息?
- NDP 相比 ARP 有什么优势?
- 什么是 RA 欺骗攻击?如何防护?
下篇预告:第115篇《IPv6 地址配置——SLAAC、有状态 DHCPv6、无状态 DHCPv6》——详解 IPv6 三种地址配置方式的原理与适用场景。