2. 术语
2.1. General (一般术语)
IP - 互联网协议版本6。术语IPv4和IPv6仅在需要避免歧义的上下文中使用。
ICMP - 互联网协议版本6的互联网控制消息协议。术语ICMPv4和ICMPv6仅在需要避免歧义的上下文中使用。
node (节点) - 实现IP的设备。
router (路由器) - 转发未明确寻址给自己的IP数据包的节点。
host (主机) - 任何不是路由器的节点。
upper layer (上层) - 紧接在IP之上的协议层。示例包括传输协议 (如TCP和UDP)、控制协议 (如ICMP)、路由协议 (如OSPF) 以及通过IP "隧道" (即封装在IP中) 的互联网层 (或下层) 协议, 例如互联网络数据包交换 (IPX)、AppleTalk或IP本身。
link (链路) - 节点可以在链路层 (即紧接在IP下面的层) 进行通信的通信设施或介质。示例包括以太网 (简单或桥接)、PPP链路、X.25、帧中继或ATM网络, 以及互联网层 (或更高层) "隧道", 例如IPv4或IPv6本身的隧道。
interface (接口) - 节点与链路的连接。
neighbors (邻居) - 连接到同一链路的节点。
address (地址) - 接口或接口集的IP层标识符。
anycast address (任播地址) - 接口集 (通常属于不同节点) 的标识符。发送到任播地址的数据包将传递到该地址标识的接口之一 (根据路由协议的距离度量, "最近"的一个)。参见 [ADDR-ARCH]。
注意, 任播地址在语法上与单播地址无法区分。因此, 向任播地址发送数据包的节点通常不知道正在使用任播地址。在本文档的其余部分中, 对单播地址的引用也适用于任播地址 (在节点不知道单播地址实际上是任播地址的情况下)。
prefix (前缀) - 由地址的一些初始位组成的位串。
link-layer address (链路层地址) - 接口的链路层标识符。示例包括以太网链路的IEEE 802地址。
on-link (链路内) - 分配给指定链路上的接口的地址。如果满足以下条件, 节点会认为地址是链路内的:
- 它被链路的某个前缀覆盖 (例如, 如前缀信息选项中的on-link标志所示), 或
- 相邻路由器将该地址指定为重定向消息的目标, 或
- 接收到该 (目标) 地址的邻居通告消息, 或
- 从该地址接收到任何邻居发现消息。
off-link (链路外) - "链路内"的反义词; 未分配给指定链路上的任何接口的地址。
longest prefix match (最长前缀匹配) - 确定前缀集中哪个前缀 (如果有) 覆盖目标地址的过程。如果前缀中的所有位与目标地址的最左边位匹配, 则目标地址被前缀覆盖。当多个前缀覆盖一个地址时, 最长的前缀是匹配的那个。
reachability (可达性) - 到邻居的单向"前向"路径是否正常运行。特别是, 发送到邻居的数据包是否到达相邻机器的IP层并由接收IP层正确处理。对于相邻路由器, 可达性意味着节点的IP层发送的数据包被传递到路由器的IP层, 并且路由器确实在转发数据包 (即, 它被配置为路由器, 而不是主机)。对于主机, 可达性意味着节点的IP层发送的数据包被传递到邻居主机的IP层。
packet (数据包) - IP头部加有效载荷。
link MTU (链路MTU) - 最大传输单元, 即可以在链路上的一个传输单元中传送的最大数据包大小 (以八位字节为单位)。
target (目标) - 寻求地址解析信息的地址, 或在重定向时作为新的第一跳的地址。
proxy (代理) - 代表另一个节点响应邻居发现查询消息的节点。代表已移出链路的移动节点的路由器可能会充当移动节点的代理。
ICMP destination unreachable indication (ICMP目的地不可达指示) - 返回给因 [ICMPv6] 中概述的原因而无法传递的数据包的原始发送者的错误指示。如果错误发生在发起数据包的节点之外的节点上, 则生成ICMP错误消息。如果错误发生在发起节点上, 则只要通过适当的机制 (例如, 过程调用的返回值) 通知上层发送者, 实现就不需要实际创建并向源发送ICMP错误数据包。但是, 请注意, 实现可能会发现在某些情况下通过获取违规数据包、生成ICMP错误消息然后通过通用错误处理例程 (本地) 传递它来向发送者返回错误很方便。
random delay (随机延迟) - 在发送消息时, 有时需要延迟传输随机时间量, 以防止多个节点在完全相同的时间传输, 或防止长期定期传输彼此同步 [SYNC]。当需要随机组件时, 节点以这样的方式计算实际延迟, 使得计算的延迟形成在指定的最小和最大延迟时间之间的均匀分布的随机值。实现者必须注意确保计算的随机组件的粒度和使用的计时器的分辨率都足够高, 以确保多个节点延迟相同时间量的概率很小。
random delay seed (随机延迟种子) - 如果在计算随机延迟组件时使用伪随机数生成器, 则应在使用之前使用唯一种子初始化生成器。注意, 仅使用接口标识符作为种子是不够的, 因为接口标识符并不总是唯一的。为了降低重复接口标识符导致使用相同种子的概率, 应从各种输入源 (例如, 机器组件) 计算种子, 这些输入源即使在相同的"盒子"上也可能不同。例如, 种子可以通过将CPU的序列号与接口标识符组合来形成。有关随机性和随机数生成的更多信息, 请参见 [RAND]。
2.2. Link Types (链路类型)
不同的链路层具有不同的属性。邻居发现关注的属性包括:
multicast capable (支持组播) - 在链路层支持向所有 (即广播) 或所有邻居的子集发送数据包的本机机制的链路。
point-to-point (点对点) - 恰好连接两个接口的链路。点对点链路被假定具有组播能力和链路本地地址。
non-broadcast multi-access (NBMA) (非广播多路访问) - 可以连接两个以上接口但不支持组播或广播的本机形式 (例如, X.25、ATM、帧中继等) 的链路。注意, 所有链路类型 (包括NBMA) 都应该为需要它的应用程序提供组播服务 (例如, 使用组播服务器)。但是, ND是否应该使用此类设施或提供ND等效组播能力的替代机制是进一步研究的问题。
shared media (共享媒体) - 允许多个节点之间直接通信的链路, 但连接的节点以这样的方式配置, 使得它们没有所有链路内目的地的完整前缀信息。也就是说, 在IP级别, 同一链路上的节点可能不知道它们是邻居; 默认情况下, 它们通过路由器进行通信。示例包括大型 (交换) 公共数据网络, 如交换多兆位数据服务 (SMDS) 和宽带综合业务数字网 (B-ISDN)。也称为"大云"。参见 [SH-MEDIA]。
variable MTU (可变MTU) - 没有明确定义MTU的链路 (例如, IEEE 802.5令牌环)。许多链路 (例如, 以太网) 具有由链路层协议或描述如何在链路层上运行IP的特定文档定义的标准MTU。
asymmetric reachability (非对称可达性) - 非自反和/或非传递可达性是正常操作的一部分的链路。(非自反可达性意味着从A发出的数据包到达B, 但从B发出的数据包不到达A。非传递可达性意味着从A发出的数据包到达B, 从B发出的数据包到达C, 但从A发出的数据包不到达C。) 许多无线电链路表现出这些属性。
2.3. Addresses (地址)
邻居发现使用 [ADDR-ARCH] 中定义的多个不同地址, 包括:
all-nodes multicast address (全节点组播地址) - 到达所有节点的链路本地范围地址, FF02::1。
all-routers multicast address (全路由器组播地址) - 到达所有路由器的链路本地范围地址, FF02::2。
solicited-node multicast address (请求节点组播地址) - 作为请求目标地址的函数计算的链路本地范围组播地址。该函数在 [ADDR-ARCH] 中描述。选择该函数使得仅在最高有效位上不同的IP地址 (例如, 由于与不同提供商关联的多个前缀) 将映射到相同的请求节点地址, 从而减少节点必须在链路层加入的组播地址数量。
link-local address (链路本地地址) - 具有仅链路范围的单播地址, 可用于到达邻居。路由器上的所有接口必须 (MUST) 具有链路本地地址。此外, [ADDRCONF] 要求主机上的接口具有链路本地地址。
unspecified address (未指定地址) - 表示缺少地址 (例如, 地址未知) 的保留地址值。它永远不会用作目的地址, 但如果发送者不 (尚未) 知道自己的地址 (例如, 在无状态地址自动配置期间验证地址未使用时 [ADDRCONF]), 则可以用作源地址。未指定地址的值为0:0:0:0:0:0:0:0。
注意, 本规范并未严格遵守 [ADDR-SEL] 中关于源地址和目的地址范围的一致性要求。在某些情况下, 主机可能使用范围大于IPv6头部中目的地址的源地址。
2.4. Requirements (要求)
关键词MUST (必须)、MUST NOT (绝对不能)、REQUIRED (要求)、SHALL (应)、SHALL NOT (不应)、SHOULD (应该)、SHOULD NOT (不应该)、RECOMMENDED (推荐)、MAY (可以) 和OPTIONAL (可选) 在本文档中出现时, 应按照 [KEYWORDS] 中所述进行解释。
本文档还使用内部概念变量来描述协议行为, 以及实现必须允许系统管理员更改的外部变量。提供特定变量名称、它们的值如何变化以及它们的设置如何影响协议行为是为了演示协议行为。实现不需要具有此处描述的确切形式, 只要其外部行为与本文档中描述的一致即可。