第26章Pv6编址 在本书第五部分的第一章,我们要介绍的是IPv6中的编址。IPv4协议的地址耗尽问题 是开发IPv6协议的一个主要原因。正如我们将在本章看到的,IPv6地址的结构与IPv4地 址的结构有着一些本质上的不同。在IPv6中再也不用担心地址耗尽问题了。 目标 本章有以下几个目标: ●介绍IPv6的编址机制以及这一版所使用的几种表示地址的不同记法。 ●解释IPv6中使用的三类编址类型:单播、任播和多播。 ●说明1P6的地址空间,以及它是如何被划分为若干个地址块的。 ● 讨论地址空间中的一些被保留的地址块以及它们的应用。 定义全球单播地址块以及它如何被应用于单播通信。 ●讨论在IPv6布署全球单播地址块时,如何应用了分为三级的分级编址技术。 ·讨论1Pv6地址的自动配置和重新编号问题。 26.1引言 IPv6地址的长度是128位或者说16个字节(八位组),如图26.1所示。IPv6地址 的长度是IPv4地址长度的四倍。 128位 1111110111101100 1110110110101011 图26.1IPv6地址 26.1.1记法 在计算机中,地址通常以二进制保存,但是很显然,128位的长度对人类来说不是 那么容易掌握的。为了让人类能够处理这些地址,已经建议了多种用来表示IPv6地址 的记法。 点分十进制记法 为了与IPv4地址兼容,我们会很自然地想到要使用点分十进制记法,就像表示IPv4 地址那样(第5章)。虽然这种记法对于4字节的IPv4地址很方便,但是对于16字节的IPv6 地址来说,这种记法显得有点太长,如下所示: 221.14.65.11.105.45.170.34.12.234.18.0.14.0.i15.255 这种记法很少被使用,除了有些情况可能会使用其中的某一部分,稍后将会看到。 十六进制冒号记法 为了使地址的可读性更好,IPv6地址协议指明了十六进制冒号记法(colon hexadecimal notation),。在这种记法中,128位被划分为八区,每个区的长度为两字节。在十六进制记 法中,两个字节需要4个十六进制数字,因此,IPv6地址由32个十六进制数字组成,每4 个数字用一个冒号分隔开。图26.2所示为用十六进制冒号记法表示的一个IPv6地址。 FDEC:BA98:7654:3210:ADBF:BBFF:2922:FFFF
第 26 章 IPv6 编址 在本书第五部分的第一章,我们要介绍的是 IPv6 中的编址。IPv4 协议的地址耗尽问题 是开发 IPv6 协议的一个主要原因。正如我们将在本章看到的,IPv6 地址的结构与 IPv4 地 址的结构有着一些本质上的不同。在 IPv6 中再也不用担心地址耗尽问题了。 目标 本章有以下几个目标: 介绍 IPv6 的编址机制以及这一版所使用的几种表示地址的不同记法。 解释 IPv6 中使用的三类编址类型:单播、任播和多播。 说明 IPv6 的地址空间,以及它是如何被划分为若干个地址块的。 讨论地址空间中的一些被保留的地址块以及它们的应用。 定义全球单播地址块以及它如何被应用于单播通信。 讨论在 IPv6 布署全球单播地址块时,如何应用了分为三级的分级编址技术。 讨论 IPv6 地址的自动配置和重新编号问题。 26.1 引言 IPv6 地址的长度是 128 位或者说 16 个字节(八位组),如图 26.1 所示。IPv6 地址 的长度是 IPv4 地址长度的四倍。 图 26.1 IPv6 地址 26.1.1 记法 在计算机中,地址通常以二进制保存,但是很显然,128 位的长度对人类来说不是 那么容易掌握的。为了让人类能够处理这些地址,已经建议了多种用来表示 IPv6 地址 的记法。 点分十进制记法 为了与 IPv4 地址兼容,我们会很自然地想到要使用点分十进制记法,就像表示 IPv4 地址那样(第 5 章)。虽然这种记法对于 4 字节的 IPv4 地址很方便,但是对于 16 字节的 IPv6 地址来说,这种记法显得有点太长,如下所示: 这种记法很少被使用,除了有些情况可能会使用其中的某一部分,稍后将会看到。 十六进制冒号记法 为了使地址的可读性更好,IPv6 地址协议指明了十六进制冒号记法(colon hexadecimal notation)。在这种记法中,128 位被划分为八区,每个区的长度为两字节。在十六进制记 法中,两个字节需要 4 个十六进制数字,因此,IPv6 地址由 32 个十六进制数字组成,每 4 个数字用一个冒号分隔开。图 26.2 所示为用十六进制冒号记法表示的一个 IPv6 地址
图26.2十六进制冒号记法 这个IP地址即使用十六进制格式表示起来也很长,不过其中有许多数字都是零。在这 种情况下,我们可以对这个地址进行简写。一个区(即两个冒号之间的4个数字)开头的几 个零可以忽略。使用这种简写方式,0074可以写为74,000F可以写为F,而0000则写为0。 请注意,3210不能被简写。 如果连续几个区都只包含了0,那么这个十六进制冒号记法还可以更进一步简写,通常 称为零压缩(zero compression).。我们可以把这些零全部去掉,取而代之的是一个双冒号。 图26.3描绘了这个概念。 FDEC:0:0:0:0:BBFF:0:FFFF FDEC:BBFF:0:FFFF 原始地址 零压缩后 图26.3零压缩 请注意,这种类型的简写对一个地址仅能使用一次。若有两串零段,则只能将其中之一 进行压缩。 混合表示法 有时候我们会看到一种混合表示的IPv6地址:十六进制冒号记法加上点分十进制记法。 这种表示方法适用于将一个IPv4地址嵌入到一个IPv6地址中的过渡时期(作为最左边的 32位)。我们可以对地址最左边的6个区使用十六进制冒号记法,而最靠右的两个区则以4 个字节的点分十进制记法取代,如下所示: FDEC:14AB:2311:BBFE:AAAA:BBBB:130.24.24.18 但是,通常只在这个IP6地址最右边的区全部或大部分为零时才会这样写。例如,下 面所示为一个合法的IPv6地址,其中的零压缩表示这个地址最左边的96位全部是零: :130.24.24.18 CIDR记法 稍后我们会看到,IPv6使用了分级的编址技术。正是因为这个原因,IPv6允许无分类编址 和CIDR记法。例如,图26.4所示为我们如何使用CID定义一个60位的前缀。在后面我们 将会说明一个IPv6地址是如何划分前缀和后缀的。 FDEC BBFF:0:FFFF/60 图26.4CIDR地址 例26.1 给出以下IPv6地址的未经简写的十六进制冒号记法表示: a.64个0之后跟着64个1的地址。 b.128个0组成的地址。 c.128个1组成的地址。 d.128个1和0交替组成的地址。 解 a.0000:0000:0000:0000:FFFF:FFFF:FFFF:FFFF b.0000:0000:0000:0000:0000:0000:0000:0000 C.FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF d.AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA 例26.2 下面所示为例26.1中的地址经过零压缩后(c和d部分不能被简写)的形式:
图 26.2 十六进制冒号记法 这个 IP 地址即使用十六进制格式表示起来也很长,不过其中有许多数字都是零。在这 种情况下,我们可以对这个地址进行简写。一个区(即两个冒号之间的 4 个数字)开头的几 个零可以忽略。使用这种简写方式,0074 可以写为 74,OOOF 可以写为 F,而 0000 则写为 0。 请注意,3210 不能被简写。 如果连续几个区都只包含了 0,那么这个十六进制冒号记法还可以更进一步简写,通常 称为零压缩(zero compression)。我们可以把这些零全部去掉,取而代之的是一个双冒号。 图 26.3 描绘了这个概念。 图 26.3 零压缩 请注意,这种类型的简写对一个地址仅能使用一次。若有两串零段,则只能将其中之一 进行压缩。 混合表示法 有时候我们会看到一种混合表示的 IPv6 地址:十六进制冒号记法加上点分十进制记法。 这种表示方法适用于将一个 IPv4 地址嵌入到一个 IPv6 地址中的过渡时期(作为最左边的 32 位)。我们可以对地址最左边的 6 个区使用十六进制冒号记法,而最靠右的两个区则以 4 个字节的点分十进制记法取代,如下所示: 但是,通常只在这个 IPv6 地址最右边的区全部或大部分为零时才会这样写。例如,下 面所示为一个合法的 IPv6 地址,其中的零压缩表示这个地址最左边的 96 位全部是零: CIDR 记法 稍后我们会看到,IPv6 使用了分级的编址技术。正是因为这个原因,IPv6 允许无分类编址 和 CIDR 记法。例如,图 26.4 所示为我们如何使用 CIDR 定义一个 60 位的前缀。在后面我们 将会说明一个 IPv6 地址是如何划分前缀和后缀的。 图 26.4 CIDR 地址 例 26.1 给出以下 IPv6 地址的未经简写的十六进制冒号记法表示: a.64 个 0 之后跟着 64 个 1 的地址。 b.128 个 0 组成的地址。 c.128 个 1 组成的地址。 d.128 个 1 和 0 交替组成的地址。 解 a. OOOO:OOOO:OOOO:OOOO:FFFF:FFFF:FFFF:FFFF b. 0000:0000:0000:0000:0000:0000:0000:0000 C. FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF d. AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA 例 26.2 下面所示为例 26.1 中的地址经过零压缩后(c 和 d 部分不能被简写)的形式:
a.FFFF:FFFF:FFFF:FFFF b.: c.FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF d.AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA 例26.3 给出以下地址的简写表示: a.0000:0000:FF℉℉:0000:0000:0000:0000:0000 b.1234:2346:0000:0000:0000:0000:0000:1111 c.0000:0001:0000:0000:0000:0000:1200:1000 d.0000:0000:0000:0000:0000:FFFF:24.123.12.6 解 a.0:0:FFFF:: b.1234:2346::1111 c.0:1:1200:1000 d.::FFF℉:24.123.12.6 例26.4 对以下地址进行解压缩,给出对应的未经简写的Pv6地址的完整表示: a.1111::2222 b.:: c.0:1: d.AAAA:A:AA::1234 解 a.1111:0000:0000:0000:0000:0000:0000:2222, b.0000:0000:0000:0000:0000:0000:0000:0000 c.0000:0001:0000:0000:0000:0000:0000:0000 d.AAAA:000A:00AA:0000:0000:0000:0000:1234 26.1.2地址空间 IPv6的地址空间包含了2个地址,如下所示。这个地址空间是IPv4地址数量的 2倍,肯定不会存在地址耗尽的问题了。 2128=340282366920938463374607431768211456 例26.5 为了对这个地址数量有一个直观的印象,让我们假设地球上的总人口数量即将达到24 (超过160亿)。那么每个人仍然有2个地址可供使用。 例26.6 如果我们每年向用户指派2(几乎每秒10亿)个地址,那么需要花2年才能让地址 耗尽。 例26.7 如果在地球的整个表面上,不管是陆地还是海洋,建造一座高耸入云的大楼,使得每一 平方米的地面上都能容纳2“台计算机,还是有足够的地址可以把所有的计算机都连接到因 特网上(地球的表面面积大约为2平方米)
a.::FFFF:FFFF:FFFF:FFFF b.:: c. FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF d. AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA 例 26.3 给出以下地址的简写表示: a. OOOO:OOOO:FFFF:OOOO:OOOO:OOOO:OOOO:OOOO b. 1234:2346:0000:0000:0000:0000:0000:1111 c. 0000:0001:0000:0000:0000:0000:1200:1000 d. OOOO:OOOO:OOOO:OOOO:OOOO:FFFF:24.123.12.6 解 a.O:O:FFFF:: b.1234:2346::1111 c.0:1::1200:1000 d.::FFFF:24.123.12.6 例 26.4 对以下地址进行解压缩,给出对应的未经简写的 IPv6 地址的完整表示: a.1111::2222 b.:: c.0:1:: d.AAAA:A:AA::1234 解 a. 1111:0000:0000:0000:0000:0000:0000:2222, b. 0000:0000:0000:0000:0000:0000:0000:0000 c. 0000:0001:0000:0000:0000:0000:0000:0000 d. AAAA:OOOA:OOAA:0000:0000:0000:0000:1234 26.1.2 地址空间 IPv6 的地址空间包含了 2 128个地址,如下所示。这个地址空间是 IPv4 地址数量的 296倍,肯定不会存在地址耗尽的问题了。 例 26.5 为了对这个地址数量有一个直观的印象,让我们假设地球上的总人口数量即将达到 2 34 (超过 160 亿)。那么每个人仍然有 2 94个地址可供使用。 例 26.6 如果我们每年向用户指派 2 60(几乎每秒 10 亿)个地址,那么需要花 2 68年才能让地址 耗尽。 例 26.7 如果在地球的整个表面上,不管是陆地还是海洋,建造一座高耸入云的大楼,使得每一 平方米的地面上都能容纳 2 68台计算机,还是有足够的地址可以把所有的计算机都连接到因 特网上(地球的表面面积大约为 2 60平方米)
26.1.3三种地址类型 在IPv6中,一个目的地址可以属于以下三种类型之一:单播的、任播的和多播的。 单播地址 单播地址定义了一个接口(计算机或路由器)。发送到单播地址的分组必须交付给这个 指定的计算机。我们将在稍后会看到,IPv6为单播通信设计了一个很大的地址块,其中的 单播地址都可以指派给接口使用。 任播地址 任播地址定义了一组共享一个地址的计算机。发送到任播地址的分组会被交付给这个组 的成员之一,也就是最容易到达的那一个。例如,当多台服务器都能响应某个查询时,就可 以使用任播通信。这个查询请求被发送到最容易到达的那台服务器。产生请求的硬件和软件 只生成了一份请求的副本,而该副本也仅到达其中的一台服务器。IPv6没有为任播设计专 门的地址块,这些任播地址是从单播地址块中指派的。 多播地址 多播地址定义的也是一组计算机,但是任播和多播是有区别的。在多播通信中,多播组 的每个成员都会接收到一个副本。稍后我们将会看到,IPv6发送到多播地址的分组必须交 付给该组中的每一个成员。IPv6为多播通信设计了一个地址块,从这个地址块中可以向一 个组的所有成员指派相同的地址。 26.1.4广播和多播 有趣的是IPv6没有定义广播通信,哪怕是在有限范围内的广播,这一点不像IPv4。 在第5章中,我们讨论了在一个地址块中的某些地址能够被用于有限的广播。我们将会 看到,IPv6认为广播就是多播的一种特殊情况。 26.2地址空间分配 像IPv4的地址空间一样,IPv6的地址空间被划分为若干个大小不同的地址块,并 为每种特定的任务分配一个地址块。这些地址块中的绝大部分尚未指派,被留作将来使 用。为了更好地理解地址空间中每个地址块的分配及其所处的位置,我们首先将完整的 地址空间划分为八个大小相等的区。这种划分并不表示地址块的分配,只是我们认为这 样做可以更好地说明每个实际的地址块所处的位置(图26.5)。 地址空间=212%个地址 8 1/8 1/8 1/8 1/8 1/8 1/8 1/R 保留的 全球单播 保留的 保留的 保留的 保留的 保留的 保留的 指派的 指派的 E G H I JKLMN A:1/256Pv4兼容 D:1/64保留的 G:1/16保留的 K:1/512保留的 B:1256保留的 E:1/32保留的 H:1/32保留的 L:1/1024本地链路 C:1/128保留的 F:1/16保留的 1:1/64保留的 M:1/256保留的 J:1/128唯一本地单播 N:1/256多播 图26.5地址空间的分配 每一个区是整个地址空间的1/8(即25个地址)。第一个区包含了六个长度不等的地址
26.1.3 三种地址类型 在 IPv6 中,一个目的地址可以属于以下三种类型之一:单播的、任播的和多播的。 单播地址 单播地址定义了一个接口(计算机或路由器)。发送到单播地址的分组必须交付给这个 指定的计算机。我们将在稍后会看到,IPv6 为单播通信设计了一个很大的地址块,其中的 单播地址都可以指派给接口使用。 任播地址 任播地址定义了一组共享一个地址的计算机。发送到任播地址的分组会被交付给这个组 的成员之一,也就是最容易到达的那一个。例如,当多台服务器都能响应某个查询时,就可 以使用任播通信。这个查询请求被发送到最容易到达的那台服务器。产生请求的硬件和软件 只生成了一份请求的副本,而该副本也仅到达其中的一台服务器。IPv6 没有为任播设计专 门的地址块,这些任播地址是从单播地址块中指派的。 多播地址 多播地址定义的也是一组计算机,但是任播和多播是有区别的。在多播通信中,多播组 的每个成员都会接收到一个副本。稍后我们将会看到,IPv6 发送到多播地址的分组必须交 付给该组中的每一个成员。IPv6 为多播通信设计了一个地址块,从这个地址块中可以向一 个组的所有成员指派相同的地址。 26.1.4 广播和多播 有趣的是 IPv6 没有定义广播通信,哪怕是在有限范围内的广播,这一点不像 IPv4。 在第 5 章中,我们讨论了在一个地址块中的某些地址能够被用于有限的广播。我们将会 看到, IPv6 认为广播就是多播的一种特殊情况。 26.2 地址空间分配 像 IPv4 的地址空间一样,IPv6 的地址空间被划分为若干个大小不同的地址块,并 为每种特定的任务分配一个地址块。这些地址块中的绝大部分尚未指派,被留作将来使 用。为了更好地理解地址空间中每个地址块的分配及其所处的位置,我们首先将完整的 地址空间划分为八个大小相等的区。这种划分并不表示地址块的分配,只是我们认为这 样做可以更好地说明每个实际的地址块所处的位置(图 26.5)。 图 26.5 地址空间的分配 每一个区是整个地址空间的 1/8(即 2 125个地址)。第一个区包含了六个长度不等的地址
块,其中三个地址块是保留的,另外三个地址块是未指派的。第二个区被认为就是一个地址 块,用于全球单播地址,我们在本章的后面将会进一步讨论。接下来的五个区都是未指派的 地址。最后一个区划分为八个地址块,其中有些地址块属于尚未指派的地址,另一些则被保 留作特殊用途。从图中可以看出有5/8的地址空间还没有被指派。只有1/8的地址空间用于 用户之间的单播通信。 表26.1给出了每种类型的地址的前缀。第五列表示每一种地址类型相对于整个地址空 间所占据的份额。最左边一列不是标准中的一部分,一它只是显示了图26.5所描绘的地址 区。 表26.11Pv6地址的类型前缀 地址块前缀 CIDR 地址块分配 份额 00000000 0000:/8 保留(IPv4兼容) 1/256 00000001 0100:/8 保留 1/256 0000001 0200:/7 保留 1/128 续表 地址块前缀 CIDR 地址块分配 份额 000001 0400:/6 保留 1/64 00001 0800:/5 保留 1/32 0001 1000:/4 保留 1/16 2 001 2000:/3 全球单播 1/8 010 4000:/3 保留 1/8 4 011 6000:/3 保留 1/8 5 100 8000:/3 保留 1/8 6 101 A000:/3 保留 1/8 1 110 C000:/3 保留 1/8 1110 E000:/4 保留 1/16 11110 F000:/5 保留 1/32 111110 F800:/6 保留 1/64 1111110 FC00:/7 唯一的本地单播 1/128 111111100 FE00:/8 保留 1/512 1111111010 FE80:/10 本地链路地址 1/1024 1111111011 FEC0:/10 保留 1/1024 11111111 FF00:/8 多播地址 1/256 例26.8 图26.5仅显示出了用于全球单播通信的地址在地址空间中是哪一部分,那么在这个地 址块中一共有多少个地址? 解 这个地址块仅占地址空间的1/8。为了计算这些地址的数量,我们可以用完整的地址空 间除以8或23。结果是(2128)/(23)=2125,很大的一个地址块。 算法 为了说明根据表26.1中列出的那些前缀,能够为一个IPv6地址无二义性地找到其相应 的地址块,我们构造了如图26.6所示的算法流程图。这个算法可用于编写一段程序,以找 出一个给定的地址所属的地址块。这个算法最多只需检查10位就能找出该地址所属的地址
块,其中三个地址块是保留的,另外三个地址块是未指派的。第二个区被认为就是一个地址 块,用于全球单播地址,我们在本章的后面将会进一步讨论。接下来的五个区都是未指派的 地址。最后一个区划分为八个地址块,其中有些地址块属于尚未指派的地址,另一些则被保 留作特殊用途。从图中可以看出有 5/8 的地址空间还没有被指派。只有 1/8 的地址空间用于 用户之间的单播通信。 表 26.1 给出了每种类型的地址的前缀。第五列表示每一种地址类型相对于整个地址空 间所占据的份额。最左边一列不是标准中的一部分,一它只是显示了图 26.5 所描绘的地址 区。 表 26.1IPv6 地址的类型前缀 例 26.8 图 26.5 仅显示出了用于全球单播通信的地址在地址空间中是哪一部分,那么在这个地 址块中一共有多少个地址? 解 这个地址块仅占地址空间的 1/8。为了计算这些地址的数量,我们可以用完整的地址空 间除以 8 或 23。结果是(2128)/(23)= 2125,很大的一个地址块。 算法 为了说明根据表 26.1 中列出的那些前缀,能够为一个 IPv6 地址无二义性地找到其相应 的地址块,我们构造了如图 26.6 所示的算法流程图。这个算法可用于编写一段程序,以找 出一个给定的地址所属的地址块。这个算法最多只需检查 10 位就能找出该地址所属的地址
块。请注意,为了保持该图的简洁性,图中没有显示保留的地址块(除了与IPv4兼容的地 址)。 图例 ◆检查下一位或多位 开始 已指派的 111111 000000 本地链路 Pv4兼容 多播 唯一本地单播 全球单播 图26.6查找所分配的地址块的算法 26.2.1指派的和保留的地址块 这一小节要讨论各个已指派的和被保留的地址块的特点和作用,让我们从表26.1 的第一行开始。 Pv4兼容地址 使用前缀(00000000)的地址是保留的,但是其中有部分用来定义了一些IPv4兼容 地址。这个地址块占据整个地址空间的1/256,也就是说在这个地址块中一共有22”个 地址。用CID记法时,这个地址块可定义为O000:/8。这个地址块进一步被划分为若 干个子块,下面将具体讨论。 未指明地址未指明地址是只包含了一个地址的子地址块,它定义的这个地址的所 有后缀部分也都是零。换言之,整个的地址都是由零组成。这个地址用于主机引导期间, 当主机不知道自己的地址而需要发送查询以便找出自己的地址时。因为任何IPv6分组 都需要一个源地址,所以该主机就使用这个地址来完成此任务。请注意,未指明地址不 能用做目的地址。这个单地址子块的CIDR记法是::/128。图26.7所示为未指明地址 的格式。 8位 120位 00000000 全0 前缀 后缀 图26.7未指明地址 Pv6中的未指明地址是:/128。 它永远也不应当被用做目的地址 例26.9 试比较IPv4中的未指明地址和IPv6中的未指明地址。 解 在这两种体系结构中,未指明地址都是一个全零的地址。在IPv4中,这个地址是属于A 类地址的一部分。在IPv6中,这个地址是保留地址块中的一部分。 环回地址这个子块同样也只包含了一个地址。我们在第5章中讨论过环回地址。这个 地址是主机在不需要连接到网络的情况下用来测试它自己的。在这种情况下,由应用层产生 一个报文,发送到运输层,再传递到网络层。但是,这个报文并没有传送到物理网络中,而 是返回到运输层,再传递到应用层。在把计算机连接到网络上之前,可以用这个地址来测试 上面几层的软件包的功能。图26.8描绘了环回地址,它由前缀00000000和后面跟着119 个0和一个1组成。这个单地址子块的CID记法是::1/128
块。请注意,为了保持该图的简洁性,图中没有显示保留的地址块(除了与 IPv4 兼容的地 址)。 图 26.6 查找所分配的地址块的算法 26.2.1 指派的和保留的地址块 这一小节要讨论各个已指派的和被保留的地址块的特点和作用,让我们从表 26.1 的第一行开始。 IPv4 兼容地址 使用前缀(00000000)的地址是保留的,但是其中有部分用来定义了一些 IPv4 兼容 地址。这个地址块占据整个地址空间的 1/256,也就是说在这个地址块中一共有 2 120个 地址。用 CIDR 记法时,这个地址块可定义为 0000::/8。这个地址块进一步被划分为若 干个子块,下面将具体讨论。 未指明地址 未指明地址是只包含了一个地址的子地址块,它定义的这个地址的所 有后缀部分也都是零。换言之,整个的地址都是由零组成。这个地址用于主机引导期间, 当主机不知道自己的地址而需要发送查询以便找出自己的地址时。因为任何 IPv6 分组 都需要一个源地址,所以该主机就使用这个地址来完成此任务。请注意,未指明地址不 能用做目的地址。这个单地址子块的 CIDR 记法是::/128。图 26.7 所示为未指明地址 的格式。 图 26.7 未指明地址 例 26.9 试比较 IPv4 中的未指明地址和 IPv6 中的未指明地址。 解 在这两种体系结构中,未指明地址都是一个全零的地址。在 IPv4 中,这个地址是属于 A 类地址的一部分。在 IPv6 中,这个地址是保留地址块中的一部分。 环回地址 这个子块同样也只包含了一个地址。我们在第 5 章中讨论过环回地址。这个 地址是主机在不需要连接到网络的情况下用来测试它自己的。在这种情况下,由应用层产生 一个报文,发送到运输层,再传递到网络层。但是,这个报文并没有传送到物理网络中,而 是返回到运输层,再传递到应用层。在把计算机连接到网络上之前,可以用这个地址来测试 上面几层的软件包的功能。图 26.8 描绘了环回地址,它由前缀 00000000 和后面跟着 119 个 O 和一个 1 组成。这个单地址子块的 CIDR 记法是::1/128
8位 120位 0000000000000000000000000000000000000000000000000000000000..00000000001 前缀 后缀 图26.8环回地址 例26.10 试比较IPv4中的环回地址和IPv6中的环回地址。 解 它们之间有两点不同。在分类编址中分配给环回地址的是一个完整的地址块,而在IPv6 中只有一个地址被作为环回地址分配。另外,分类编址中的环回地址块是A类地址块的一部 分,而在IPv6中,它只是保留地址块中的一个地址。 嵌入的IPv4地址我们将在第27章中看到,从IPv4到IPv6的过渡期间,主机可以在 IPv6中嵌入它们的IPv4地址。为此而设计了两种格式:兼容的和映射的。兼容地址 (compatib1 e address)是在96位0之后紧跟32位的IPv4地址。当使用IPv6的计算机要 把报文发送给另一个使用IPv6的计算机,但是,分组又必须要通过仍然使用了IPv4网络的 区域时,就要使用这种地址。发送方必须使用与IPv4兼容的地址,使得分组能够通过IPv4 的网络区域。例如,IPv4地址2.13.17.14(点分十进制格式表示)被转换为0:2.13.17.14 (混合格式表示)。在这个IPv4地址前面加上96个0产生了一个128位的IPv6地址(见图 26.9)。这个子地址块是能够包含232个地址的保留区,它的CID记法是::/96。我们将在 第27章更详细地讨论此类地址。 00000000 全0 Pv4地址 96位 32位 图26.9兼容地址 一个映射地址(mapped address.)由80位0之后紧跟着l6位1,再后面跟着的就是 32位的IPv4地址。当某个计算机已经过渡到IPv6而打算把分组发送给一个仍然使用IPv4 的计算机时,就要使用这种地址。这个分组所经过的大部分网络是IPv6的,但最后要交付 到使用IPv4的主机。例如,IPv4地址2.13.17.14(点分十进制格式)被转换为 0:FFFF:2.13.17.14(十六进制冒号格式)。IPv4地址的前面加上80个0和16个1,得到 一个128位的IPv6地址(见第27.3节有关过渡策略的介绍)。图26.10所示为一个映射地 址。 00000000 全0 全1 IPv4地址 80位 16位 32位 图26.10映射地址 关于映射地址和兼容地址有一个非常有意思的地方,它们的设计使得在计算检验和时, 可以使用嵌入的地址,也可以使用完整的地址,因为额外的0或1,只要其个数是16的倍 数,对检验和的计算来说就没有任何影响。这一点对于使用了需要计算检验和的伪首部的 UDP和TCP来说很重要,因为若分组的地址被某个路由器从IPv6地址变为IPv4地址后,检 验和的计算不受影响。 全球单播地址块 这是因特网上主机与主机之间的单播通信所使用的主要地址块。我们将在后面全面而详 细地讨论这个地址块,以说明它是如何在因特网中被用来提供分级编址的 唯一的本地单播地址块 我们在第5章介绍IPv4协议时讨论过专用地址。我们说在IPv4地址空间中有一些地址
图 26.8 环回地址 例 26.10 试比较 IPv4 中的环回地址和 IPv6 中的环回地址。 解 它们之间有两点不同。在分类编址中分配给环回地址的是一个完整的地址块,而在 IPv6 中只有一个地址被作为环回地址分配。另外,分类编址中的环回地址块是 A 类地址块的一部 分,而在 IPv6 中,它只是保留地址块中的一个地址。 嵌入的 IPv4 地址 我们将在第 27 章中看到,从 IPv4 到 IPv6 的过渡期间,主机可以在 IPv6 中嵌入它们的 IPv4 地址。为此而设计了两种格式:兼容的和映射的。兼容地址 (compatible address)是在 96 位 O 之后紧跟 32 位的 IPv4 地址。当使用 IPv6 的计算机要 把报文发送给另一个使用 IPv6 的计算机,但是,分组又必须要通过仍然使用了 IPv4 网络的 区域时,就要使用这种地址。发送方必须使用与 IPv4 兼容的地址,使得分组能够通过 IPv4 的网络区域。例如,IPv4 地址 2.13.17.14(点分十进制格式表示)被转换为 0::2.13.17.14 (混合格式表示)。在这个 IPv4 地址前面加上 96 个 0 产生了一个 128 位的 IPv6 地址(见图 26.9)。这个子地址块是能够包含 232 个地址的保留区,它的 CIDR 记法是::/96。我们将在 第 27 章更详细地讨论此类地址。 图 26.9 兼容地址 一个映射地址(mapped address)由 80 位 O 之后紧跟着 16 位 1,再后面跟着的就是 32 位的 IPv4 地址。当某个计算机已经过渡到 IPv6 而打算把分组发送给一个仍然使用 IPv4 的计算机时,就要使用这种地址。这个分组所经过的大部分网络是 IPv6 的,但最后要交付 到使用 IPv4 的主机。例如,IPv4 地址 2.13.17.14(点分十进制格式)被转换为 O::FFFF:2.13.17.14(十六进制冒号格式)。IPv4 地址的前面加上 80 个 0 和 16 个 1,得到 一个 128 位的 IPv6 地址(见第 27.3 节有关过渡策略的介绍)。图 26.10 所示为一个映射地 址。 图 26.10 映射地址 关于映射地址和兼容地址有一个非常有意思的地方,它们的设计使得在计算检验和时, 可以使用嵌入的地址,也可以使用完整的地址,因为额外的 0 或 1,只要其个数是 16 的倍 数,对检验和的计算来说就没有任何影响。这一点对于使用了需要计算检验和的伪首部的 UDP 和 TCP 来说很重要,因为若分组的地址被某个路由器从 IPv6 地址变为 IPv4 地址后,检 验和的计算不受影响。 全球单播地址块 这是因特网上主机与主机之间的单播通信所使用的主要地址块。我们将在后面全面而详 细地讨论这个地址块,以说明它是如何在因特网中被用来提供分级编址的。 唯一的本地单播地址块 我们在第 5 章介绍 IPv4 协议时讨论过专用地址。我们说在 IPv4 地址空间中有一些地址
块被保留做专用地址。IPv6为专用地址分配了两个地址块:一个是站点级的,一个是链路 级的。在这一小节我们先讨论前一个地址块,下一小节再讨论后一个地址块。 在唯一的本地单播地址块(unique local unicast block)中有一个子块可被站点以个 人行为进行创建和使用。这类地址作为目的地址的分组是不会被路由器转发的。这类地址的 块标识是1111110,紧接着的一位可以是0或者1,它们定义了这个地址是如何被选择的(本 地选择的,还是管理机构选择的)。接下来的40位是由站点选择的,它使用了一个长度为 40位的随机生成数。也就是说这整个48位定义了一个看起来很像全球单播地址的子地址块。 40位的随机数使得地址重复的可能性极小,参见图26.11。请注意,这些地址在格式上和全 球单播地址(本章后面讨论)有着相似之处。 0或1 40位 16位 64位 1110 随机数 子网D 接口D n=48位 图26.11唯一的本地单播地址块 本地链路地址块 设计给专用地址的第二个地址块是本地链路地址块(link local block)。在这个地址块 中有一个子块可用做网络中的专用地址。这类地址的块标识是1111111010。接下来的54位 都被设置为0。最后的64位是可变的,以定义每个计算机的接口(参见图26.12)。请注意, 这些地址在格式上与全球单播地址(本章后面讨论)有着相似之处。 38位 16位 64位 1111111010 全0 全0 接口D n=48位 图26.12本地链路地址 多播地址块 我们在第5章介绍IPv4协议时讨论过多播地址。多播地址用于定义了一组主机而不是 仅仅一个主机。在IPv6中为多播通信指派了一个很大的地址块。所有多播地址都使用前缀 11111111。第二个字段是定义组地址为永久的或暂时的一个标志。永久组地址由因特网管理 机构定义,并可在任何时间进行访问。另一方面,暂时组地址只是临时使用。例如,加入到 远程会议中的各个系统就可以使用一个暂时的组地址。第三个字段定义组地址的范围。现在 已经定义了许多不同的范围,如图26.13所示。 8位 4 4 112位 111111标志范围 组D 0:永久的 0. 保留 5:本地站点 1:暂时的 本地结点8:本地组织 十六进制值 本地链路 E:全球 十六进制值 本地管理 F:保留 图26.13多播地址 26.3全球单播地址 在Pv6地址空间中,用于因特网上两个主机之间的单播(一对一)通信的地址块 称为全球单播地址块。这个地址块的CIDR记法是2000:/3,也就是说,对这个地址块 中的所有地址来说最左边的三位都相同(001)。这个地址块的大小是2125,就因特网的 发展速度来看,它在未来很多年以后都足够用了
块被保留做专用地址。IPv6 为专用地址分配了两个地址块:一个是站点级的,一个是链路 级的。在这一小节我们先讨论前一个地址块,下一小节再讨论后一个地址块。 在唯一的本地单播地址块(unique local unicast block)中有一个子块可被站点以个 人行为进行创建和使用。这类地址作为目的地址的分组是不会被路由器转发的。这类地址的 块标识是 1111 110,紧接着的一位可以是 0 或者 1,它们定义了这个地址是如何被选择的(本 地选择的,还是管理机构选择的)。接下来的 40 位是由站点选择的,它使用了一个长度为 40 位的随机生成数。也就是说这整个 48 位定义了一个看起来很像全球单播地址的子地址块。 40 位的随机数使得地址重复的可能性极小,参见图 26.11。请注意,这些地址在格式上和全 球单播地址(本章后面讨论)有着相似之处。 图 26.11 唯一的本地单播地址块 本地链路地址块 设计给专用地址的第二个地址块是本地链路地址块(link local block)。在这个地址块 中有一个子块可用做网络中的专用地址。这类地址的块标识是 1111111010。接下来的 54 位 都被设置为 0。最后的 64 位是可变的,以定义每个计算机的接口(参见图 26.12)。请注意, 这些地址在格式上与全球单播地址(本章后面讨论)有着相似之处。 图 26.12 本地链路地址 多播地址块 我们在第 5 章介绍 IPv4 协议时讨论过多播地址。多播地址用于定义了一组主机而不是 仅仅一个主机。在 IPv6 中为多播通信指派了一个很大的地址块。所有多播地址都使用前缀 11111111。第二个字段是定义组地址为永久的或暂时的一个标志。永久组地址由因特网管理 机构定义,并可在任何时间进行访问。另一方面,暂时组地址只是临时使用。例如,加入到 远程会议中的各个系统就可以使用一个暂时的组地址。第三个字段定义组地址的范围。现在 已经定义了许多不同的范围,如图 26.13 所示。 图 26.13 多播地址 26.3 全球单播地址 在 IPv6 地址空间中,用于因特网上两个主机之间的单播(一对一)通信的地址块 称为全球单播地址块。这个地址块的 CIDR 记法是 2000::/3,也就是说,对这个地址块 中的所有地址来说最左边的三位都相同( 001)。这个地址块的大小是 2125,就因特网的 发展速度来看,它在未来很多年以后都足够用了
26.3.1三级结构 这个地址块中的地址被划分为三个部分:全球路由选择前缀、子网标识和接口标识, 如图26.14所示。 n位 128-n-m位 m位 全球路由选择前缀 子网标识 接口标识 图26.14全球单播地址 这三个部分的推荐长度如表26.2所示。 表26.2单播地址中各部分的推荐长度 块的指派 长度 全球路由选择前缀(n)】 48位 子网标识(128-n-m) 16位 接口标识(m) 64位 全球路由选择前缀 全球单播地址的最前面48位称为全球路由选择前缀。这48位用来为分组选择路由以通 过因特网到达某个组织的站点,比如说拥有这个地址块的ISP。因为在这个部分中的最前面 三位是固定的(001),所以剩下的45位就可以定义高达245个站点(个体组织或ISP)。全 球因特网上的路由器都会根据的值来转发分组以到达它的目的站点。 子网标识 接下来的16位定义了组织中的一个子网。这就意味着一个组织可以拥有高达216=65536 个子网,这个数量显然是足够用了。 接口标识 最后64位定义了接口标识。这个接口标识类似于Pv4的主机标识,只不过用接口标识 这个术语会更加确切一些,因为正如我们在第5章中所讨论的,实际上主机标识定义的也是 一个接口,而非一个主机。如果主机从一个接口移动到另一个接口,它的P地址也要随之 改变。 在IPv4编址中,在主机标识(IP层的)和物理或MAC地址(数据链路层的)之间是没有 特殊关联的,因为通常物理地址的长度要远远超出主机标识的长度。例如,在使用以太网技 术时,物理地址的长度是48位,而主机标识的长度小于32位。但是Pv6编址就允许这种 可能性的存在。只要长度小于64位的物理地址都可以被嵌入到接口标识中,作为该接口标 识的一部分或者全部,从而消除了地址映射过程。对此可以考虑两种常见的物理编址机制: 由IEEE定义的64位的扩展唯一标识(EL-64)和由以太网定义的48位的物理地址。 EUI-64的映射为了映射64位的物理地址,该格式中的全球/本地控制位需要从0变 为1(从本地的变为全球的)以定义一个接口地址,如图26.15所示。 148位48位18位48位148位 8位 +18位 18位 EU1-64画 接口标识 64位 图26.15EUI-64的映射 以太网MAC地址的映射将一个48位的以太网地址映射为一个64位的接口地址要更复杂 一些。我们需要把全球/本地控制位变为1,还要另外插入16位。这个附加的16位被定义 为15个1后面跟着1个0,或FFFE16。图26.16描绘了此映射
26.3.1 三级结构 这个地址块中的地址被划分为三个部分:全球路由选择前缀、子网标识和接口标识, 如图 26.14 所示。 图 26.14 全球单播地址 这三个部分的推荐长度如表 26.2 所示。 表 26.2 单播地址中各部分的推荐长度 全球路由选择前缀 全球单播地址的最前面 48 位称为全球路由选择前缀。这 48 位用来为分组选择路由以通 过因特网到达某个组织的站点,比如说拥有这个地址块的 ISP。因为在这个部分中的最前面 三位是固定的(001),所以剩下的 45 位就可以定义高达 245 个站点(个体组织或 ISP)。全 球因特网上的路由器都会根据 n 的值来转发分组以到达它的目的站点。 子网标识 接下来的 16 位定义了组织中的一个子网。这就意味着一个组织可以拥有高达 216=65536 个子网,这个数量显然是足够用了。 接口标识 最后 64 位定义了接口标识。这个接口标识类似于 IPv4 的主机标识,只不过用接口标识 这个术语会更加确切一些,因为正如我们在第 5 章中所讨论的,实际上主机标识定义的也是 一个接口,而非一个主机。如果主机从一个接口移动到另一个接口,它的 IP 地址也要随之 改变。 在 IPv4 编址中,在主机标识(IP 层的)和物理或 MAC 地址(数据链路层的)之间是没有 特殊关联的,因为通常物理地址的长度要远远超出主机标识的长度。例如,在使用以太网技 术时,物理地址的长度是 48 位,而主机标识的长度小于 32 位。但是 IPv6 编址就允许这种 可能性的存在。只要长度小于 64 位的物理地址都可以被嵌入到接口标识中,作为该接口标 识的一部分或者全部,从而消除了地址映射过程。对此可以考虑两种常见的物理编址机制: 由 IEEE 定义的 64 位的扩展唯一标识(EUL-64)和由以太网定义的 48 位的物理地址。 EUI-64 的映射 为了映射 64 位的物理地址,该格式中的全球/本地控制位需要从 0 变 为 1(从本地的变为全球的)以定义一个接口地址,如图 26.15 所示。 图 26.15EUI-64 的映射 以太网 MAC 地址的映射将一个 48 位的以太网地址映射为一个 64 位的接口地址要更复杂 一些。我们需要把全球/本地控制位变为 1,还要另外插入 16 位。这个附加的 16 位被定义 为 15 个 1 后面跟着 1 个 O,或 FFFE16。图 26.16 描绘了此映射
48位 8位+1 8位 以太网 +18位 +48位→148位18位 ■ MAC地址 增加的位 接口标识 O 64位 图26.16以太网MAC地址的映射 例26.11 如果一个EUI物理地址是(F5-A9-23-EF-07-14-7A-D2)16,试用我们为EUI地址定义的 格式来给出这个接口标识。 解 我们只需要将第一个八位组的第七位从0变为1,然后再转换成十六进制冒号记法。其 结果是F7A9:23EF:0714:7AD2。 例26.12 如果一个以太网地址为(F5-A9-23-14-7A-D2)16,试用我们为以太网地址定义的格式来 给出这个接口标识。 解 我们只需要将第一个八位组的第七位从0变为1,然后插入两个八位组F℉E16,再将其 转换成十六进制冒号记法。结果是F7A9:23FF:FE14:7AD2。 例26.13 一个组织经指派得到了地址块2000:1456:2474/48。这个组织的第一个和第二个子网的 地址块的CIDR记法是什么? 解 从理论上说,第一个和第二个子网应当分别使用予网标识为000116和000216的地址块。 也就是说这两个地址块是2000:1456:2474:0000/64和2000:1456:2474:0001/64。 例26.14 一个组织经指派得到了地址块2000:1456:2474/48。如果在它的第三个子网中有一台计 算机的以太网物理地址为(F5-A9-23-14-7A-D2)16,那么这个接口的IPv6地址是什么? 解 这个接口的接口标识是F7A9:23FF:FE14:7AD2(参见例26.12)。如果我们在这个接口标 识上再添加它的全球前缀和子网标识后,得到: 2000:1456:2474:0003:F7A9:23FF:FE14:7AD2/128 26.4自动配置 IPv6的一个很有意思的地方是主机的自动配置(autoconfiguration)。如我们在讨论 IPv4时提到的,主机和路由器最初是由网络管理员手工配置的。不过,动态主机配置协议 DHCP可以为加入网络中的主机分配一个IPv4地址。在IPv6中,仍然可以使用DHCP来为主 机分配一个IPv6地址,但是主机也可以自己进行配置。 当IPv6中的一个主机加入到网络上时,它可以按照以下过程对自己进行配置: 1.主机首先为自己创建一个本地链路地址。具体做法是,先在10位的本地链路前缀 (1111111010)后添加54个0,再加上64位的接▣标识,所有主机都知道应该如何从它的 接口卡上得到一个接口标识。最后的结果是128位的本地链路地址。 2.主机测试这个本地链路地址是否唯一,是否没有被其他主机使用。因为64位的接口
图 26.16 以太网 MAC 地址的映射 例 26.11 如果一个 EUI 物理地址是(F5-A9-23-EF-07-14-7A-D2)16,试用我们为 EUI 地址定义的 格式来给出这个接口标识。 解 我们只需要将第一个八位组的第七位从 0 变为 l,然后再转换成十六进制冒号记法。其 结果是 F7A9:23EF:0714:7AD2。 例 26.12 如果一个以太网地址为(F5-A9-23-14-7A-D2)16,试用我们为以太网地址定义的格式来 给出这个接口标识。 解 我们只需要将第一个八位组的第七位从 0 变为 l,然后插入两个八位组 FFFE16,再将其 转换成十六进制冒号记法。结果是 F7A9:23FF:FE14:7AD2。 例 26.13 一个组织经指派得到了地址块 2000:1456:2474/48。这个组织的第一个和第二个子网的 地址块的 CIDR 记法是什么? 解 从理论上说,第一个和第二个子网应当分别使用予网标识为000116和000216的地址块。 也就是说这两个地址块是 2000:1456:2474:0000/64 和 2000:1456:2474:0001/64。 例 26.14 一个组织经指派得到了地址块 2000:1456:2474/48。如果在它的第三个子网中有一台计 算机的以太网物理地址为(F5-A9-23-14-7A-D2)16,那么这个接口的 IPv6 地址是什么? 解 这个接口的接口标识是 F7A9:23FF:FE14:7AD2(参见例 26.12)。如果我们在这个接口标 识上再添加它的全球前缀和子网标识后,得到: 26.4 自动配置 IPv6 的一个很有意思的地方是主机的自动配置(autoconfiguration)。如我们在讨论 IPv4 时提到的,主机和路由器最初是由网络管理员手工配置的。不过,动态主机配置协议 DHCP 可以为加入网络中的主机分配一个 IPv4 地址。在 IPv6 中,仍然可以使用 DHCP 来为主 机分配一个 IPv6 地址,但是主机也可以自己进行配置。 当 IPv6 中的一个主机加入到网络上时,它可以按照以下过程对自己进行配置: 1.主机首先为自己创建一个本地链路地址。具体做法是,先在 10 位的本地链路前缀 (1111 1110 10)后添加 54 个 0,再加上 64 位的接口标识,所有主机都知道应该如何从它的 接口卡上得到一个接口标识。最后的结果是 128 位的本地链路地址。 2.主机测试这个本地链路地址是否唯一,是否没有被其他主机使用。因为 64 位的接口