跳到主要内容

2. 术语

2.1. 通用术语

IP - Internet Protocol Version 6. 术语 IPv4 和 IPv6 仅在需要避免歧义的上下文中使用.

ICMP - Internet Protocol Version 6 的 Internet Control Message Protocol. 术语 ICMPv4 和 ICMPv6 仅在需要避免歧义的上下文中使用.

node (节点) - 实现 IP 的设备.

router (路由器) - 转发并非显式寻址给自身的 IP 分组的节点.

host (主机) - 不是路由器的任何节点.

upper layer (上层) - 紧邻 IP 之上的协议层. 示例包括 TCP 和 UDP 等传输协议, ICMP 等控制协议, OSPF 等路由协议, 以及在 IP 上被 "隧道化" (即封装在 IP 中) 的 Internet 层 (或更低层) 协议, 例如 Internetwork Packet Exchange (IPX), AppleTalk 或 IP 本身.

link (链路) - 节点可在链路层通信的通信设施或介质, 即 IP 紧下方的层. 示例包括 Ethernet (简单以太网或桥接以太网), PPP 链路, X.25, Frame Relay, ATM 网络, 以及 Internet 层 (或更高层) "隧道", 例如承载在 IPv4 或 IPv6 本身之上的隧道.

interface (接口) - 节点连接到链路的接入点.

neighbors (邻居) - 连接到同一链路的节点.

address (地址) - 接口或一组接口的 IP 层标识符.

anycast address (任播地址) - 一组接口 (通常属于不同节点) 的标识符. 发送到任播地址的分组会被递送到该地址所标识的其中一个接口 (按路由协议的距离度量为 "最近" 的那个). 见 [ADDR-ARCH].

注意, 任播地址在语法上无法与单播地址区分. 因此, 向任播地址发送分组的节点通常并不知道正在使用的是任播地址. 在本文档其余部分, 对单播地址的引用也适用于节点不知道某个单播地址实际上是任播地址的那些情况.

prefix (前缀) - 由地址的若干个初始位组成的位串.

link-layer address (链路层地址) - 接口的链路层标识符. 示例包括 Ethernet 链路的 IEEE 802 地址.

on-link (链路上) - 分配给指定链路上某个接口的地址. 如果满足以下任一条件, 节点即认为某个地址位于链路上:

  • 该地址被链路的某个前缀覆盖 (例如 Prefix Information option 中的 on-link flag 所指示), 或
  • 相邻路由器将该地址指定为 Redirect message 的目标, 或
  • 收到了针对该 (目标) 地址的 Neighbor Advertisement message, 或
  • 收到了来自该地址的任何 Neighbor Discovery message.

off-link (链路外) - "on-link" 的反义词; 未分配给指定链路上任何接口的地址.

longest prefix match (最长前缀匹配) - 确定一组前缀中哪个前缀 (如果存在) 覆盖目标地址的过程. 如果前缀中的所有位都与目标地址最左侧的位匹配, 则该目标地址被该前缀覆盖. 当多个前缀覆盖同一地址时, 最长前缀就是匹配位数最多的前缀.

reachability (可达性) - 到邻居的单向 "前向" 路径是否正常工作. 更具体地说, 即发送给邻居的分组是否到达邻居机器上的 IP 层并由接收方 IP 层正确处理. 对相邻路由器而言, 可达性意味着节点 IP 层发送的分组被递送到路由器的 IP 层, 且该路由器确实在转发分组 (即它被配置为路由器, 而不是主机). 对主机而言, 可达性意味着节点 IP 层发送的分组被递送到邻居主机的 IP 层.

packet (分组) - IP 头部加有效载荷.

link MTU (链路 MTU) - Maximum Transmission Unit, 即在链路的一次传输单元中可承载的最大分组大小, 单位为 octet.

target (目标) - 需要查询地址解析信息的地址, 或在重定向时作为新的第一跳的地址.

proxy (代理) - 代表另一个节点响应 Neighbor Discovery 查询消息的节点. 代表已经移出链路的移动节点工作的路由器可能充当该移动节点的代理.

ICMP destination unreachable indication (ICMP 目的地不可达指示) - 对因 [ICMPv6] 中概述的原因而无法递送的分组返回给原始发送方的错误指示. 如果错误发生在发起该分组的节点之外的节点上, 则生成 ICMP 错误消息. 如果错误发生在发起节点上, 只要通过适当机制 (例如过程调用的返回值) 通知上层发送方, 实现并不要求实际创建并向源发送 ICMP 错误分组. 但是请注意, 在某些情况下, 实现可能会发现一种便利做法: 取出导致错误的分组, 生成 ICMP 错误消息, 然后通过通用错误处理例程在本地递送它, 从而把错误返回给发送方.

random delay (随机延迟) - 发送消息时, 有时需要将一次传输延迟一个随机时间量, 以防止多个节点在完全相同的时间发送, 或防止长周期的周期性传输彼此同步 [SYNC]. 当需要随机分量时, 节点计算实际延迟的方式应使得计算出的延迟形成一个均匀分布的随机值, 落在指定的最小和最大延迟时间之间. 实现者必须注意确保所计算随机分量的粒度以及所用定时器的分辨率都足够高, 以保证多个节点延迟相同时间量的概率很小.

random delay seed (随机延迟种子) - 如果在计算随机延迟分量时使用伪随机数生成器, 则在使用前应使用唯一种子初始化该生成器. 注意, 仅使用接口标识符作为种子并不充分, 因为接口标识符并不总是唯一的. 为降低重复接口标识符导致使用相同种子的概率, 应从多种输入源 (例如机器组件) 计算种子, 这些输入源即使在相同的 "盒子" 上也很可能不同. 例如, 可以通过组合 CPU 序列号和接口标识符来形成种子. 关于随机性和随机数生成的更多信息见 [RAND].

2.2. 链路类型

不同链路层具有不同属性. Neighbor Discovery 关注的属性如下:

multicast capable (支持组播) - 在链路层支持原生机制, 可向所有邻居 (即广播) 或所有邻居的一个子集发送分组的链路.

point-to-point (点到点) - 恰好连接两个接口的链路. 点到点链路被假定具有组播能力和链路本地地址.

non-broadcast multi-access (NBMA, 非广播多路访问) - 可连接两个以上接口, 但不支持原生组播或广播形式的链路 (例如 X.25, ATM, Frame Relay 等). 注意, 所有链路类型 (包括 NBMA) 都预期为需要组播服务的应用提供组播服务 (例如使用组播服务器). 但是, ND 是否应使用此类设施, 或使用为 ND 提供等效组播能力的替代机制, 仍是有待进一步研究的问题.

shared media (共享介质) - 允许多个节点之间直接通信的链路, 但所连接节点的配置方式使它们并不拥有所有链路上目的地的完整前缀信息. 也就是说, 在 IP 层, 同一链路上的节点可能并不知道彼此是邻居; 默认情况下, 它们通过路由器通信. 示例包括大型 (交换式) 公共数据网络, 例如 Switched Multimegabit Data Service (SMDS) 和 Broadband Integrated Services Digital Network (B-ISDN). 也称为 "large clouds". 见 [SH-MEDIA].

variable MTU (可变 MTU) - 没有明确定义 MTU 的链路 (例如 IEEE 802.5 token ring). 许多链路 (例如 Ethernet) 具有由链路层协议或说明如何在该链路层上运行 IP 的特定文档定义的标准 MTU.

asymmetric reachability (非对称可达性) - 非自反和/或非传递可达性属于正常运行状态的一类链路. (非自反可达性意味着来自 A 的分组能到达 B, 但来自 B 的分组不能到达 A. 非传递可达性意味着来自 A 的分组能到达 B, 来自 B 的分组能到达 C, 但来自 A 的分组不能到达 C.) 许多无线链路表现出这些属性.

2.3. 地址

Neighbor Discovery 使用 [ADDR-ARCH] 中定义的若干不同地址, 包括:

all-nodes multicast address (所有节点组播地址) - 用于到达所有节点的链路本地作用域地址, FF02::1.

all-routers multicast address (所有路由器组播地址) - 用于到达所有路由器的链路本地作用域地址, FF02::2.

solicited-node multicast address (请求节点组播地址) - 根据被请求目标地址计算得到的链路本地作用域组播地址. 该函数在 [ADDR-ARCH] 中描述. 选择该函数的目的是, 使仅最高有效位不同的 IP 地址 (例如由于与不同提供商相关联的多个前缀造成) 映射到同一个请求节点地址, 从而减少节点在链路层必须加入的组播地址数量.

link-local address (链路本地地址) - 具有仅链路作用域, 可用于到达邻居的单播地址. 路由器上的所有接口必须具有链路本地地址. 此外, [ADDRCONF] 要求主机上的接口具有链路本地地址.

unspecified address (未指定地址) - 表示缺少地址 (例如地址未知) 的保留地址值. 它绝不会用作目的地址, 但如果发送方 (尚) 不知道自身地址, 则可用作源地址 (例如在无状态地址自动配置 [ADDRCONF] 期间验证某地址未被使用时). 未指定地址的值为 0:0:0:0:0:0:0:0.

注意, 本规范并不严格遵守 [ADDR-SEL] 中关于源地址和目的地址作用域的一致性要求. 在某些情况下, 主机可能在 IPv6 头部中使用作用域大于目的地址的源地址.

2.4. 要求

本文档中出现的关键词 MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY 和 OPTIONAL 应按 [KEYWORDS] 中的描述解释.

本文档还使用内部概念变量来描述协议行为, 并使用外部变量表示实现必须允许系统管理员修改的内容. 具体变量名, 其值如何变化, 以及其设置如何影响协议行为, 都是为了说明协议行为. 实现无需以本文档所述的精确形式包含这些变量, 只要其外部行为与本文档描述一致即可.