RFC4291 IPv6 地址架构
1. 概述
1.1 本备忘录状态
本文档为互联网社区指定了一种互联网标准轨道协议,并征求有关改进的讨论和建议。有关本协议的标准化状态和状况,请参考当前版本的《互联网官方协议标准》(STD 1)。
1.3 摘要
本规范定义了 IPv6(互联网协议第 6 版)的编址架构。文档内容包括 IPv6 编址模型、IPv6 地址的文本表示、IPv6 单播地址、任播地址和多播地址的定义,以及 IPv6 节点的必备地址。
本文档替代了 RFC 3513《IPv6 编址架构》。
2. IPv6 编址
IPv6 地址是用于标识接口及接口集合的 128 位标识符。地址分为三种类型:
- 单播(Unicast):标识单个接口。发往单播地址的数据包将被交付至该地址标识的接口。
- 任播(Anycast):标识一组接口(通常属于不同节点)。发往任播地址的数据包将被交付至该地址标识的其中一个接口(根据路由协议的距离度量,选择'最近'的接口)。
- 多播(Multicast):标识一组接口(通常属于不同节点)。发往多播地址的数据包将被交付至该地址标识的所有接口。
IPv6 中不存在广播地址,其功能已被多播地址取代。
本文档中,地址字段被赋予特定名称(如'子网')。当名称后接'ID'时,指该命名字段的内容;当接'前缀'时,指从地址左侧开始直至该字段(含)的全部内容。
在 IPv6 中,除非特别排除,任何字段的合法值均可为全零或全一。
2.1 地址模型
所有类型的 IPv6 地址均分配给接口,而非节点。IPv6 单播地址标识单个接口,由于每个接口属于唯一节点,该节点任意接口的单播地址均可作为节点标识符。
所有接口必须至少拥有一个链路本地单播地址。单个接口可同时拥有多个任意类型(单播、任播、多播)或作用域的 IPv6 地址。对于不用于与非邻居节点收发 IPv6 数据包的接口,无需配置作用域大于链路范围的单播地址。
若实现将多个物理接口在网络层视为单个接口,则可向这些接口分配单个或一组单播地址。此特性适用于通过多物理接口实现负载分担的场景。
当前 IPv6 沿用 IPv4 模型,即子网前缀与一条链路关联,同一链路可分配多个子网前缀。
即使接口仅用于本地通信,也必须配置链路本地地址(如 FE80::/10 前缀地址),以确保链路层通信的基础可达性。
2.2 地址的文本表示
IPv6 地址以文本字符串表示时存在三种常规形式:
首选格式:
格式为 x:x:x:x:x:x:x:x,其中每个 x 为地址中 8 个 16 位段的 1~4 位十六进制数字。
示例:
ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
2001:DB8:0:0:8:800:200C:417A
注意:单个字段中的前导零无需书写,但每个字段至少保留一位数字。
零压缩语法:
可用特殊语法压缩连续零段:用 :: 表示一个或多个 16 位零组,且每个地址中 :: 只能出现一次。
| 原始地址 | 压缩后地址 | 类型说明 |
|---|---|---|
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 | :: | 未指定地址 |
IPv4 - 兼容混合格式:
在 IPv4/IPv6 混合环境中,可用 x:x:x:x:x:x:d.d.d.d 格式。前 6 个 x 为地址高 6 个 16 位段的十六进制值,后 4 个 d 为低 4 个 8 位段的十进制值。
示例:
::13.1.68.3
::FFFF:129.144.52.38
2.3 地址前缀的文本表示
IPv6 地址前缀的文本表示方式类似于无类别域间路由(CIDR)记法中 IPv4 地址前缀的写法。
格式:ipv6-address/prefix-length
合法与非法表示示例:
| 前缀描述 | 合法表示示例 | 非法表示示例 |
|---|---|---|
60 位前缀 20010DB80000CD3 | 2001:0DB8:0000:CD30:0:0:0:0/60 | 2001:0DB8:0:CD3/60 |
错误原因:
- 压缩后的段必须保持 16 位对齐。
::扩展后前缀长度不足。- 压缩导致非末尾段的零被移除。
2.4 地址类型标识符
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 单播地址
IPv6 单播地址可使用任意比特长度的前缀进行聚合。IPv6 中存在多种单播地址类型,特别是全球单播地址、站点本地单播地址(已弃用) 和链路本地单播地址。
2.5.1 接口标识符
IPv6 单播地址中的接口标识符用于标识链路上的接口,要求在子网前缀内唯一。除二进制值以 000 开头的单播地址外,所有单播地址的接口标识符必须为 64 位长,并采用修改的 EUI-64 格式构造。
基于修改的 EUI-64 格式的接口标识符,若派生自全局令牌(如 IEEE 802 48 位 MAC)则具有全局范围;若缺乏全局令牌或无需全局令牌,则具有本地范围。
2.5.2 未指定地址
地址 0:0:0:0:0:0:0:0 称为未指定地址,绝不可分配给任何节点。它表示地址缺失,典型用途如初始化主机在获取自身地址前发送的 IPv6 数据包的源地址字段。
未指定地址不得作为 IPv6 数据包的目的地址或出现在 IPv6 路由报头中。
2.5.3 回环地址
单播地址 0:0:0:0:0:0:0:1 称为回环地址,节点可用其向自身发送 IPv6 数据包,但绝不可分配给任何物理接口。该地址被视为具有链路本地作用域。
回环地址不得作为节点外发 IPv6 数据包的源地址。目的地址为回环地址的 IPv6 数据包,绝不可发送到节点外部。
2.5.4 全局单播地址
IPv6 全球单播地址用于在全球范围内唯一标识网络中的设备,其一般格式如下:
| n 位 | m 位 | 128 - n - m 位 |
|---|---|---|
| 全球路由前缀 | 子网 ID | 接口 ID |
除了以二进制 000 开头的地址外,所有全球单播地址都有一个 64 位的接口 ID 字段。
2.5.5 嵌入 IPv4 地址的 IPv6 地址
定义了两种在地址低 32 位携带 IPv4 地址的 IPv6 地址类型:IPv4 兼容的 IPv6 地址和IPv4 映射的 IPv6 地址。
- IPv4 兼容的 IPv6 地址:该地址用于辅助 IPv6 过渡,现已弃用,因当前 IPv6 过渡机制不再使用,新实现无需支持。
- IPv4 映射的 IPv6 地址:用于将 IPv4 节点地址表示为 IPv6 地址。
2.5.6 链路本地 IPv6 单播地址
链路本地地址仅用于单一链路,格式如下:
| 10 位 | 54 位 | 64 位 |
|---|---|---|
| 1111111010 | 0 | 接口标识符 |
路由器禁止转发源或目的地址为链路本地地址的数据包到其他链路。
2.5.7 站点本地 IPv6 单播地址
该地址原设计用于站点内部寻址,现已按 [SLDEP] 弃用。新实现不再支持该前缀特殊行为(需将其视为全球单播地址)。
2.6 任播地址
IPv6 任播地址是分配给多个接口(通常属于不同节点)的地址,其特性是:根据路由协议的距离度量,发往任播地址的数据包将被路由至拥有该地址的'最近'接口。
任播地址从单播地址空间中分配,使用任意已定义的单播地址格式。因此,任播地址在语法上与单播地址无法区分。
2.6.1 必备任播地址
子网路由器任播地址已预先定义,其格式如下:
| n 位 | 128-n 位 |
|---|---|
| 子网前缀 | 00000000000000(全 0) |
发往子网路由器任播地址的数据包将被交付至子网中的某一台路由器。
2.7 多播地址
IPv6 多播地址是一组接口(通常位于不同节点)的标识符。多播地址的格式如下:
| 8 位 | 4 位 | 4 位 | 112 位 |
|---|---|---|---|
| 11111111 | flgs | scop | group ID |
- flgs(4 位标志位):T=0 表示永久分配的'知名'多播地址;T=1 表示临时或动态分配的多播地址。
- scop(4 位多播作用域值):用于限制多播组的作用域,取值包括接口本地、链路本地、管理本地、站点本地、组织本地、全局等。
- group ID:在给定作用域内标识多播组。
多播地址使用规则:
- 禁止作为源地址。
- 作用域转发限制:路由器不得将多播数据包转发至超过目的地址 scop 字段指定的作用域。
- 保留值处理:节点不得向 scop=0 的多播地址发送数据包。
2.7.1 预定义多播地址
以下为预定义的知名多播地址:
- 保留多播地址:FF00::/8 至 FF0F::/8 范围内的部分地址。
- 所有节点地址:FF01::1, FF02::1。
- 所有路由器地址:FF01::2, FF02::2, FF05::2。
- 被请求节点地址:格式
FF02:0:0:0:0:1:FFXX:XXXX,由节点的单播/任播地址计算得到。
2.8 节点的必备地址
主机必须识别以下标识自身的地址:
- 每个接口的链路本地地址。
- 为节点接口配置的所有额外单播/任播地址。
- 回环地址(::1)。
- 2.7.1 节定义的所有节点多播地址。
- 每个单播/任播地址对应的被请求节点多播地址。
路由器必备地址,路由器除需识别主机的所有必备地址外,还需额外识别:
- 所有配置为路由器接口的子网路由器任播地址。
- 路由器已配置的所有其他任播地址。
- 2.7.1 节定义的所有路由器多播地址。
| 地址类型 | 主机需求 | 路由器额外需求 |
|---|---|---|
| 链路本地地址 | 每个接口必须配置 | 同上 |
| 任播地址 | 可选(若配置) | 必须支持子网路由器任播地址 |
| 多播地址 | 加入所有节点组和被请求节点组 | 额外加入所有路由器组 |
| 回环地址 | 必须识别 | 同上 |
3. 安全考虑
IPv6 寻址相关文档对互联网基础设施安全没有直接影响。IPv6 数据包的认证机制在 [AUTH] 中定义。
4. IANA 注意事项
IPv4 兼容的 IPv6 地址,已被本文档弃用。IANA 应继续将包含这些地址的地址块标记为'IETF 保留',且不得重新分配作其他用途。 例如:
0000::/8:IETF 保留。
IANA 为该地址块添加了以下注释和链接:
0000::/96此前被定义为'IPv4 兼容 IPv6 地址'前缀,该定义已被 RFC 4291 弃用。
IANA 已相应更新 IANA 注册表中 IPv6 地址架构的引用信息。


