RFC4291: IP Version 6 Addressing Architecture

本规范定义了 IP 版本 6 (IPv6)协议的寻址体系结构。该文档包括 IPv6 地址模型、IPv6 地址的文本表示、IPv6 单播地址、任播地址和组播地址的定义,以及 IPv6 节点所需的地址。本文档废除了 RFC 3513,“IP 版本 6 寻址架构”。

本文档为 Internet 社区指定了一个 Internet 标准跟踪协议,并请求讨论和改进建议。请参阅最新版本的“互联网官方协议标准”(STD 1)以了解该协议的标准化状态和状态。本备忘录的分发不受限制。

Copyright (C) The Internet Society (2006).

1. Introduction

本规范定义了 IP 版本 6 协议的寻址体系结构。它包括各种类型 IPv6 地址(单播、任播和组播)的基本格式。

2. IPv6 Addressing

IPv6 地址是接口和接口集的 128 位标识符(其中“接口”的定义见 [IPv6] 章节 2)。地址有三种类型:

  • 单播(Unicast):单个接口的标识符。发送到单播地址的数据包会被发送到该地址标识的接口。
  • 任播(Anycast):一组接口的标识符(通常属于不同的节点)。发送到任播地址的数据包被发送到由该地址(根据路由协议的距离度量,是“最近的”)识别的接口之一。
  • 多播(Multicast):一组接口的标识符(通常属于不同节点)。发送到多播地址的数据包会被传送到该地址标识的所有接口。

IPv6 中没有广播(broadcast)地址,其功能被多播(multicast)地址取代。

在本文档中,地址中的字段被赋予特定的名称,例如“子网(subnet)”。当此名称与名称后的标识符术语“ID”一起使用时(例如,“子网ID”),它指的是命名字段的内容。当它与术语“前缀”(例如,“子网前缀”)一起使用时,它指的是从左侧开始到包含此字段在内的所有地址。

在 IPv6 中,对于任何字段,全 0 和全 1 都是的合法值,除非明确排除。具体来说,前缀可能包含 0 值字段,或者以 0 值字段结尾。

2.1 Addressing Model

所有类型的 IPv6 地址都是分配给接口的,而不是分配给节点。IPv6 单播地址只的是单个接口。因为每个接口属于单个节点,所以该节点的任何接口的单播地址都可以用作该节点的标识符。

所有接口都要求至少有一个链路本地单播地址(有关其他要求的地址,请参见 2.8 节)。一个接口也可以有多个任意类型(单播、任播和组播)或任何范围的 IPv6 地址。如果接口不作为任何与非邻居的 IPv6 报文的源或目的地址,这不需要作用域大于 link-scope 的单播地址。这在某些情况对点对点接口很方便。这种寻址模型有一个例外:

如果实现中向 internet 层呈现时,将多个物理接口视为一个接口,则一个单播地址或一组单播地址
可以分配给多个物理接口。这样做有利于多个物理接口上的负载均衡。

目前,IPv6 延续了 IPv4 模型,子网前缀与一条链路相关联。多个子网前缀可以分配给同一个链路。

2.2 Text Representation of Addresses

有三种将 IPv6 地址表示为文本串的约定格式:

  1. 首选形式为 x:x:x:x:x:x:x:x,这里“x”是地址的 8 个 16 位地址片段的 1到 4 个 16 进制数字。例如:ABCD:EF01:2345:6789:ABCD:EF01:2345:67892001:DB8:0:0:8:800:200C:417A 。请注意,没有必要在单个字段中写入前导零,但每个字段必须至少有一个数字(除了 2. 中描述的情况)。
  2. 由于需要分配一些特定类型的 IPv6 地址,地址通常包含很长的零位字符串。为了使写包含零位的地址更容易,可以使用一种特殊的语法来压缩零位。使用“::”表示一组或多组 16 位的 0。“::”在一个地址中只能出现一次。"::"也可以用来压缩地址的前导或尾随零。例如下面的地址:
    2001:DB8:0:0:8:800:200C:417A   a unicast address
    FF01:0:0:0:0:0:0:101            a multicast address
    0:0:0:0:0:0:0:1                 the loopback address
    0:0:0:0:0:0:0:0                 the loopback address
    
    可以表示为:
    2001:DB8::8:800:200C:417A   a unicast address
    FF01::101                    a multicast address
    ::1                          the loopback address
    ::                           the loopback address
    
  3. 在混用 IPv4 和 IPv6 节点的环境,另一种有时更方便的形式是 x:x:x:x:x:x:d.d.d.d。这里“x”是地址的 6 个高阶 16 位地址片段的 16 进制值,“d”是地址的 4 个低阶 8 位地址片段的 10 进制值(标准的 IPv4 地址表示)。例如:0:0:0:0:0:0:13.1.68.30:0:0:0:0:FFFF:129.144.52.38 或者压缩格式:::13.1.68.3::FFFF:129.144.52.38

2.3 Text Representation of Address Prefixes

IPv6 地址前缀的文本表示类似于 IPv4 地址前缀在无类域间路由(Classless Inter-Domain Routing,CIDR)斜线表示法[CIDR]中的书写方式。IPv6地址前缀由以下符号表示:

ipv6-address/prefix-length

其中,

ipv6-address    是用第 2.2 节列出的任何一种符号表示法表示的 IPv6 地址。
prefix-length   是十进制值,规定地址中最左边多少个连续位构成前缀。

例如,以下是 60 位前缀 20010DB80000CD3 (十六进制)的合法表示形式:

2001:0DB8:0000:CD30:0000:0000:0000:0000/60
2001:0DB8::CD30:0:0:0:0/60
2001:0DB8:0:CD30::/60

以下不是上述前缀的合法表示:
2001:0DB8:0:CD3/60:在地址的任何16位块中,可以删除前导零,但不删除尾随零
2001:0DB8::CD30/60:“/”左边的地址扩展为 2001:0DB8:0000:0000:0000:0000:0000:CD30
2001:0DB8::CD3/60:“/”左边的地址扩展为 2001:0DB8:0000:0000:0000:0000:0000:0CD3

当书写节点地址和该节点地址的前缀(例如,节点的子网前缀)时,二者合并写法如下:

节点地址          2001:0DB8:0:CD30:123:4567:89AB:CDEF
和它的子网号      2001:0DB8:0:CD30::/60
二者能够缩写为    2001:0DB8:0:CD30:123:4567:89AB:CDEF/60

2.4 Address Type Identification

IPv6 地址的类型由地址的高阶位来标识,具体如下:

Address type Binary prefix IPv6 notation Section
Unspecified 00...0(128位) ::/128 2.5.2
Loopback 00...1(128位) ::1/128 2.5.3
Multicast 11111111 FF00::/8 2.7
Link-Local unicast 1111111010 FE80::/10 2.5.6
Global Unicast (everything else)

任播(Anycast)地址取自(任何作用域的)单播地址空间,在语法上与单播地址不可区分。

全球单播(Global Unicast)地址的一般格式见 2.5.4 节。一些特殊用途的包含嵌入式 IPv4 地址的全球单播地址子类型(用于 IPv4-IPv6 互操作)将在章节 2.5.5 中描述。

将来的规范可能会为其他目的重新定义全局单播空间的一个或多个子范围,但除非发生这种情况,否则实现必须把没有以上述列出的任何一种前缀开始的所有地址,当作是全球单播地址。

2.5 Unicast Addresses

IPv6 单播地址可以与任意位长的前缀聚合,类似于无分类域间路由中的 IPv4 地址。

IPv6 中有几种类型的单播地址,特别是全局单播、站点-本地单播(已弃用,参见 2.5.7 节)和链路-本地单播。全球单播也有一些特殊用途的子类型,例如带有嵌入式 IPv4 地址的 IPv6 地址。将来可以定义更多的地址类型或子类型。

IPv6 节点可能非常了解,也可能很少了解 IPv6 地址内部结构,这取决于节点扮演的角色(例如,主机 vs 路由器)。至少,一个节点可以认为单播地址(包括它自己的)没有内部结构:

   |                           128 bits                              |
   +-----------------------------------------------------------------+
   |                          node address                           |
   +-----------------------------------------------------------------+

一个稍微复杂的主机(但仍然相当简单)可能还知道它所连接的链路的子网前缀,不同的地址可能有不同的 n 位值:

   |          n bits               |           128-n bits            |
   +-------------------------------+---------------------------------+
   |       subnet prefix           |           interface ID          |
   +-------------------------------+---------------------------------+

虽然一个非常简单的路由器可能不知道 IPv6 单播地址的内部结构,但路由器通常会知道一个或多个路由协议运行分层边界。已知的边界会因路由器而异,这取决于路由器在路由层次结构中的位置。

除了前面讨论的子网边界的知识,节点不应该对 IPv6 地址的结构做任何假设。

2.5.1 Interface Identifiers

IPv6 单播地址中的接口标识符(Interface identifiers,IID)用于标识链路上的接口。它们在子网前缀中必须是唯一的。建议同一条链路上的不同节点不要使用相同的接口标识符。它们在更广泛的范围内也可能是唯一的。在某些情况下,接口的标识符将直接从该接口的链路层地址派生。同一个节点上的多个接口可以使用相同的接口标识符,只要这些接口属于不同的子网。

注意接口标识符的唯一性与 IPv6 地址的唯一性无关。例如,可以使用本地作用域接口标识(local scope interface identifier)创建全局单播地址,也可以使用通用作用域接口标识(universal scope interface identifier)创建链路本地地址(Link-Local address)。

除了以二进制值 000 开头的单播地址外,所有单播地址的“接口ID”长度都要求为 64 位,并按照修改的 EUI-64 格式构造。

修改的基于 EUI-64 格式的接口标识符在从通用令牌派生时可能具有通用作用域(例如,IEEE 802 48位MAC 或 IEEE EUI-64 标识符 [EUI64]),或者在通用全球令牌不可用时可能具有本地作用域(例如,串行链路、隧道端点)或不希望使用全球标记时(例如,隐私临时令牌 [PRIV])。

修改的 EUI-64 格式的接口标识符由 IEEE EUI-64 标识符组成时,是通过将“u”位(IEEE EUI-64 术语中的通用/本地位)反转来形成的。在产生的修改 EUI-64 格式中,“u”位被设置为 (1) 表示通用范围,它被设置为 (0) 表示本地范围。IEEE EUI-64 二进制标识符的前三个字节如下:

          0       0 0       1 1       2
         |0       7 8       5 6       3|
         +----+----+----+----+----+----+
         |cccc|ccug|cccc|cccc|cccc|cccc|
         +----+----+----+----+----+----+

以互联网标准位顺序书写,其中“u”是 通用/本地(universal/local)位,“g”是个体/组(individual/group)位,“c”是公司 ID 的位。附录A“Creating Modified EUI-64 Format Interface Identifiers”提供了创建基于修改后的 EUI-64 格式的接口标识符的示例。

在形成接口标识符时,将“u”位反转的动机是,当硬件令牌不可用时,系统管理员可以方便地配置非全局标识符。例如,串行连接(serial link)和隧道端点(tunnel end-points)都可能出现这种情况。另一种形式是 0200:0:0:10200:0:0:2,等等,代替更简单的 0:0:0:0:10:0:2,等等。

IPv6 节点不需要验证使用修改过的 EUI-64 令牌(“u”位设置为universal)创建的接口标识符是否唯一。

在修改的EUI-64格式标识符中使用通用/本地位是为了允许未来技术的开发,从而利用具有通用作用域的接口标识符。

形成接口标识符的细节在适当的“IPv6 over <link>”规范中定义,例如“IPv6 over Ethernet”[ETHER]和“IPv6 over FDDI”[FDDI]。

2.5.2 The Unspecified Address

地址 0:0:0:0:0:0 称为未指定地址(unspecified address)。它永远不能被分配给任何节点。它用来表示没有地址。使用它的一个例子是,正在初始化的主机还没有学习到它自己的地址之前,它发送的任何 IPv6 分组中 Source Address 字段的内容。

未指定的地址不能用作 IPv6 报文的目的地址或在 IPv6 路由报头中。源地址不指定的 IPv6 报文不能被 IPv6 路由器转发。

2.5.3 The Loopback Address

单播地址 0:0:0:0:0:1 称为环回地址(Loopback Address)。节点可以使用它向自身发送 IPv6 数据包。它不能被分配给任何物理接口。它被视为具有 Link-Local 作用域,可以被认为是到一个不存在的虚拟链路的虚拟接口(通常称为“环回接口(loopback interface)”)的 Link-Local 单播地址。

环回地址不能作为发送到单个节点外的 IPv6 报文的源地址。以环回地址为目的地地址的 IPv6 分组决不能发送到单一节点以外,也不能被 IPv6 路由器转发。对于目的地址为 loopback 的接口,必须丢弃报文。

2.5.4 Global Unicast Addresses

IPv6 全球单播地址的一般格式如下:

   |         n bits         |   m bits  |       128-n-m bits         |
   +------------------------+-----------+----------------------------+
   | global routing prefix  | subnet ID |       interface ID         |
   +------------------------+-----------+----------------------------+

其中全局路由前缀(global routing prefix)是一个分配给站点(子网/链路集群)的值(通常是层次结构的),子网 ID (subnet ID)是站点内链路的标识符,接口 ID (interface ID)如章节 2.5.1 所定义。

除以二进制 000 开头的地址外,所有的全球单播地址都有一个 64 位的接口 ID 字段(即n + m = 64),格式如章节 2.5.1 所述。以二进制 000 开头的全球单播地址对接口 ID 字段的大小或结构没有这样的约束。

以二进制 000 开头的全球单播地址的例子是在 2.5.5 节中描述的嵌入 IPv4 地址的 IPv6 地址。在[GLOBAL] 中可以找到一个以二进制值而不是 000 (因此有一个64位的接口ID字段)开头的全局地址示例。

2.5.5 IPv6 Addresses with Embedded IPv4 Addresses

定义了两种 IPv6 地址,它们携带 IPv4 地址的低阶 32 位。即“IPv4-Compatible IPv6 address”和“IPv4-mapped IPv6 address”。

2.5.5.1 IPv4-Compatible IPv6 Address

定义“IPv4-Compatible IPv6 address”是为了帮助实现 IPv6 的过渡。“IPv4-Compatible IPv6 address”格式如下:

   |                80 bits               | 16 |      32 bits        |
   +--------------------------------------+--------------------------+
   |0000..............................0000|0000|    IPv4 address     |
   +--------------------------------------+----+---------------------+

注:“IPv4-Compatible IPv6 address”中的 IPv4 地址必须为全球唯一的 IPv4 单播地址。

“IPv4-Compatible IPv6 address”现在已弃用,因为当前的 IPv6 转换机制不再使用这些地址。不需要新的或更新的实现来支持这种地址类型。

2.5.5.2 IPv4-mapped IPv6 Address

定义了第二种类型的 IPv6 地址,它包含一个嵌入式 IPv4 地址。该地址类型用于将 IPv4 节点的地址表示为 IPv 6地址。“IPv4-mapped IPv6 address”格式如下:

   |                80 bits               | 16 |      32 bits        |
   +--------------------------------------+--------------------------+
   |0000..............................0000|FFFF|    IPv4 address     |
   +--------------------------------------+----+---------------------+

关于“IPv4-mapped IPv6 address”的使用背景参见 [RFC4038]。

链路本地(Link-Local)地址用于单个链路。Link-Local 地址格式如下:

   |   10     |
   |  bits    |         54 bits         |          64 bits           |
   +----------+-------------------------+----------------------------+
   |1111111010|           0             |       interface ID         |
   +----------+-------------------------+----------------------------+

Link-Local 地址被设计用于在单个链路上寻址,用于自动地址配置、邻居发现或没有路由器时。

路由器不能将源地址或目的地址为 Link-Local 的报文转发到其他链路。

2.5.7 Site-Local IPv6 Unicast Addresses

站点-本地(Site-Local)地址最初设计用于在站点内部寻址,而不需要全局前缀。站点本地地址现在已如 [SLDEP] 中定义的那样被弃用。

Site-Local 地址有以下格式:

   |   10     |
   |  bits    |         54 bits         |         64 bits            |
   +----------+-------------------------+----------------------------+
   |1111111011|        subnet ID        |       interface ID         |
   +----------+-------------------------+----------------------------+

这个前缀在 [RFC3513] 中定义的特殊行为在新的实现中必须不再被支持(即,新的实现必须将这个前缀视为全局单播)。

现有的实现和部署可能会继续使用这个前缀。

2.6 Anycast Addresses

IPv6 任播地址是一个被分配给多个接口(通常属于不同的节点)的地址,其属性是,发送到任播地址的数据包将被路由到具有该地址的“最近”接口,根据路由协议的距离度量。

任播地址从单播地址空间中分配,使用任何定义的单播地址格式。因此,任播地址和单播地址在语法上是不可区分的。当一个单播地址被分配给多个接口,从而将其转换为任播地址时,被分配该地址的节点必须显式配置,以知道它是任播地址。

对于任何被分配的任播地址,该地址有一个最长的前缀 P,它标识了属于该任播地址的所有接口所在的拓扑区域。在由 P 标识的区域内,任播地址必须在路由系统中作为一个单独的条目维护(通常称为“主机路由”);在由 P 标识的区域之外,任播地址可以聚合到前缀 P 的路由表项中。

注意,在最坏的情况下,任播集合的前缀 P 可能是空前缀,也就是说,集合的成员可能没有拓扑局部性。在这种情况下,任播地址必须在整个 Internet 中作为一个单独的路由条目来维护,这对支持多少这样的“全局”任播集合提出了一个严重的扩展限制。因此,预计对全局任播集合的支持可能不可用或非常有限。

任播地址的一个预期用途是识别属于提供互联网服务的组织的一组路由器。这些地址可以用作 IPv6 路由报头中的中间地址,以使数据包通过特定的服务提供者或服务提供者序列被交付。

其他一些可能的用途是识别连接到特定子网的路由器集合,或提供进入特定路由域的入口的路由器集合。

2.6.1 Required Anycast Address

子网路由器任播(Subnet-Router anycast)地址是预定义的。其格式如下:

   |                         n bits                 |   128-n bits   |
   +------------------------------------------------+----------------+
   |                   subnet prefix                | 00000000000000 |
   +------------------------------------------------+----------------+

任播地址中的“subnet prefix”是标识特定链路的前缀。该任播地址在语法上与接口标识符为零的接口的单播地址相同。

发送到 Subnet-Router anycast 地址的数据包将被发送到子网中的一个路由器。所有的路由器都需要支持子网路由器的任播地址,因为它们有接口。

Subnet-Router anycast 地址用于节点需要与任意一组路由器进行通信的应用程序。

2.7 Multicast Addresses

IPv6 组播地址是一组接口(通常在不同的节点上)的标识符。一个接口可以属于任意数量的多播组。多播地址的格式如下:

   |   8    |  4 |  4 |                  112 bits                   |
   +------ -+----+----+---------------------------------------------+
   |11111111|flgs|scop|                  group ID                   |
   +--------+----+----+---------------------------------------------+

地址开头的二进制 11111111 标识该地址为多播地址。
flags 是 4 个 flag 的集合:

+-+-+-+-+
|0|R|P|T|
+-+-+-+-+
  • 高阶标志是保留的,必须初始化为0。
  • T = 0 表示一个永久分配的(众所周知的)组播地址,由IANA (Internet assigned Numbers Authority)分配。
  • T = 1 表示非永久分配(“瞬态”或“动态”分配)的多播地址。
  • P 标志的定义和用法可以在 [RFC3306] 中找到。
  • R 标志的定义和用法可以在 [RFC3956] 中找到。

scop 是一个 4 位组播作用域值,用于限制组播组的作用域。取值如下:

         0  reserved
         1  Interface-Local scope
         2  Link-Local scope
         3  reserved
         4  Admin-Local scope
         5  Site-Local scope
         6  (unassigned)
         7  (unassigned)
         8  Organization-Local scope
         9  (unassigned)
         A  (unassigned)
         B  (unassigned)
         C  (unassigned)
         D  (unassigned)
         E  Global scope
         F  reserved
Interface-Local 作用域只覆盖节点上的一个接口,只适用于组播的环回传输。从其他节点收到的 Interface-Local 作用域的报文必须被丢弃。

Link-Local 组播作用域与对应的单播作用域跨越相同的拓扑区域。

Admin-Local 作用域是必须管理性配置的最小作用域,即不是从物理连接或其他非多播相关配置中自动获得的。

Site-Local 作用域旨在跨越单个站点。

Organization-Local 作用域旨在跨越属于单个组织的多个站点。

标有“(unassigned)”的作用域可供管理员定义其他多播区域。

group ID 标识给定范围内的多播组(永久或临时)。组播组 ID 字段结构的附加定义在 [RFC3306] 中提供。

永久分配的多播地址的“含义”与作用域值无关。例如,如果“NTP服务器组”被分配一个组 ID 为 101 (十六进制)的永久多播地址,那么

FF01:0:0:0:0:0:0:101 表示所有 NTP 服务器与发送者在同一个接口(即同一个节点)上。
FF02:0:0:0:0:0:0:101 表示与发送方在同一条链路上的所有 NTP 服务器。
FF05:0:0:0:0:0:0:101 表示与发送方在同一站点的所有 NTP 服务器。
FF0E:0:0:0:0:0:0:101 表示互联网上的所有 NTP 服务器。

非永久分配的多播地址(Non-premanently-assigned multicast address)仅在给定范围内有意义。例如,一组确定的非永久性的,本地站点多播地址 FF15:0:0:0:0:0:0:101 标识的组与在不同站点处使用相同地址的组、使用不同范围的相同组 ID 的非永久组、以及具有相同组 ID 的永久组都没有关系。

多播地址不能用作 IPv6 数据包中的源地址,也不能出现在任何路由头中。

路由器不得转发任何超出目的多播地址中 scop 字段所指示范围之外的多播数据包。

节点不得向其 scop 字段包含保留值 0 的多播地址发起分组;如果收到这样的数据包,它必须被无声地丢弃。节点不应该向其 scop 字段包含保留值 F 的多播地址发起分组;如果发送或接收到这样的数据包,它必须被视为与目的地为全局(scop E)多播地址的数据包相同。

2.7.1 Pre-Defined Multicast Addresses

下面是预定义的众所周知(well-known)的多播地址。本节中定义的组 ID 是为显式范围值定义的。

不允许将这些组 ID 用于任何其他范围值,T 标志等于0。

保留的多播地址:

                                      FF00:0:0:0:0:0:0:0
                                      FF01:0:0:0:0:0:0:0
                                      FF02:0:0:0:0:0:0:0
                                      FF03:0:0:0:0:0:0:0
                                      FF04:0:0:0:0:0:0:0
                                      FF05:0:0:0:0:0:0:0
                                      FF06:0:0:0:0:0:0:0
                                      FF07:0:0:0:0:0:0:0
                                      FF08:0:0:0:0:0:0:0
                                      FF09:0:0:0:0:0:0:0
                                      FF0A:0:0:0:0:0:0:0
                                      FF0B:0:0:0:0:0:0:0
                                      FF0C:0:0:0:0:0:0:0
                                      FF0D:0:0:0:0:0:0:0
                                      FF0E:0:0:0:0:0:0:0
                                      FF0F:0:0:0:0:0:0:0

上述多播地址被保留,不得分配给任何多播组。
所有节点地址:

                              FF01:0:0:0:0:0:0:1
                              FF02:0:0:0:0:0:0:1

上述多播地址标识范围 1(接口本地,interface-local)或范围 2(链路本地,link-local)内的所有 IPv6 节点的组。

所有路由器地址:

                               FF01:0:0:0:0:0:0:2
                               FF02:0:0:0:0:0:0:2
                               FF05:0:0:0:0:0:0:2

上述多播地址标识范围 1(接口本地,interface-local)或范围 2(链路本地,link-local)或 5 (站点本地,site-local)内的所有 IPv6 路由器的组。

请求节点地址(Solicited-Node Address):

                               FF02:0:0:0:0:1:FFXX:XXXX

Solicited-Node 组播地址的计算是节点单播地址和任播地址的函数。Solicited-Node 多播地址是由一个地址的低阶的 24 位(单播或任播)和附加位前缀 FF02:0:0:0:0:1:FF00::/104 来形成的。从而得到范围 FF02:0:0:0:0:1:FF00:0000FF02:0:0:0:0:1:FFFF:FFFF 的多播地址。

例如,对应于 IPv6 地址 4037::01:800:200E:8C6C 的请求节点多播地址是 FF02::1:FF0E:8C6C。仅在高阶位不同的 IPv6 地址(例如,由于与不同聚合相关联的多个高阶前缀)将映射到相同的被请求节点地址,从而减少节点必须加入的多播地址的数量。

要求节点计算并加入(在适当的接口上)已经为该节点的接口(手动或自动)配置的所有单播和任播地址的相关 Solicited-Node 多播地址。

2.8 A Node's Required Addresses

主机需要识别以下地址作为其自身的标识:

  • 它需要每个接口的 Link-Local 地址。
  • (手动或自动)为节点接口配置的任何其他 Unicast 和 Anycast 地址。
  • 环回地址。
  • 在章节 2.7.1 中定义的所有节点组播地址。
  • Solicited-Node 的单播和任播地址的组播地址。
  • 该节点所属的所有其他组的多播地址。

路由器需要识别主机需要识别的所有地址,以及以下用于识别自身的地址:

  • 配置为充当路由器的所有接口的 Subnet-Router Anycast 地址。
  • 路由器已配置的所有其他 Anycast 地址。
  • 在章节 2.7.1 定义的 All-Routers 组播地址。

3. Secutiry Considerations

IPv6 寻址文档对 Internet 基础设施安全没有任何直接影响。在 [AUTH] 中定义了 IPv6 报文的认证。

4. IANA Considerations

不建议使用“IPv4-Compatible IPv6 address”。IANA 应该继续将 http://www.iana.org/assignments/ipv6-address-space 上包含这些地址的地址块列为“由 IETF 保留的”,而不为任何其他目的重新分配它。例如:

      0000::/8        Reserved by IETF        [RFC3513]      [1]

IANA 已经添加了以下注释和到这个地址块的链接。
[5] 0000::/96 以前被定义为“IPv4-Compatible IPv6 address”前缀。该定义已被 RFC 4291弃用。
IANA 相应地更新了 IANA 注册表中关于 IPv6 地址体系结构的参考。

5. Acknowledgements

The authors would like to acknowledge the contributions of Paul Francis, Scott Bradner, Jim Bound, Brian Carpenter, Matt Crawford, Deborah Estrin, Roger Fajman, Bob Fink, Peter Ford, Bob Gilligan, Dimitry Haskin, Tom Harsch, Christian Huitema, Tony Li, Greg Minshall, Thomas Narten, Erik Nordmark, Yakov Rekhter, Bill Simpson, Sue Thomson, Markku Savela, Larry Masinter, Jun-ichiro Itojun Hagino, Tatuya Jinmei, Suresh Krishnan, and Mahmood Ali.

6. References

6.1 Normative References

[IPV6] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification", RFC 2460, December 1998.

6.2 Informative References

[AUTH] Kent, S. and R. Atkinson, "IP Authentication Header", RFC 2402, November 1998.

[CIDR] Fuller, V., Li, T., Yu, J., and K. Varadhan, "Classless Inter-Domain Routing (CIDR): an Address Assignment and Aggregation Strategy", RFC 1519, September 1993.

[ETHER] Crawford, M., "Transmission of IPv6 Packets over Ethernet Networks", RFC 2464, December 1998.

[EUI64] IEEE, "Guidelines for 64-bit Global Identifier (EUI-64) Registration Authority", http://standards.ieee.org/regauth/oui/tutorials/EUI64.html, March 1997.

[FDDI] Crawford, M., "Transmission of IPv6 Packets over FDDI Networks", RFC 2467, December 1998.

[GLOBAL] Hinden, R., Deering, S., and E. Nordmark, "IPv6 Global Unicast Address Format", RFC 3587, August 2003.

[PRIV] Narten, T. and R. Draves, "Privacy Extensions for Stateless Address Autoconfiguration in IPv6", RFC 3041, January 2001.

[RFC3513] Hinden, R. and S. Deering, "Internet Protocol Version 6 (IPv6) Addressing Architecture", RFC 3513, April 2005.

[RFC3306] Haberman, B. and D. Thaler, "Unicast-Prefix-based IPv6
Multicast Addresses", RFC 3306, August 2002.

[RFC3956] Savola, P. and B. Haberman, "Embedding the Rendezvous Point (RP) Address in an IPv6 Multicast Address", RFC 3956, November 2004.

[RFC4038] Shin, M-K., Hong, Y-G., Hagino, J., Savola, P., and E. Castro, "Application Aspects of IPv6 Transition", RFC 4038, March 2005.

[SLDEP] Huitema, C. and B. Carpenter, "Deprecating Site Local Addresses", RFC 3879, September 2004.

Appendix A: Creating Modified EUI-64 Format Interface Identifiers

根据特定链接或节点的特征,有许多方法可以创建修改 EUI-64格式的接口标识符。本附录描述了其中的一些方法。

将 IEEE EUI-64 标识符转换为接口标识符所需的唯一更改是将“u”(通用/本地)位反转。一个例子是表单的全局唯一 IEEE EUI-64 标识符:

   |0              1|1              3|3              4|4              6|
   |0              5|6              1|2              7|8              3|
   +----------------+----------------+----------------+----------------+
   |cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
   +----------------+----------------+----------------+----------------+

其中,“c”是指定的 company_id 的位,“0”是通用/本地位的值,表示通用范围,“g”是单个/组位,“m”是制造商选择的扩展标识符的位。IPv6 接口标识符的形式如下:

   |0              1|1              3|3              4|4              6|
   |0              5|6              1|2              7|8              3|
   +----------------+----------------+----------------+----------------+
   |cccccc1gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
   +----------------+----------------+----------------+----------------+

唯一的变化是将通用/本地位的值颠倒。

[EUI64]定义了一种从 IEEE 48 位 MAC 标识符创建 IEEE EUI-64 标识符的方法。这是在 48 位 MAC (在 company_id 和供应商提供的 id 之间)的中间插入两个 octet,其十六进制值为 0xFF0xFE(参见附录末尾的注释)。一个例子是具有全局作用域的 48 位 IEEE MAC:

   |0              1|1              3|3              4|
   |0              5|6              1|2              7|
   +----------------+----------------+----------------+
   |cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|
   +----------------+----------------+----------------+

其中,“c”是分配的 company_id 的位,“0”是通用/本地位的值,用来表示 Global 作用域,“g”是单个/组位,“m”是制造商选择的扩展标识符的位。接口标识符的形式如下:

   |0              1|1              3|3              4|4              6|
   |0              5|6              1|2              7|8              3|
   +----------------+----------------+----------------+----------------+
   |cccccc1gcccccccc|cccccccc11111111|11111110mmmmmmmm|mmmmmmmmmmmmmmmm|
   +----------------+----------------+----------------+----------------+

当 IEEE 802 48 位 MAC 地址可用时(在接口或节点上),由于其可用性和唯一性,实现可能使用它们来创建接口标识符。

除了 IEEE EUI-64 或 IEEE 802 48 位 MAC 之外,还有许多类型的链路具有链路层接口标识符。例如 LocalTalk 和 Arcnet 。创建 Modified EUI-64 格式标识符的方法是采用链接标识符(例如,LocalTalk 8 位节点标识符),并将其填充到左侧。例如,LocalTalk 的 8 位节点标识符的十六进制值 0x4F 会导致如下接口标识符:

   |0              1|1              3|3              4|4              6|
   |0              5|6              1|2              7|8              3|
   +----------------+----------------+----------------+----------------+
   |0000000000000000|0000000000000000|0000000000000000|0000000001001111|
   +----------------+----------------+----------------+----------------+

注意,这将导致通用/本地位被设置为“0”,以表示本地作用域。

有许多链接没有任何类型的内置标识符。其中最常见的是串行连接和配置的隧道。必须选择在子网前缀内唯一的接口标识符。

当链路上没有内置标识符时,首选方法是使用另一个接口的通用接口标识符或分配给节点本身的标识符。当使用这种方法时,将同一节点连接到同一子网前缀的其它接口不能使用同一标识符。

如果链路上没有可用的通用接口标识符,则实现需要创建一个本地范围的接口标识符。唯一的要求是它在子网前缀中是唯一的。有许多可能的方法来选择子网前缀唯一接口标识符。其中包括以下内容:

  • Manual Configuration
  • Node Serial Number
  • Other Node-Specific Token

子网前缀唯一(subnet-prefix-unique)接口标识符应该以这样一种方式生成,使得它在节点重新启动后或者在节点中添加或删除接口时不会改变。

适当算法的选择取决于链路和实现。在适当的“IPv6 over <link >”规范中定义了关于形成接口标识符的细节。强烈建议将冲突检测算法作为任何自动算法的一部分来实现。

注意:[EUI-64] 实际上将 0xFF 和 0xFE 定义为要插入的位,以从 IEEE MAC- 48 标识
符创建 IEEE EUI-64 标识符。从 IEEE EUI-48 标识符开始时,使用 0xFF 和 0xFE 
值。由于对 IEEE MAC-48 和 EUI-48 标识符之间的差异存在误解,早期版本的规范中使用
了不正确的值。

本文档特意继续使用 0xFF 和 0xFE,因为它符合 IPv6 接口标识符的要求(即它们在链路上
必须是唯一的),IEEE EUI-48 和 MAC-48 标识符在语法上是等效的,并且在实践中不会引
起任何问题。

Appendix B: Changes from RFC 3513

RFC 3513“IP Version 6 Addressing Architecture”有以下变化:

  • 取消了对使用 IPv6 任播地址的限制,因为现在已经有了足够的使用任播地址的经验,这些问题并不是 IPv6 所特有的,并且 GROW 工作组正在这一领域开展工作。
  • 不赞成使用站点本地单播前缀。变化包括以下内容:
    • 从2.4节的特殊前缀列表中删除了Site-Local。
    • 将标题为“Local-use IPv6 Unicast Addresses”的部分分成两个部分,“Link-Local IPv6 Unicast Addresses”和“Site- Local IPv6 Unicast Addresses”。
    • 向新部分添加了描述 Site-Local 不推荐使用的文本。
  • 更改以解决 IAB 回应 Robert Elz 上诉时提出的问题。变化包括以下内容:
    • 在第 2.5 节中添加了说明,即节点不应假设 IPv6 地址的结构。
    • 更改了第 2.5.1 节和附录 A 中的文本,将“u”位设置为一 (1) 的修改后的 EUI-64 格式接口标识符称为通用标识符。
    • 在第 2.5.1 节中添加了说明,即 IPv6 节点不需要验证以修改后的 EUI-64 格式创建的接口标识符(其中“u”位设置为 1 )是否唯一。
  • 将第 2.5.4 节“Global Unicast Addresses”中指示的参考更改为 RFC 3587。
  • 删除了示例中提到的 NSAP 地址。
  • 澄清了文本表示中的“x”可以是一到四位数。
  • 不推荐使用“IPv6 Compatible Address”,因为它没有在 IPv6 转换机制中使用。
  • 在关于多播地址的第 2.7 节中添加了“R”和“P”标志,以及指向定义它们的文档的指针。
  • 编辑上的改动。