2.2、地址的文本表示
有三种将 IPv6 地址表示为文本串的约定格式:
1、优先选用格式为 x:x:x:x:x:x:x:x,这里“x”是地址的 8 个 16 位地址片中每个 16 位片的 1到 4 个 16 进制数字。例如:
ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
2001:DB8:0:0:8:800:200C:417A
注意,可以不写单个字段中开始的 0,但是每个字段中至少要有 1 个数字(除了下面 2、中介绍的情况以外。)。
2、由于需要分配特定类型 IPv6 地址,地址中会包括长 0 位串。为简化包含长 0 位地址的书写,采用特殊句法压缩 0 的个数。即用“::”表示 1 个或多个 0 值 16 位组。“::”在地址中仅可以出现一次。“::”也用于压缩地址中开始位置和结束位置的多个 0。
例如,下述地址
2001:DB8:0:0:8:800:200C:417 单播地址
FF01:0:0:0:0:0:0:101 多播地址
0:0:0:0:0:0:0:1 环回地址
0:0:0:0:0:0:0:0 未指定地址
可以表示为:
2001:DB8::8:800:200C:417 单播地址
FF01::101 多播地址
::1 环回地址
:: 未指定地址
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.3
0:0:0:0:0:FFFF:129.144.52.38
或压缩形式:
::13.1.68.3
::FFFF:129.144.52.38
2.3、地址前缀的文本表示
IPv6 地址前缀的文本表示类似采用无分类域间路由(Classless Inter-Domain Routing,CIDR)斜线表示法[CIDR]书写的 IPv4 地址前缀。IPv6 地址前缀表示为:
这里
ipv6 地址 是用第 2.2 节列出的任何一种符号表示法表示的 IPv6 地址。
前缀长度 是十进制值,规定地址中最左边多少个连续位构成前缀。
例如,下述是 60 比特前缀 20010DB80000CD3(16 进制)的合法表示:
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 比特地址块中,可以抛弃起始的 0,但是不能抛弃尾部的 0。
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、地址类型标识
IPv6 地址类型由地址的高阶位标识,即:
地址类型 二进制前缀 IPv6 符号表示法 所在章节
未指定 00...0 (128 bits) ::/128 第 2.5.2 节
环回 00...1 (128 bits) ::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 节介绍。
出于其他考虑,将来的标准可以为全球单播空间重新定义细分的一种或多种子空间,但是,除非出现这种重新定义和直到这种重新定义发生,实现中必须把没有以上述列出的任何一种前缀开始的所有地址,当作是全球单播地址。
2.5、单播地址
IPv6 单播地址是与任意比特长度的前缀聚合在一起的,类似 IPv4 的无分类域间路由(CIDR)地址。
在 IPv6 中有几类单播地址:全球单播、站点本地单播(已过时,参阅第 2-5-7 节)和链路本地单播。全球单播还有一些特定目的子类型,例如带有嵌入 IPv4 地址的 IPv6 地址。将来可以定义新增的地址类型或子类型。
IPv6 节点可能非常了解,也可能很少了解 IPv6地址内部结构,取决于节点担当的角色(例如,主机还是路由器)。最简单情况,节点或许认为单播地址(包括它自己的)没有内部结构,仅是图 1 所示的 128 位地址。
图 1 节点眼中的最简单单播地址结构
稍微完善些的主机(仍然相当简单)或许多少意识到它附着的链路的子网前缀,在子网前缀中不同的地址有不同的 n 值(子网前缀比特值。译者),参见图 2。
子网前缀(subnet prefix) ——n bits
接口ID(interface ID) ——128-n bits
图2 稍微完善些主机眼中的单播地址格式
虽然非常简单的路由器或许不知道 IPv6 单播地址内部结构,通常情况下路由器有一种或多种路由协议运行分层边界知识。这些已知边界因路由器的不同而不同,取决于该路由器在路由等级结构中的位置。除了上一段讨论的子网边界知识以外,节点不会对 IPv6 地址结构做任何假设。
2.5.1 接口标识符
IPv6 单播地址中的接口标识符(interface ID)用于标识链路上的接口。子网中接口标识符应该是唯一的。建议同一接口标识符不分配给链路上的不同节点。在更宽范围上接口标识符或许也是唯一的。有些情况,接口的标识符直接来源于该接口的链路层地址。同一接口标识符可用在单一节点的多个接口上,只要它们附着到不同子网。
注意,接口标识符的唯一性独立于 IPv6 地址的唯一性。例如,全球单播地址可以用本地范围接口标识符生成,链路本地地址可以用全球范围接口标识符生成。
对于所有单播地址,除了以二进制值 000 开始的以外,要求接口 IDs 为 64 比特长,由改进的 EUI-64 格式构建。
当源自全球标记时(例如,IEEE 802 48-bit MAC 标识符或 IEEE EUI-64 标识符[EUI64]),基于改进的 EUI-64 格式的接口标识符可以有全球范围;当不能得到全球标记时(例如,串联链路,隧道端点)或者不希望使用全球标记时(例如,临时的私有标记[PRIV]),基于改进的EUI-64 格式的接口标识符可以有本地范围。
当根据 IEEE EUI-64 标识符形成接口标识符时,通过插入“u”比特(universal/local 比特,IEEE EUI-64 术语),即可形成改进的 EUI-64 格式接口标识符。最终在改进的 EUI-64 格式中,“u”比特置 1 表示全球范围,“u”比特置 0 表示本地范围。二进制形式的 IEEE EUI-64 标识符的前 3 个字节如图 3 所示。
cccc ccug cccc cccc cccc cccc
图3 二进制形式IEEE EUI-64标识符的前3个字节格式
图 3 中用互联网标准比特顺序书写。“u”是 universal/local 位,“g”是 individual/group 位,“c”是公司 ID 位。附录 A“生成改进的 EUI-64 格式接口标识符”,举例说明了任何生成基于改进的 EUI-64 格式接口标识符。
形成接口标识符时插入“u”比特是为了便于系统管理者,使其在不能得到硬件标记时,也能配置非全球标识符。例如,针对串联链路和隧道端点情况。对这些情况的替代方案或许是 0200:0:0:1,0200:0:0:2 格式等,代替更简单的 0:0:0:1,0:0:0:2 等。
不要求 IPv6 节点证实由改进的 EUI-64 标记(该标记的“u”比特设置为全球范围)生成的接口标识符是唯一的。
在改进的 EUI-64 格式标识符中使用 universal/local 比特将引起新技术研发,这些新技术能够利用具有全球范围的接口标识符。
形成接口标识符的细节在相应的“相关链路的 IPv6”规范中定义,例如“以太网上的IPv6” [ETHER],和“FDDI 上的 IPv6” [FDDI]。
2.5.2 未指定地址
地址 0:0:0:0:0:0:0:0 称作未指定地址。它必须不分配给任何节点。它表示没有这个地址。
使用未指定地址的例子如:正在初始化的主机还没有学习到它自己的地址之前,它发送的任何 IPv6 分组中 Source Address 字段的内容。
未指定地址必须不用作 IPv6 分组的目的地地址,也必须不在 IPv6 的 Routing 首部中使用。IPv6 路由器必须不转发含未指定的源地址的 IPv6 分组。
2.5.3 环回地址
单播地址 0:0:0:0:0:0:0:1 称为环回地址。节点用其发送返回到自己的 IPv6 分组。它必须不分配给任何物理接口。它被看作属于链路本地范围,可以被当作是虚拟接口(典型称作“环回接口”)的链路本地单播地址,该虚拟接口通向一个假想的链路,该链路和谁也不连通。
环回地址必须不用作 IPv6 分组(这些分组是从单个节点发送到该节点外面的)中的源地址。以环回地址为目的地地址的 IPv6 分组决不能发送到单一节点以外,并且决不能经由 IPv6路由器转发。接口收到目的地为环回地址的分组必须将其抛弃。
2.5.4 全球单播地址
IPv6 全球单播地址一般格式如图 4 所示。
全球路由前缀(global routing prefix) ——n bits
接口ID(interface ID) ——m bits
子网ID(subnet ID) ——128-n-m bits
图4 全球单播地址一般格式
图 4 中,全球路由前缀是一个(典型等级结构)值,该值分配给站点(一群子网/链路),子网 ID是该站点内链路的标识符,接口 ID 如第 2.5.1 节定义。
除了以二进制 000 开始的全球单播地址外,所有全球单播地址有一个 64 位的接口 ID字段(即,n + m = 64),格式如第 2.5.1 节所述。以二进制 000 开始的全球单播地址,在大小上或接口 ID 字段结构上没有这类限制。
以二进制 000 开始的全球单播地址的例子是具有嵌入的 IPv4 地址的 IPv6 地址,如第2.5.5 节所述。使用除了 000 外的二进制值开始的全球地址的例子(因此有一个 64 比特接口ID 字段)参阅[GLOBAL]。
2.5.5 带有嵌入的 IPv4 地址的 IPv6 地址
定义了两类携带 IPv4 地址的 IPv6 地址,它们均在地址的低阶 32 比特中携带 IPv4 地址。
它们是“IPv4 兼容的 IPv6 地址”和“IPv4 映射的 IPv6 地址”。
2.5.6 链路本地 IPv6 单播地址
2.5.7 站点本地 IPv6 单播地址(已废除)