第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 位就能找出该地址所属的地址