IPv6 邻居发现机制
邻居发现协议(Neighbor Discovery Protocol)是 IPv6 协议的一个基本组成部分,使用了下表中的五种类型 ICMPv6 消息:
ICMPV6 消息 | 类型 | 作用 |
---|---|---|
RS (Router Solicitation,路由器请求消息) | 133 | 节点启动后,通过 RS 消息向路由器发出请求,请求前缀和其他配置信息,用于节点的自动配置 |
RA (Router Advertisement,路由器通告) | 134 | 对 RS 消息进行响应 在没有抑制 RA 消息发布的条件下,路由器会周期性地发布 RA 消息,其中包括前缀信息选项和一些标志位的信息 |
NS (Neighbor Solicitation,邻居请求) | 135 | 获取邻居的链路层地址 验证邻居是否可达 进行重复地址检测 |
NA (Neighbor Advertisement,邻居通告) | 136 | 对 NS 消息进行响应 节点在链路层变化时主动发送 NA 消息,向邻居节点通告本节点的变化信息 |
Redirect,重定向消息 | 137 | 当满足一定的条件时,缺省网关通过向源主机发送重定向消息, 使主机重新选择正确的下一招她址进行后续报文的发送 |
使用表格中的五种 ICMPv6 消息,可以实现在 IPv4 中的地址解析协议 (ARP)、控制报文协议 (ICMP) 中的路由器发现部分、重定向协议的所有功能,并具有邻居不可达检测机制,下面我们就来一一展开介绍下。其中,路由器发现 / 前缀发现及地址无状态自动配置过程已在上期文章中做过介绍,不再赘述。
1. 地址解析过程
通过邻居请求消息 NS 和邻居通告消息 NA,可以获取同一链路上邻居节点的链路层地址 (与 IPv4 的 ARP 功能相同)。
首先,节点 B 以组播方式发送 NS 消息。NS 消息的源地址是节点 B 的接口 IPv6 地址,目的地址是节点 A 的被请求节点组播地址,消息内容中包含了节点 B 的链路层地址和请求的目标地址。
接着,节点 A 收到 NS 消息后,判断报文的目标地址是否为自己的 IPv6 地址。如果是,则节点 A 可以学习到节点 B 的链路层地址,并以单播方式返回 NA 消息,其中包含了自己的链路层地址。
最后,节点 B 从收到的 NA 消息中就可获取到节点 A 的链路层地址。
2. 重复地址检查
当节点获取到一个 IPv6 地址后,需要使用重复地址检查功能确定该地址是否已被其他节点使用 (与 IPv4 的免费 ARP 功能相似),避免冲突。通过 NS 和 NA 实现重复地址检测的过程为:
首先,节点 A 发送 NS 消息,NS 消息的源地址是未指定地址::,目的地址是待检测的 IPv6 地址对应的被请求节点组播地址,消息内容中包含了待检测的 IPv6 地址。
如果节点 B 已经使用这个 IPv6 地址,则会返回 NA 消息,其中包含了自己的 IPv6 地址。
节点 A 收到节点 B 发来的 NA 消息,就知道该 IPv6 地址已被使用。反之,则说明该地址未被使用,节点 A 就可使用此 IPv6 地址。
节点 A 收到重复地址检查的NA消息,如果设备上没有表项,不会进行学习;如果自己已有表项,则进行更新。
3. 邻居可达性检测
在获取到邻居节点的链路层地址后,通过邻居请求消息 NS 和邻居通告消息 NA 可以验证邻居节点是否可达。
首先,节点发送 NS 消息,其中目的地址是邻居节点的 IPv6 地址。
如果收到邻居节点的确认报文,则认为邻居可达;否则,认为邻居不可达。
IPv6 邻居状态迁移
RFC4861 定义了 5 种 IPv6 邻居状态,分别是:Incomplete、Reachable、Stale、Delay、Probe,其中只有 Stale 状态是稳定状态。
- Incomplete (未完成状态):表示正在解析地址,但邻居链路层地址尚未确定。
- Reachable (可达状态):表示地址解析成功,该邻居可达。
- Stale (失效状态):表示可达时间耗尽,未确定邻居是否可达。
- Delay (延迟状态):表示未确定邻居是否可达。Delay 状态不是一个稳定的状态,而是一个延时等待状态。
- Probe (探测状态):节点会向处于 Probe 状态的邻居持续发送 NS 报文。
邻居状态变化过程如下图所示:
当没有表项时,如果有流量触发建立新的邻居表项,设备将发送 NS 报文去获取邻居 MAC 地址,此时建立的邻居表项是 Incomplete 状态,MAC 全零。
发送 NS 报文探测对端邻居是否可达后,若尝试 3 次对端都不响应,则删除表项,探测间隔默认 1s。
若目的邻居可达并回复了正确的 NA 报文,则本端邻居表项状态刷新为 Reachable,并更新 MAC。Reachable 状态将维持 30s,之后自动切换成 Stale 状态。
Stale 状态维持的时间又称为老化时间,默认是 240min,老化后表项切换成 Delay 状态。Delay 状态延时 5s,自动切换为 Probe 状态。
邻居表项为 Probe 状态时,发送 NS 报文探测对端是否可达,若尝试 3 次对端不响应,则删除表项。若邻居可达并回复 NA 报文,则本端邻居表项状态刷新为 Reachable。
via :
-
当交换机正确获取到IPv6地址之后,是如何与IPv6邻居进行通信_获取到 ipv6 地址但是无法通讯-CSDN博客 Drizzlejj 于 2021-03-03 18:08:29 发布