交换机获取到IPv6地址后与IPv6邻居通信的过程
交换机获取到IPv6地址后与IPv6邻居通信的过程
随着IPv6的普及和应用,了解其相关技术细节具有重要的参考价值。本文将详细介绍IPv6邻居发现机制及其相关过程,包括地址解析、重复地址检测和邻居可达性检测等。
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。