转载翻译自:维基百科

在系统启动时,节点会在每个启用 IPv6 的接口上自动创建一个本地链路地址,即使全球可路由地址是手动配置的或通过 “配置协议” 获得的(见下文)。这个本地链路地址在没有任何事先配置的情况下,独立地通过无状态地址自动配置(SLAAC),它使用了邻居发现协议(NDP)的一个组件。这个地址的前缀为 fe80::/64

在 IPv4 中,典型的 “配置协议” 包括 DHCP 或 PPP。尽管存在 DHCPv6,但 IPv6 主机通常使用邻居发现协议来创建一个全球可路由的单播地址:主机发送路由器请求,IPv6 路由器以前缀分配来回应。

这些地址的低 64 位被填充了一个修改过的 EUI-64 格式的 64 位接口标识符。这个标识符通常由该接口的所有自动配置地址共享,这样做的好处是只需要加入一个多播组进行邻居发现。为此,使用了一个组播地址,由网络前缀 ff02::1:ff00:0/104 和地址的 24 个最低有效位组成。

修改过的 EUI-64

一个 64 位的接口标识符最常见的是来自其 48 位的 MAC 地址。一个 MAC 地址 00-0C-29-0C-47-D5 通过在中间插入FF-FE变成一个 64 位 EUI-64: 00-0C-29-FF-FE-0C-47-D5。当这个 EUI-64 被用来组成一个 IPv6 地址时,它被修改了:通用/本地位(EUI-64 的第 7 个最重要的位,从 1 开始)的含义被颠倒了,所以 1 现在意味着通用。要创建一个网络前缀为 2001:db8:1:2::/64 的 IPv6 地址,它产生的地址是 2001:db8:1:2:0**2**0c:29ff:fe0c:47d5 (通用/本地位,即粗体四位中的倒数第二位,在这种情况下颠倒为 1,因为 MAC 地址是通用的)。

重复地址检测

将单播 IPv6 地址分配给一个接口时,需要使用邻居征集(Neighbor Solicitation)和邻居广告(Neighbor Advertisement)消息(ICMPv6 类型 135 和 136)对该地址的唯一性进行内部测试。在建立唯一性的过程中,地址有一个暂定状态。

节点加入暂定地址的征集节点组播地址(如果尚未这样做),并发送邻居征集,将暂定地址作为目标地址,未指定的地址(::/128)作为源地址。该节点还加入了全主机组播地址 ff02::1,因此它将能够接收邻居广告。

如果一个节点收到以自己的暂定地址为目标地址的邻居征集,那么这个地址就不是唯一的。如果节点收到以暂定地址为广告源的邻居广告,情况也是如此。只有在成功确定一个地址是唯一的之后,它才可以被分配并被一个接口使用。

地址寿命

绑定在接口上的每个 IPv6 地址都有一个固定的寿命。寿命是无限的,除非配置成一个较短的期限。有两种寿命来控制地址的状态:首选寿命和有效寿命。寿命可以在提供自动配置值的路由器中配置,也可以在手动配置接口的地址时指定。

当一个地址被分配到一个接口时,它就获得了 “首选” 状态,并在其首选寿命内保持这个状态。在这个期限过后,状态变成 “废弃的”,不应使用这个地址建立新的连接。在其有效期限过后,该地址成为 “无效的”;该地址被从接口上删除,并可能被分配到互联网上的其他地方。

注意:在大多数情况下,寿命不会过期,因为新的路由器广告(RA)会刷新定时器。但是,如果没有足够的路由器公告,最终首选的寿命就会过期,地址就会变成 “废弃的”。

临时地址

全球唯一的静态 MAC 地址,被无状态地址自动配置用来创建接口标识符,提供了一个跟踪用户设备和用户的机会——跨越时间和 IPv6 网络前缀的变化。为了减少用户身份被永久绑定在 IPv6 地址部分的前景,节点可以创建临时地址,接口标识符基于随时间变化的随机比特串和相对短的寿命(小时到天),之后被新地址替换。

临时地址可作为源地址用于发起连接,而外部主机则通过查询域名系统使用公共地址。

在 OS X Lion 以后的苹果系统以及 Windows Vista、Windows 2008 Server 以后的微软系统中,为 IPv6 配置的网络接口默认使用临时地址。

加密生成的地址

作为增强邻居发现协议安全性的一种手段,加密生成的地址(Cryptographically Generated Addresses 或 CGA)于 2005 年被引入,作为安全邻居发现(SEND)协议的一部分。

这样的地址是使用两个哈希函数生成的,该函数需要几个输入。第一个使用一个公钥和一个随机修改器;后者被反复递增,直到获得特定数量零位的结果哈希。与比特币挖矿中的 “工作证明” 领域相当。)第二个哈希函数采用网络前缀和前一个哈希值。第二个哈希结果中的最低 64位 被附加到 64 位网络前缀上,形成一个 128 位地址。

哈希函数也可以用来验证一个特定的 IPv6 地址是否满足有效的 CGA 要求。这样一来,就可以在受信任的地址之间专门建立通信。

稳定的隐私地址

使用无状态自动配置的地址对安全和隐私问题有严重的影响,因为底层硬件地址(最典型的是 MAC 地址)暴露在本地网络之外,允许跟踪用户活动和将用户账户与其他信息关联起来。它还允许特定厂商的攻击策略,并减少了搜索攻击目标的地址空间大小。

稳定的隐私地址被引入以弥补这些缺点。它们在一个特定的网络内是稳定的,但在移动到另一个网络时就会改变,以改善隐私。它们是确定的,但在网络的整个地址空间中随机地选择。

稳定的隐私地址的产生是基于一个使用几个稳定参数的哈希函数。它依赖于具体的实现,但建议至少使用网络前缀、网络接口的名称、一个重复地址计数器和一个密钥。产生的哈希值被用来构建最终的地址。通常情况下,64 个最低有效位与 64 位网络前缀相连接,产生一个 128 位地址。如果网络前缀小于 64 位,则会使用更多的哈希值。如果产生的地址与现有的或保留的地址不冲突,它就被分配给接口。