系统管理指南:IP 服务

IPv6 相邻节点搜索协议

IPv6 引入了相邻节点搜索协议,如 RFC 2461, Neighbor Discovery for IP Version 6 (IPv6) 中所述。有关相邻节点搜索的主要功能的概述,请参阅IPv6 相邻节点搜索协议概述

本节讨论相邻节点搜索协议的以下功能:

相邻节点搜索功能中的 ICMP 消息

相邻节点搜索功能定义了五种新的 Internet 控制消息协议 (Internet Control Message Protocol, ICMP) 消息。这些消息具有以下用途:

自动配置过程

本节概述在自动配置过程中由接口执行的典型步骤。自动配置仅在能够进行多点传送的链路上执行。

  1. 启用能够进行多点传送的接口,例如,在启动某个节点上的系统时启用该接口。

  2. 节点在执行自动配置过程时首先为接口生成链路本地地址。

    链路本地地址是根据接口的介质访问控制 (Media Access Control, MAC) 地址构造的。

  3. 节点发送相邻节点请求消息,其中包含暂定为目标的链路本地地址。

    发送此消息的目的在于验证要使用的地址未由链路上的其他节点占用。在验证之后,可以将链路本地地址指定给接口。

    1. 如果建议的地址已被另一个节点使用,则该节点将返回一条相邻节点通告,声明该地址正在使用中。

    2. 如果另一个节点也正在尝试使用同一地址,则该节点也会针对该目标发送一条相邻节点请求。

      相邻节点请求传输或重新传输的数量以及连续请求之间的延迟与链路有关。如有必要,可以设置这些参数。

  4. 如果某个节点发现它要使用的链路本地地址不唯一,则自动配置过程会停止。此时,您必须手动配置该接口的链路本地地址。

    要简化恢复操作,可以提供一个备用接口 ID 来覆盖缺省标识符。这样,自动配置机制就可以使用这个可能唯一的新接口 ID 继续工作。

  5. 如果某个节点发现它要使用的链路本地地址唯一,该节点会将此地址指定给这个接口。

    此时,该节点与相邻节点具有 IP 级别的连通性。其余的自动配置步骤只能由主机执行。

获取路由器通告

自动配置的下一个阶段涉及到获取路由器通告或者确定是否没有路由器存在。如果存在路由器,路由器会发送路由器通告,以指定主机应当执行哪种类型的自动配置。

路由器定期发送路由器通告。但是,相邻通告之间的延迟通常比执行自动配置的主机可以等待的时间要长。为了快速获取通告,主机可以向所有路由器多点传送组发送一个或多个路由器请求。

前缀配置变量

路由器通告还包含前缀变量,其中包含无状态地址自动配置用于生成前缀的信息。路由器通告中“无状态地址自动配置”字段是单独处理的。“地址自动配置”标志是一个包含前缀信息的选项字段,它指示该选项是否可以应用于无状态自动配置过程。如果该选项字段确实适用,则其他选项字段中包含具有生命周期值的子网前缀。这些值指示根据前缀创建的地址保持优先和有效的时间长度。

因为路由器会定期生成路由器通告,所以主机会不断收到新通告。启用了 IPv6 的主机可处理包含在每个通告中的信息。主机会添加到这些信息中,还会刷新在以前的通告中收到的信息。

地址的唯一性

出于安全方面的考虑,在将每个地址指定给接口之前,必须测试它们是否唯一。对于通过无状态自动配置过程创建的地址,情况会有所不同。地址是否唯一主要由地址中基于接口 ID 创建的那一部分来确定。因此,如果经过验证,节点的链路本地地址唯一,则无需再逐一测试其他地址。这些地址必须是根据同一个接口 ID 创建的。与之相反,对于手动获取的所有地址,必须逐一测试它们是否唯一。某些站点的系统管理员认为执行重复地址检测得不偿失。对于这些站点,可通过设置每接口配置标志来禁用重复地址检测功能。

为了加速自动配置过程,主机可以生成其链路本地地址,并在等待路由器通告的同时验证该地址是否唯一。路由器可能会延迟几秒来响应路由器请求。因此,如果连续执行两个步骤,则完成自动配置所必需的总时间可能会非常长。

相邻节点请求和不可访问性

相邻节点搜索功能使用相邻节点请求消息来确定是否可以向同一个单点传送地址指定多个节点。相邻节点不可访问性检测功能检测相邻节点或到相邻节点的转发路径中是否有故障。该检测功能要求确认发送到某个相邻节点的包能够实际到达该相邻节点,还确定节点的 IP 层是否能够正确处理这些包。

相邻节点不可访问性检测功能使用来自以下两个来源的确认: 上层协议和相邻节点请求消息。如有可能,上层协议会确认某个连接正在执行转发。例如,当收到新的 TCP 确认时,上层协议会确认以前发送的数据已正确传送。

如果某个节点没有收到来自上层协议的肯定确认,该节点将发送单点传送相邻节点请求消息。这些消息会请求相邻节点通告,并根据此通告确认下一个跃点的可访问性。为了减少不必要的网络通信流量,探测消息只会发送到该节点将包实际发送到的相邻节点。

重复地址检测算法

为了确保所有已配置的地址在特定链路上的唯一性,节点需要针对这些地址运行重复地址检测算法。在将这些地址指定给接口之前,必须先针对节点运行该算法。重复地址检测算法是针对所有地址执行的。

本节中描述的自动配置过程仅适用于主机,而不适用于路由器。因为主机自动配置过程使用由路由器通告的信息,所以路由器需要通过其他方法进行配置。但是,路由器可使用本章中描述的机制来生成链路本地地址。另外,在将地址指定给接口之前,路由器应当能够通过针对所有地址的重复地址检测算法。

代理通告

代表目标地址接受包的路由器可以发出不可覆盖的相邻节点通告。路由器可以接受无法响应相邻节点请求的目标地址的包。目前未指定对于代理的使用。但是,代理通告有可能会用来处理诸如已移出链路的移动节点之类的情况。请注意,在处理未实现此协议的节点时,不应将使用代理作为一般机制。

传入负载平衡

具有复制接口的节点可能需要在同一个链路上的多个网络接口之间,对所收到的传入包进行负载平衡。这样的节点会将多个链路本地地址指定给同一个接口。例如,单个网络驱动程序可以将多个网络接口卡表示为具有多个链路本地地址的单个逻辑接口。

负载平衡的处理方式如下:允许路由器忽略来自路由器通告包的源链路本地地址。因此,相邻节点必须使用相邻节点请求消息来获知路由器的链路本地地址。于是,所返回的相邻节点通告消息可能包含链路本地地址,这些地址会因请求发出者而异。

链路本地地址更改

已知其链路本地地址发生更改的节点可以发出未经请求的多点传送相邻节点通告包。该节点可以向所有的节点发送多点传送包,从而更新所缓存的已无效的链路本地地址。发送未经请求的通告仅是为了提高性能。相邻节点不可访问性检测算法可确保所有的节点都能够可靠地搜索新地址,尽管延迟时间可能会稍长些。

相邻节点搜索协议与 ARP 和相关 IPv4 协议的比较

IPv6 相邻节点搜索协议的功能与下列 IPv4 协议的组合相对应: 地址解析协议 (Address Resolution Protocol, ARP)、Internet 控制消息协议 (Internet Control Message Protocol, ICMP)、路由器搜索和 ICMP 重定向。IPv4 对于相邻节点不可访问性检测没有公认的协议或机制。但是,主机要求确实为停用网关检测指定了一些可能的算法。停用网关检测所解决的问题是相邻节点不可访问性检测所能解决的问题的一部分。

以下是对相邻节点搜索协议和一组相关 IPv4 协议进行的比较。