RFC4291 IPv6 地址架构规范解读
RFC4291 定义了 IPv6 编址架构,涵盖地址模型、文本表示及各类地址定义。核心内容包括单播、任播和多播地址的结构与用途,特别是全球单播地址的前缀划分、接口标识符的 EUI-64 构造方法。文档明确了链路本地、回环及未指定地址的使用限制,并规定了多播作用域与组 ID 规则。此外,还指出 IPv4 兼容地址已弃用,并列出节点必备地址清单,为 IPv6 网络部署提供基础规范指导。

RFC4291 定义了 IPv6 编址架构,涵盖地址模型、文本表示及各类地址定义。核心内容包括单播、任播和多播地址的结构与用途,特别是全球单播地址的前缀划分、接口标识符的 EUI-64 构造方法。文档明确了链路本地、回环及未指定地址的使用限制,并规定了多播作用域与组 ID 规则。此外,还指出 IPv4 兼容地址已弃用,并列出节点必备地址清单,为 IPv6 网络部署提供基础规范指导。

本文档为互联网社区指定了一种互联网标准轨道协议,并征求有关改进的讨论和建议。有关本协议的标准化状态和状况,请参考当前版本的《互联网官方协议标准》(STD 1)。本备忘录的分发不受限制。
版权所有(C)互联网协会(2006)。
本规范定义了 IPv6(互联网协议第 6 版)的编址架构。文档内容包括 IPv6 编址模型、IPv6 地址的文本表示、IPv6 单播地址、任播地址和多播地址的定义,以及 IPv6 节点的必备地址。
本文档替代了 RFC 3513《IPv6 编址架构》。
IPv6 地址是用于标识接口及接口集合的 128 位标识符('接口'的定义参见 [IPV6] 第 2 节)。地址分为三种类型:
IPv6 中不存在广播地址,其功能已被多播地址取代。
本文档中,地址字段被赋予特定名称(如'子网')。当名称后接'ID'(如'子网 ID')时,指该命名字段的内容;当接'前缀'(如'子网前缀')时,指从地址左侧开始直至该字段(含)的全部内容。
在 IPv6 中,除非特别排除,任何字段的合法值均可为全零或全一。具体而言,前缀可包含以零值字段结尾的情况。
所有类型的 IPv6 地址均分配给接口,而非节点。IPv6 单播地址标识单个接口,由于每个接口属于唯一节点,该节点任意接口的单播地址均可作为节点标识符。
所有接口必须至少拥有一个链路本地单播地址(其他必备地址见 2.8 节)。单个接口可同时拥有多个任意类型(单播、任播、多播)或作用域的 IPv6 地址。对于不用于与非邻居节点收发 IPv6 数据包的接口,无需配置作用域大于链路范围的单播地址 —— 这对点到点接口尤为便利。该编址模型存在一个例外情况:
若实现将多个物理接口在网络层视为单个接口,则可向这些接口分配单个或一组单播地址。此特性适用于通过多物理接口实现负载分担的场景。
当前 IPv6 沿用 IPv4 模型,即子网前缀与一条链路关联,同一链路可分配多个子网前缀。
即使接口仅用于本地通信,也必须配置链路本地地址(如 FE80::/10 前缀地址),以确保链路层通信的基础可达性。
IPv6 地址以文本字符串表示时存在三种常规形式:
(1)首选格式:
格式为 x:x:x:x:x:x:x:x,其中每个 x 为地址中 8 个 16 位段的 1~4 位十六进制数字。示例:
ABCD:EF01:2345:6789:ABCD:EF01:2345:67892001:DB8:0:0:8:800:200C:417A注意:单个字段中的前导零无需书写,但每个字段至少保留一位数字(除非符合第 2 点描述的情况)。
(2)零压缩语法:
由于部分 IPv6 地址分配方式会产生长串零位,为简化书写,可用特殊语法压缩连续零段:
:: 表示一个或多个 16 位零组,且每个地址中 :: 只能出现一次,可用于压缩地址中的前导或 trailing 零。| 原始地址 | 压缩后地址 | 类型说明 |
|---|---|---|
2001:DB8:0:0:8:800:200C:417A | 2001:DB8::8:800:200C:417A | 单播地址 |
FF01:0:0:0:0:0:0:101 | FF01::101 | 多播地址 |
0:0:0:0:0:0:0:1 | ::1 | 回环地址 |
0:0:0:0:0:0:0:0 | :: | 未指定地址 |
(3)IPv4 - 兼容混合格式:
在 IPv4/IPv6 混合环境中,可用 x:x:x:x:x:x:d.d.d.d 格式。前 6 个 x 为地址高 6 个 16 位段的十六进制值,后 4 个 d 为低 4 个 8 位段的十进制值(标准 IPv4 表示法)。示例:
0:0:0:0:0:0:13.1.68.3 或 0:0:0:0:0:FFFF:129.144.52.38::13.1.68.3 或 ::FFFF:129.144.52.38IPv6 地址前缀的文本表示方式类似于无类别域间路由(CIDR)记法中 IPv4 地址前缀的写法。IPv6 地址前缀的表示格式为:
ipv6-address/prefix-length
其中:
合法与非法表示示例:
| 前缀描述 | 合法表示示例 | 非法表示示例 |
|---|---|---|
60 位前缀 20010DB80000CD3 | 2001:0DB8:0000:CD30:0:0:0:0/602001:0DB8::CD30:0:0:0:0/602001:0DB8:0:CD30::/60 | 2001:0DB8:0:CD3/602001:0DB8::CD30/602001:0DB8::CD3/60 |
错误原因:
:: 扩展后前缀长度不足 60 位。当同时表示节点地址及其子网前缀时,可采用以下简化方式:
2001:0DB8:0:CD30:123:4567:89AB:CDEF2001:0DB8:0:CD30::/60组合缩写:
2001:0DB8:0:CD30:123:4567:89AB:CDEF/60
IPv6 地址的类型通过地址的高位比特进行标识,如下所示:
| 地址类型 | 二进制前缀 | IPv6 表示法 | 章节 |
|---|---|---|---|
| 未指定地址 | 全 0(128 位) | ::/128 | 2.5.2 |
| 回环地址 | 00…1(128 位) | ::1/128 | 2.5.3 |
| 多播地址 | 11111111 | FF00::/8 | 2.7 |
| 链路本地单播地址 | 1111111010 | FE80::/10 | 2.5.6 |
| 全球单播地址 | (其他所有情况) | - | - |
任播地址取自单播地址空间(任意作用域),且在语法上与单播地址无区别。
全球单播地址的通用格式在 2.5.4 节描述。部分包含嵌入式 IPv4 地址的全球单播地址子类型(用于 IPv4-IPv6 互操作)在 2.5.5 节说明。
未来规范可能会将全球单播地址空间的一个或多个子范围重新定义为其他用途,但在此之前,实现必须将所有不以上述前缀开头的地址视为全球单播地址。
IPv6 单播地址可使用任意比特长度的前缀进行聚合,这与无类别域间路由(CIDR)体系下的 IPv4 地址类似。
IPv6 中存在多种单播地址类型,特别是全球单播地址、站点本地单播地址(已弃用,参见 2.5.7 节) 和链路本地单播地址。此外,全球单播地址还包含一些特殊用途的子类型(如嵌入 IPv4 地址的 IPv6 地址)。未来可能会定义更多地址类型或子类型。
根据节点角色(如主机与路由器)的不同,IPv6 节点对 IPv6 地址内部结构的认知程度可能存在差异。至少,节点可认为单播地址(包括其自身地址)不具备内部结构:128 位的节点地址。
略复杂的主机(但仍属于简单类型)可能额外知晓其连接链路的子网前缀(不同地址的 n 值可能不同):
n 位子网前缀 + 128-n 位接口标识符
尽管非常简单的路由器可能不了解 IPv6 单播地址的内部结构,但通常情况下,路由器会知晓一个或多个用于路由协议运行的层次化边界。具体知晓的边界因路由器在路由层次中的位置而异。
除上述关于子网边界的认知外,节点不应对 IPv6 地址的结构做任何假设。
IPv6 单播地址中的接口标识符用于标识链路上的接口,要求在子网前缀内唯一。建议同一链路上不同节点不分配相同的接口标识符,其也可在更广泛范围内唯一。在某些情况下,接口标识符可直接从该接口的链路层地址派生。单个节点的多个接口若连接至不同子网,可使用相同的接口标识符。
需注意,接口标识符的唯一性与 IPv6 地址的唯一性无关。例如,可使用本地范围接口标识符创建全球单播地址,或使用全局范围接口标识符创建链路本地地址。
除二进制值以 000 开头的单播地址外,所有单播地址的接口标识符必须为 64 位长,并采用修改的 EUI-64 格式构造。
基于修改的 EUI-64 格式的接口标识符,若派生自全局令牌(如 IEEE 802 48 位 MAC 或 IEEE EUI-64 标识符 [EUI64])则具有全局范围;若缺乏全局令牌(如串行链路、隧道端点)或无需全局令牌(如隐私保护临时令牌 [PRIV]),则具有本地范围。
从 IEEE EUI-64 标识符构造接口标识符时,需翻转'u'位(IEEE EUI-64 术语中的全局 / 本地位)。在修改的 EUI-64 格式中:
IEEE EUI-64 标识符的前三个八位组二进制结构如下(按互联网标准位序):
0 0 0 1 1 2 |0 7 8 5 6 3| +----+----+----+----+----+----+ |cccc|ccug|cccc|cccc|cccc|cccc| +----+----+----+----+----+----+
其中:
翻转'u'位的设计初衷是便于系统管理员在缺乏硬件令牌时手动配置非全局标识符(如串行链路、隧道端点场景)。若不翻转该位,标识符可能需表示为 0200:0:0:1、0200:0:0:2等形式,而翻转后可简化为 0:0:0:1、0:0:0:2等。
IPv6 节点无需验证'u'位设为全局的修改 EUI-64 令牌所创建接口标识符的唯一性。修改的 EUI-64 格式标识符中全局 / 本地位的设计,为未来利用全局范围接口标识符的技术发展预留空间。
接口标识符的具体构造细节在相应的'<链路>上的 IPv6'规范中定义,如《以太网承载 IPv6》[ETHER] 和《FDDI 承载 IPv6》[FDDI]。
地址 0:0:0:0:0:0:0:0称为未指定地址,绝不可分配给任何节点。它表示地址缺失,典型用途如初始化主机在获取自身地址前发送的 IPv6 数据包的源地址字段。
未指定地址不得作为 IPv6 数据包的目的地址或出现在 IPv6 路由报头中。源地址为未指定地址的 IPv6 数据包,IPv6 路由器必须不进行转发。
单播地址 0:0:0:0:0:0:0:1称为回环地址,节点可用其向自身发送 IPv6 数据包,但绝不可分配给任何物理接口。该地址被视为具有链路本地作用域,可理解为虚拟接口(通常称为'回环接口')连接到虚构链路的链路本地单播地址。
回环地址不得作为节点外发 IPv6 数据包的源地址。目的地址为回环地址的 IPv6 数据包,绝不可发送到节点外部,且 IPv6 路由器必须不进行转发。接口接收到目的地址为回环地址的数据包时,必须丢弃。
IPv6 全球单播地址用于在全球范围内唯一标识网络中的设备,其一般格式如下:
| n 位 | m 位 | 128 - n - m 位 |
|---|---|---|
| 全球路由前缀 | 子网 ID | 接口 ID |
其中,全球路由前缀是分配给一个站点(子网 / 链路集群)的值,通常采用分层结构;子网 ID 用于标识站点内的链路;接口 ID 如 2.5.1 节中所定义。
除了以二进制 000 开头的地址外,所有全球单播地址都有一个 64 位的接口 ID 字段(即 n + m = 64),其格式如 2.5.1 节所述。以二进制 000 开头的全球单播地址,对接口 ID 字段的大小或结构没有此限制。例如,以二进制 000 开头的全球单播地址有 2.5.5 节中描述的内嵌 IPv4 地址的 IPv6 地址;而以非 000 二进制值开头(因此具有 64 位接口 ID 字段)的全球地址示例可以是 2001:1111:2222:ABCD::1/64,其中全球路由前缀为 2001:1111:2222,子网 ID 为 ABCD,接口 ID 为 ::1。
定义了两种在地址低 32 位携带 IPv4 地址的 IPv6 地址类型:IPv4 兼容的 IPv6 地址和IPv4 映射的 IPv6 地址。
(1)IPv4 兼容的 IPv6 地址,该地址用于辅助 IPv6 过渡,格式如下:
| 80 位 | 16 位 | 32 位 |
|---|---|---|
| 0000…0000(全 0) | 0000 | IPv4 地址 |
说明:
(2)IPv4 映射的 IPv6 地址,用于将 IPv4 节点地址表示为 IPv6 地址,格式如下:
| 80 位 | 16 位 | 32 位 |
|---|---|---|
| 0000…0000(全 0) | FFFF | IPv4 地址 |
使用背景参见 [RFC4038]。
链路本地地址仅用于单一链路,格式如下:
| 10 位 | 54 位 | 64 位 |
|---|---|---|
| 1111111010 | 0 | 接口标识符 |
用途:
该地址原设计用于站点内部寻址,无需全局前缀,现已按 [SLDEP] 弃用。格式如下:
| 10 位 | 54 位 | 64 位 |
|---|---|---|
| 1111111011 | 子网标识符 | 接口标识符 |
说明:
IPv6 任播地址是分配给多个接口(通常属于不同节点)的地址,其特性是:根据路由协议的距离度量,发往任播地址的数据包将被路由至拥有该地址的'最近'接口。
任播地址从单播地址空间中分配,使用任意已定义的单播地址格式。因此,任播地址在语法上与单播地址无法区分。当单播地址被分配给多个接口(即转换为任播地址)时,必须显式配置地址所属节点,使其知晓该地址为任播地址。
对于任何已分配的任播地址,存在一个最长前缀 P,该前缀标识所有属于该任播地址的接口所在的拓扑区域。在 P 标识的区域内,任播地址必须作为路由系统中的独立条目(通常称为'主机路由')维护;在 P 标识的区域外,任播地址可聚合到前缀 P 的路由条目中。
需注意,在最坏情况下,任播地址集合的前缀 P 可能是空前缀(即集合成员无拓扑局部性)。此时,任播地址必须在整个互联网中作为独立路由条目维护,这将对支持此类'全局'任播集合的数量构成严重的扩展性限制。因此,全局任播集合的支持可能不可用或受到严格限制。
任播地址的典型用途之一是标识提供互联网服务的组织所属的路由器集合。此类地址可作为 IPv6 路由报头中的中间地址,使数据包通过特定服务提供商或服务提供商序列传输。
其他可能用途包括:标识连接到特定子网的路由器集合,或标识提供进入特定路由域入口的路由器集合。
子网路由器任播地址已预先定义,其格式如下:
| n 位 | 128-n 位 |
|---|---|
| 子网前缀 | 00000000000000(全 0) |
任播地址中的'子网前缀'用于标识特定链路,该任播地址在语法上与链路中接口标识符全为零的单播地址相同。
发往子网路由器任播地址的数据包将被交付至子网中的某一台路由器。所有路由器必须支持其接口所连接子网的子网路由器任播地址。
该地址旨在用于节点需要与路由器集合中任意一台通信的场景。
IPv6 多播地址是一组接口(通常位于不同节点)的标识符。一个接口可属于任意数量的多播组。多播地址的格式如下:
| 8 位 | 4 位 | 4 位 | 112 位 |
|---|---|---|---|
| 11111111 | flgs | scop | group ID |
(1)地址开头的二进制 11111111 标识该地址为多播地址。
(2)flgs(4 位标志位):
+-+-+-+-+
|0|R|P|T|
+-+-+-+-+
(3)scop(4 位多播作用域值):
用于限制多播组的作用域,取值如下:
| 值 | 描述 |
|---|---|
| 0 | 保留 |
| 1 | 接口本地作用域 |
| 2 | 链路本地作用域 |
| 3 | 保留 |
| 4 | 管理本地作用域 |
| 5 | 站点本地作用域 |
| 6-7 | 未分配 |
| 8 | 组织本地作用域 |
| 9-A | 未分配 |
| B-D | 未分配 |
| E | 全局作用域 |
| F | 保留 |
(4)group ID,在给定作用域内标识多播组(永久或临时),其结构定义见 [RFC3306]。
多播地址的作用域与组标识:
FF01::101:与发送方同接口(同一节点)的所有 NTP 服务器。FF02::101:与发送方同链路的所有 NTP 服务器。FF05::101:与发送方同站点的所有 NTP 服务器。FF0E::101:互联网中的所有 NTP 服务器。FF15::101与其他站点的同地址组无关联,也与不同作用域或永久组的同 ID 组无关。多播地址使用规则:
以下为预定义的知名多播地址,本节定义的组 ID(group ID)仅适用于显式作用域值。禁止将这些组 ID 与其他作用域值结合使用(且 T 标志位必须为 0)。
(1)保留多播地址:
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
上述多播地址为保留地址,不得分配给任何多播组。
(2)所有节点地址:
FF01:0:0:0:0:0:0:1(作用域 1:接口本地)
FF02:0:0:0:0:0:0:1(作用域 2:链路本地)
上述地址标识对应作用域内的所有 IPv6 节点。
(3)所有路由器地址:
FF01:0:0:0:0:0:0:2(作用域 1:接口本地)
FF02:0:0:0:0:0:0:2(作用域 2:链路本地)
FF05:0:0:0:0:0:0:2(作用域 5:站点本地)
上述地址标识对应作用域内的所有 IPv6 路由器。
(4)被请求节点地址:
格式:FF02:0:0:0:0:1:FFXX:XXXX
生成规则:被请求节点多播地址由节点的单播 / 任播地址计算得到:取地址的低 24 位,附加到前缀 FF02:0:0:0:0:1:FF00::/104 后,范围为 FF02:0:0:0:0:1:FF00:0000 至 FF02:0:0:0:0:1:FFFF:FFFF。
示例:IPv6 地址 4037::01:800:200E:8C6C对应的被请求节点地址为 FF02::1:FF0E:8C6C。
特性:仅高位不同的 IPv6 地址(如因不同聚合前缀导致)会映射到同一被请求节点地址,从而减少节点需加入的多播组数量。
实现要求:节点必须为其接口配置的所有单播 / 任播地址(手动 / 自动配置)计算并加入(在对应接口上)关联的被请求节点多播地址。
主机必须识别以下标识自身的地址:
路由器必备地址,路由器除需识别主机的所有必备地址外,还需额外识别:
| 地址类型 | 主机需求 | 路由器额外需求 |
|---|---|---|
| 链路本地地址 | 每个接口必须配置 | 同上 |
| 任播地址 | 可选(若配置) | 必须支持子网路由器任播地址 |
| 多播地址 | 加入所有节点组和被请求节点组 | 额外加入所有路由器组 |
| 回环地址 | 必须识别 | 同上 |
示例场景:
2001:db8:1234::/64 后,自动生成任播地址 2001:db8:1234::/64(接口 ID 全 0),并响应发往该地址的数据包。IPv6 寻址相关文档对互联网基础设施安全没有直接影响。IPv6 数据包的认证机制在 [AUTH] 中定义。
IPv4 兼容的 IPv6 地址,已被本文档弃用。IANA 应继续将包含这些地址的地址块在:http://www.iana.org/assignments/ipv6-address-space 中标记为'IETF 保留',且不得重新分配作其他用途。例如:
0000::/8:IETF 保留(参考 [RFC3513])。IANA 为该地址块添加了以下注释和链接:
0000::/96 此前被定义为'IPv4 兼容 IPv6 地址'前缀,该定义已被 RFC 4291 弃用。IANA 已相应更新 IANA 注册表中 IPv6 地址架构的引用信息。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online