IPv6 邻居发现过程

三葉Leaves Author

地址解析

假设 A——>B 通信

  • 邻居请求 (Neighbor Solicitation, NS):A 想要知道 B 的链路层地址时,它会发送一个 NS 消息。目标地址是主机 B 的被请求节点组播地址(Solicited-Node Multicast Address),并在消息中包含主机 B 的 IPv6 地址。这个组播地址是根据主机 B 的 IPv6 地址生成的,只有主机 B 才会监听这个地址。
  • 邻居通告 (Neighbor Advertisement, NA):收到 NS 消息的B 会回复一个 NA 消息,并在消息中包含自己的 MAC 地址。

主机 A 收到 NA 消息后,就知道了主机 B 的 MAC 地址,并将其保存在自己的邻居缓存中,以便后续通信使用。


NUD 邻居不可达检测 (Neighbor Unreachability Detection,)

  • 主动探测 (Explicit Probe):当一个节点需要向某个邻居发送数据包时,如果它不确定该邻居是否仍然可达,就会发送一个 NS 消息作为探测。如果收到邻居的 NA 消息回复,就说明邻居仍然可达;

  • 被动检测 (Implicit Probe):当一个节点收到来自某个邻居的数据包时,就认为该邻居是可达的。这就像是我们收到朋友发来的微信,就知道他在线一样。

NUD 的五种状态

就像人生有不同的阶段一样,NUD 也定义了五种状态来描述邻居节点的不同情况:
1. INCOMPLETE (不完整):这是 NUD 的初始状态,表示尚未完成地址解析。就像我们刚认识一个新朋友,只知道他的名字,不知道他的联系方式一样。在这个状态下,节点不知道邻居的链路层地址,无法直接与其通信。当节点需要发送数据包给一个未知地址的邻居时,就会发送 NS 消息来触发地址解析,并将邻居的状态设置为 INCOMPLETE。
2. REACHABLE (可达):这是最“健康”的状态,表示邻居节点已知可达。就像我们和好朋友一直保持联系,知道他一切安好一样。当节点收到来自邻居的 NA 消息或数据包时,就会将邻居的状态设置为 REACHABLE。在这个状态下,节点可以放心地向邻居发送数据包。不过,REACHABLE 状态并不是永久的,它有一个超时时间 (Reachable Time),如果在超时时间内没有收到来自邻居的消息,状态就会变为 STALE。
3. STALE (过时):这个状态表示邻居可能不再可达,需要进行主动探测。就像我们和一位很久没联系的朋友,不知道他现在的情况一样。当 REACHABLE 状态超时后,邻居的状态就会变为 STALE。此时,如果节点需要向该邻居发送数据包,就需要进行主动探测,发送 NS 消息来确认邻居是否仍然可达。
4. DELAY (延迟):这个状态表示节点正在进行主动探测,等待邻居的回复。就像我们给很久没联系的朋友发了微信,正在等待他回复一样。当节点发送 NS 消息进行主动探测后,就会将邻居的状态设置为 DELAY。如果收到邻居的 NA 消息,状态就会变为 REACHABLE;如果在一定时间内没有收到回复,状态就会变为 PROBE。
5. PROBE (探测):这个状态也表示节点正在进行主动探测,但与 DELAY 状态不同的是,PROBE 状态下节点会周期性地发送 NS 消息,直到收到回复或达到最大探测次数。就像我们给朋友发微信没回复,又连续打了几个电话一样。当 DELAY 状态超时后,邻居的状态就会变为 PROBE。如果收到邻居的 NA 消息,状态就会变为 REACHABLE;如果达到最大探测次数仍然没有收到回复,节点就会认为邻居不可达,并将其从邻居缓存中删除。


DAD 重复地址检测 (Duplicate Address Detection)

刚入网的设置需要一个 ipv6 地址,但是怎么知道地址有没有被其他人用呢?

DAD的过程如下:

临时地址 (Tentative Address):

节点获得一个 IPv6 单播地址(例如通过自动配置或手动配置),该地址最初会被标记为“临时”状态 (Tentative)。这意味着该地址尚未被确认是唯一的,不能用于正常的通信。

邻居请求 (NS) 消息:

节点会发送一个邻居请求 (NS) 消息,目标地址为要检测的地址对应的被请求节点组播地址 (Solicited-Node Multicast Address)。NS 消息的源地址为未指定地址 ::

被请求节点组播地址的格式为 FF02::1:FFXX:XXXX,其中 XX:XXXX 是要检测的 IPv6 单播地址的最后 24 位转换为6位十六进制数组成的。

邻居通告 (NA) 消息:
  • 地址冲突: 如果网络中已经有其他节点使用了相同的地址,该节点会回复一个邻居通告 (NA) 消息,源地址为冲突的 IPv6 单播地址。
  • 没有冲突: 如果网络中没有其他节点使用相同的地址,则不会有任何回复。
地址状态:
  • 收到 NA 消息: 如果发送 NS 消息的节点收到了 NA 消息,则表明该地址已被其他节点使用,该节点不能使用该地址,并需要采取相应的措施(例如重新配置地址)。
  • 没有收到 NA 消息: 如果发送 NS 消息的节点在一定时间内没有收到任何回复,则表明该地址是唯一的,该节点可以将该地址的状态从“临时”更改为“有效” (Valid),并开始使用该地址进行通信。

路由器发现

主机通过这个过程找到路由器,并且跟其要到必要的配置信息。

路由器发现的工作过程
  1. 主机发送 RS 消息(可选): 当主机启动或接口连接到网络时,可以选择发送一个或多个 RS 消息,主动请求路由器发送 RA 消息。
  2. 路由器发送 RA 消息:
    RA消息的作用:
    • RA 消息中包含网络前缀信息,主机可以使用这些前缀自动配置 IPv6 地址(无状态地址自动配置 SLAAC)。
    • 主机可以将发送 RA 消息的路由器配置为默认路由器,用于转发目标地址不在本地链路上的数据包。
    • RA 消息中还可以包含其他配置参数,例如 MTU(最大传输单元)、跳数限制等。
      路由器发送RA消息的方式:
    • 路由器会周期性地发送 RA 消息,通告自己的存在和配置信息。
    • 当路由器收到主机发送的 RS 消息时,也会立即发送一个 RA 消息作为回应。
  3. 主机接收 RA 消息: 主机接收到 RA 消息后,会从中提取必要的信息,例如网络前缀、默认路由器等。
  4. 主机配置 IPv6 地址和默认路由器: 主机根据 RA 消息中的信息,自动配置 IPv6 地址(如果启用了 SLAAC),并将发送 RA 消息的路由器配置为默认路由器。
RS 消息的格式和内容

RS 消息的类型代码是 133。它包含以下主要字段:

  • Type: 消息类型,值为 133。
  • Code: 消息代码,值为 0。
  • Checksum: 校验和。
  • Reserved: 保留字段。
RA 消息的格式和内容

RA 消息的类型代码是 134。它包含以下主要字段:

  • Type: 消息类型,值为 134。
  • Code: 消息代码,值为 0。
  • Checksum: 校验和。
  • Cur Hop Limit: 当前跳数限制。
  • M flag(Managed address configuration flag): 管理地址配置标志。如果设置为 1,则表示主机应该使用有状态地址自动配置(DHCPv6)。
  • O flag(Other configuration flag): 其他配置标志。如果设置为 1,则表示主机应该使用 DHCPv6 获取其他配置信息。
  • Router Lifetime: 路由器生存时间,表示该路由器作为默认路由器的有效时间。
  • Reachable Time: 可达时间。
  • Retransmit Timer: 重传定时器。
  • Options: 可选项,例如前缀信息、MTU 等。其中最重要的选项是前缀信息选项(Prefix Information Option),它包含了网络前缀、前缀长度、有效生存时间、首选生存时间等信息。

重定向

当主机发送一个数据包给路由器,而路由器发现存在一条到达目标地址的更优路径(例如,通过同一链路上的另一个路由器),路由器就会发送一个重定向消息给主机,告知主机使用更优的路径。

重定向的工作过程
  1. 主机发送数据包: 主机发送一个数据包给路由器 R1,目标地址是 D。
  2. 路由器 R1 检查路由表: 路由器 R1 检查其路由表,发现存在一条到达目标地址 D 的更优路径,该路径通过同一链路上的路由器 R2。
  3. 路由器 R1 发送重定向消息: 路由器 R1 发送一个重定向消息给主机,告知主机到达目标地址 D 应该通过路由器 R2。
  4. 主机更新邻居缓存: 主机收到重定向消息后,会将路由器 R2 添加到其邻居缓存中,并将 R2 作为到达目标地址 D 的下一跳路由器。
  5. 主机后续发送数据包: 主机后续发送到目标地址 D 的数据包将直接发送给路由器 R2。
重定向消息的格式和内容

重定向消息的类型代码是 137。它包含以下主要字段:

  • Type: 消息类型,值为 137。
  • Code: 消息代码,值为 0。
  • Checksum: 校验和。
  • Target Address: 目标地址 D。
  • Destination Address: 原始数据包的目标地址 D。
  • Options: 可选项,例如目标链路层地址选项(Target Link-Layer Address Option),包含路由器 R2 的链路层地址。
  • 标题: IPv6 邻居发现过程
  • 作者: 三葉Leaves
  • 创建于 : 2024-12-25 00:00:00
  • 更新于 : 2025-01-05 18:48:33
  • 链接: https://kiss1314.top/9d7276bafcb2/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论