第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

九、思考

  1. NDP 的 NS/NA 报文与 IPv4 的 ARP 有什么异同?
  2. IPv6 的 DAD 是如何工作的?为什么 IPv6 需要 DAD?
  3. RA 报文包含哪些关键信息?
  4. NDP 相比 ARP 有什么优势?
  5. 什么是 RA 欺骗攻击?如何防护?

下篇预告:第115篇《IPv6 地址配置——SLAAC、有状态 DHCPv6、无状态 DHCPv6》——详解 IPv6 三种地址配置方式的原理与适用场景。