18.2. IPv6-下一代的因特网

由于 WWW(万维网)的出现,过去十五年中越来越多的计算机开始通过 TCP/IP 通讯,这使因特网有了突飞猛进的发展。自从 1990 年在 CERN (http://public.web.cern.ch) 任职的 Tim Berners-Lee 开创了 WWW,因特网主机的数量已从几千台猛增至上亿台。

如上所述,IPv4 地址只有 32 位。而且还有不少 IP 地址丢失,它们因网络组织结构的原因而无法使用。子网中可用的地址数量是位数的平方减 2。举例来说,某个子网可以有 2 个、6 个或 14 个可用地址。如果要将 128 台主机连接到因特网,您的子网要提供 256 个 IP 地址,其中只有 254 个可用,因为有两个 IP 地址需要供该子网本身的结构使用:即作为广播地址和基础网络地址。

在当前的 IPv4 协议下,DHCP 或 NAT(网络地址转换)是用来避免出现地址短缺的典型机制。这些方法与用来分隔专用地址空间和公用地址空间的规定相结合,肯定能够缓解短缺状况;它们的问题在于不仅配置烦琐,而且也加重了维护的负担。要在 IPv4 网络内设置主机,您需要若干地址项,如主机本身的 IP 地址、子网掩码、网关地址,可能还要提供名称服务器地址。所有这些项都是必需的,而且无法从其它任何地方得到这些项。

利用 IPv6,地址的短缺和复杂的配置都将成为过去。以下各节进一步说明了 IPv6 带来的改进和优点,以及如何从旧协议过渡到新协议。

18.2.1. 优点

新协议中最为重要同时也最为显著的改进在于对可用地址空间的极大扩容。IPv6 地址由 128 位值而不是传统的 32 位值组成,它提供的 IP 地址数目多达 10 的 15 次方的若干倍。

不过,IPv6 与以前的不同不仅限于长度,其内部结构也发生了变化,这种结构可以包含更多的有关系统和系统所属网络的具体信息。有关详细信息,请参见 第 18.2.2 节 “地址类型和结构”

以下列出了新协议的其它一些优点:

自动配置

IPv6 使网络可以支持“即插即用”,这意味着无需任何手工配置即可将新安装的系统集成到(本地)网络中。新主机可以使用其自动配置机制,依赖名为邻居发现 (ND) 的协议从邻近的路由器提供的信息中得到自己的地址。这种方法不要求管理员参与,并且无需维护用于分配地址的中央服务器,这是 IPv4 无法媲美的(IPv4 中需要使用 DHCP 服务器来自动分配地址)。

移动能力

利用 IPv6,为一个网络接口同时指派多个地址成为可能。用户能够轻松访问多个网络,就如同享受移动电话公司提供的国际漫游服务:将移动电话携至境外时,电话一进入国外服务区即自动登录相应的国外服务,这样,无论您身处何地都可以用同一个号码进行联系,而且您还能够像在本地服务区内那样拨打电话。

安全通讯

在 IPv4 中,网络安全是一项附加功能。IPv6 则将 IPSec 作为其核心功能之一,允许系统通过安全隧道通讯,避免被因特网上的外来者窃听。

向后兼容

实际上,要想将整个因特网一下子从 IPv4 转换为 IPv6 是不可能的。因此,这两个协议不仅要能在因特网上同时存在,还应能够同时存在于一个系统中,这一点至关重要。要实现这一点,一方面两种地址应兼容(IPv4 地址可以轻松转换为 IPv6 地址),另一方面还要使用一定数量的隧道。请参见 第 18.2.3 节 “IPv4 与 IPv6 并存”。此外,系统可以依赖双栈 IP 技术同时支持两种协议,这意味着系统中有两种完全分开的网络堆栈,从而避免这两种版本的协议相互影响。

通过多路广播的自定义服务

在 IPv4 中,有些服务(如 SMB)需要向本地网络中的所有主机广播其数据包。IPv6 则采用一种更为精确的方式,通过多路广播支持服务器对主机寻址,即对作为组中一部分的若干主机寻址(这不同于通过广播对所有主机寻址或通过单路广播对每台主机逐个寻址)。将哪些主机作为一组来寻址可能要取决于具体的应用程序。可使用一些预定义的组来寻址,例如对所有名称服务器寻址(所有名称服务器多路广播组),或对所有路由器寻址(所有路由器多路广播组)。

18.2.2. 地址类型和结构

如上所述,当前的 IP 协议在以下两个重要方面存在缺陷:IP 地址越来越短缺,而且配置网络和维护路由表的任务越来越复杂和繁重。IPv6 通过将地址空间扩展到 128 位解决了第一个问题。通过引入分级地址结构,结合先进的网络地址分配技术和多宿主功能(将多个地址指派给同一个设备,从而支持对多个网络的访问),第二个问题也迎刃而解。

使用 IPv6 时,了解三种类型的地址十分有用:

单路广播

这类地址只与一个网络接口关联。采用这类地址的包只传递到一个目标。因此,使用单路广播地址可以将包传送到本地网络或因特网上的单个主机。

多路广播

这类地址与一组网络接口相关。采用这类地址的包将传递到属于该组的所有目标。多路广播地址主要供特定网络服务使用,用于以有序的方式与特定的主机组通讯。

任意广播

这类地址与一组接口相关。采用这类地址的包将根据基础路由协议的原则,传递给该组中与发送方最为接近的成员。任意广播地址便于主机在特定网络区域内找到提供特定服务的服务器。同一类型的所有服务器都具有相同的任意广播地址。在请求服务时,主机会收到路由协议决定的最接近它的服务器的回复。如果出于某种原因此服务器无法回复,协议会自动选择距离稍远一些的服务器,依此类推。

IPv6 地址分为八组,每组四位数字,代表十六位,采用十六进制表示法。各组之间用冒号 (:) 分隔。可以删除某组中的前置零字节,但不能删除组中或组末的零。另一个约定是:连续的零字节若超过四个,则可以省略为双冒号形式。不过,每个地址只允许有一个这样的 ::例 18.3 “示例 IPv6 地址” 中演示了这种简写表示法,其中的三行全部表示同一地址。

例 18.3. 示例 IPv6 地址

fe80 : 0000 : 0000 : 0000 : 0000 : 10 : 1000 : 1a4
fe80 :    0 :    0 :    0 :    0 : 10 : 1000 : 1a4
fe80 :                           : 10 : 1000 : 1a4

IPv6 地址的每个部分都有明确的功能。前面的字节构成前缀,用于指定地址类型。中间部分是地址的网络部分,但可以不用。地址的结尾构成主机部分。在 IPv6 中,网络掩码是通过在地址末尾的斜杠后指明前缀的长度来定义的。例 18.4 “指定前缀长度的 IPv6 地址” 中的地址包含上述信息,即:前 64 位构成地址的网络部分,后 64 位构成地址的主机部分。换言之,64 表示网络掩码由左起的 64 个 1 位值构成。正如 IPv4,要用 AND 将 IP 地址与子网值结合起来,以确定主机位于同一子网中还是其它网络中。

例 18.4. 指定前缀长度的 IPv6 地址

fe80::10:1000:1a4/64

IPv6 可以识别几种预定义的前缀类型。其中有些列在 表 18.4 “各种 IPv6 前缀” 中。

表 18.4. 各种 IPv6 前缀

前缀(十六进制)

定义

00

IPv4 地址和 IPv6 上的 IPv4 兼容地址。这些用于与 IPv4 保持兼容。要使用这些地址,仍然需要依赖路由器将 IPv6 包转换为 IPv4 包。有若干特殊地址(如用于回路设备的地址)也采用此前缀。

23 作为第一个数字

可聚合全局单路广播地址。类似 IPv4 的情况,可以指定某个接口作为特定子网的一部分。当前存在以下地址空间:2001::/16(生产质量地址空间)和 2002::/16(6to4 地址空间)。

fe80::/10

链路本地地址。不应路由带有这种前缀的地址,而只能从同一子网中访问。

fec0::/10

站点本地地址。可以路由这种地址,但只局限在它们所属的组织的网络之内。实际上,这些是相当于当前的专用网络地址空间(如 10.x.x.x)的 IPv6 地址。

ff

这些是多路广播地址。

单路广播地址由三个基本部分组成:

公共拓扑结构

第一部分(也包含上述前缀之一)用于通过公共因特网路由数据包。其中包含提供因特网访问的公司或机构的相关信息。

站点拓朴结构

第二部分包含要将包传递到的子网的路由信息。

接口 ID

第三部分标识要将包传递到的接口。其中允许使用 MAC。由于 MAC 是硬件厂商编程到设备中的全球唯一的固定标识符,配置过程得到了极大简化。事实上,前 64 个地址位共同构成 EUI-64 令牌,后 48 位从 MAC 中提取,其余的 24 位包含有关令牌类型的特殊信息。这样还可以将 EUI-64 令牌指派给没有 MAC 的接口,如基于 PPP 或 ISDN 的接口。

在这个基础结构之上,IPv6 还区分五种不同的单路广播地址:

::(未指定)

在首次初始化接口时(即无法通过其它方法确定地址时),这类地址可用作主机的源地址。

::1(回路)

回路设备的地址。

IPv4 兼容地址

IPv6 地址由 IPv4 地址和 96 个零位组成的前缀构成。这类兼容地址用于隧道通讯进程(请参见第 18.2.3 节 “IPv4 与 IPv6 并存”),以便 IPv4 和 IPv6 主机与在纯 IPv4 环境中操作的其它主机通讯。

映射到 IPv6 的 IPv4 地址

这类地址以 IPv6 表示法指定纯 IPv4 地址。

本地地址

有两类地址可供本地使用:

链路本地

这类地址只能在本地子网中使用。不能将源地址或目标地址采用此类地址的包路由到因特网或其它子网。这些地址包含特殊的前缀 (fe80::/10) 和网卡的接口 ID,中间部分为零字节。这类地址在自动配置过程中使用,用于与同一子网中的其它主机通讯。

站点本地

可以将采用这类地址的包路由到其它子网,但不能路由到更广阔的因特网(不能跨越组织自身的网络)。这类地址用于内部网,相当于 IPv4 定义的专用地址空间。其中包含特殊的前缀 (fec0::/10)、接口 ID,及指定子网 ID 的 16 位域。其余部分也是零字节。

作为 IPv6 引进的全新功能,每个网络接口通常可以获得多个 IP 地址,这个功能的优点即在于:可以通过同一接口访问多个网络。其中一个网络可以使用 MAC 和已知前缀进行完全的自动配置,这样一启用 IPv6 (使用链路本地地址),即可访问本地网络中的所有主机。由于其中使用了 MAC,所用的任何 IP 地址都是全球唯一的。地址中只有指定站点拓朴结构公共拓朴结构的部分才是可变部分,这取决于主机当前运行所在的实际网络。

要使主机在不同网络间切换,主机至少需要两个地址。其中之一 - 本地地址,不仅包含接口 ID 而且包含该主机通常所属的本地网络的标识符(以及相应的前缀)。本地地址是静态地址,因此一般不变。所有要发送到移动主机的包仍可以传递到该主机,不管它是在本地网络还是其它任何网络中操作。这一点得益于 IPv6 引进的全新功能,如无状态自动配置邻居发现。除本地地址之外,移动主机还获得一个或多个额外的地址,这些地址属于该主机漫游到的外地网络。这些地址称为转交地址。本地网络有一种功能,可以在主机漫游到外地时转发要发送给该主机的所有包。在 IPv6 环境中,这项任务由本地代理来完成,该代理可以接收要发送到本地地址的所有包,并通过隧道进行转发。另一方面,发送到转交地址的那些包可直接转发到移动主机,而不必进行任何特殊的迂回处理。

18.2.3. IPv4 与 IPv6 并存

将与因特网相连的所有主机从 IPv4 迁移到 IPv6 是一个逐步的过程。这两种协议将在未来一定时间内并存。通过双栈技术来实施这两种协议,可以在同一系统上同时支持这两种协议。但这仍然没有解决支持 IPv6 的主机如何与 IPv4 主机通讯,以及应如何通过当前网络(主要基于 IPv4)传输 IPv6 包的问题。最好的解决方案就是提供隧道处理功能和兼容地址(请参见 第 18.2.2 节 “地址类型和结构”)。

在(全球)占主导地位的 IPv4 网络中相对孤立的 IPv6 主机可以通过隧道来通讯:IPv6 包被封装为 IPv4 包,在 IPv4 网络中传送。这种在两个 IPv4 主机间的连接被称为隧道。要实现这种功能,包必须包含 IPv6 目标地址(或相应的前缀),以及隧道接收端的远程主机的 IPv4 地址。根据主机管理员间的协议,可以手工配置基本的隧道。这也称作静态隧道

但是,静态隧道的配置和维护往往过于烦琐,不能适应日常通讯需要。因此,IPv6 提供了三种不同的动态隧道方法:

6over4

IPv6 包被自动封装为 IPv4 包,并通过支持多路广播的 IPv4 网络发送。这种方法诱导 IPv6 将整个网络(因特网)视为一个巨大的局域网 (LAN)。这样即可自动确定 IPv4 隧道的接收端。不过,这种方法不够灵活,并且还因为 IP 多路广播在因特网上尚未普及而不易推行。因此,它提供的解决方案仅适用于支持多路广播的小型公司网络或机构网络。RFC 2529 中对这种方法作出了规定。

6to4

利用这种方法,可以从 IPv6 地址自动生成 IPv4 地址,从而支持孤立的 IPv6 主机通过 IPv4 网络进行通讯。不过,用这种方法在孤立的 IPv6 主机和因特网之间通讯时存在一些问题。RFC 3056 中对这种方法进行了说明。

IPv6 隧道中介程序

这种方法依赖特殊的服务器为 IPv6 主机提供专用隧道。RFC 3053 中对此进行了说明。

[Important]6bone 倡议

在“以往”因特网的核心位置,通过隧道相连的遍布全球的 IPv6 子网已发展起来。这就是 6bone 网络 (http://www.6bone.net),即可供编程人员和因特网服务提供者使用的 IPv6 测试环境。这些人可以利用这个网络开发和提供基于 IPv6 的服务,汲取实施新协议所需的经验。有关详细信息,请参见该项目的因特网站点。

18.2.4. 配置 IPv6

要配置 IPv6,通常无需在各个工作站上执行任何更改。但必须装载 IPv6 支持。为此,需要以 root 身份输入 modprobeipv6

由于 IPv6 使用自动配置,将给网卡指派链路-本地网络中的地址。一般不在工作站上管理路由选择表。工作站可以使用路由器广告协议查询网络路由器,了解应实施的前缀和网关。使用 radvd 程序可以设置 IPv6 路由器。此程序会通知工作站对 IPv6 地址使用哪个前缀和哪个路由器。或者,可以使用 zebra 自动配置两个地址和路由选择。

有关如何使用 /etc/sysconfig/network 文件设置各种隧道的信息,请参见 ifup(8)手册页。

18.2.5. 参见信息

上文的概述中并未全面论述 IPv6 这一主题。有关这种新协议的深入讨论,请参见以下联机文档和书目:

http://www.ngnet.it/e/cosa-ipv6.php

包含一系列文章,对 IPv6 的基础知识进行了精彩介绍。是关于该主题的不错的入门指南。

http://www.bieringer.de/linux/IPv6/

在此可找到 Linux IPv6-HOWTO 以及许多与该主题有关的链接。

http://www.6bone.net/

如果想加入 IPv6 隧道网络,请访问此站点。

http://www.ipv6.org/

学习 IPv6 知识的起点。

RFC 2640

有关 IPv6 的基础 RFC。

IPv6 Essentials

Silvia Hagen 所著的 IPv6 Essentials(ISBN 0-596-00125-8) 中描述了该主题的所有重要方面。