摘要 本章详细介绍了 IPv4 和 IPv6 的编址。网络管理员必须透彻地理解这两种 IP 编址,才能管理传输控制协议/Internet 协议 (TCP/IP) 网络以及对基于 TCP/IP 的通信进行疑难解答。本章详细讨论了 Internet 协议版本 4 (IPv4) 和 Internet 协议版本 6 (IPv6) 地址的类型、它们的表示形式和分配给网络节点接口的单播地址的类型。 本页内容 本章目标
IPv4 编址
IPv6 编址
比较 IPv4 和 IPv6 编址
本章小结
本章术语表
本章目标 读完本章后,您将能够: • 描述 IPv4 地址和地址前缀的语法;在二进制数和十进制数之间进行转换。
• 列出 IPv4 地址的三种类型,并就每种类型举出一些例子。
• 描述公用的、专用的和非法的 IPv4 地址之间的区别。
• 描述 IPv6 地址和地址前缀的语法;在二进制数和十六进制数之间进行转换。
• 列出 IPv6 地址的三种类型,并就每种类型举出一些例子。
• 描述全局、站点本地和链路本地单播 IPv6 地址之间的区别。
• 将电气和电子工程师协会 (IEEE) 802 地址转换成 IPv6 接口标识符。
• 比较 IPv4 与 IPv6 的地址和编址概念之间的异同。
返回页首 IPv4 编址 IP 地址是在 Internet 层分配给一个接口或一组接口的标识符。各个 IP 地址均可标识 IP 数据包的源或目标。对 IPv4 来说,每个网络节点 都有一个或多个接口;您可以在各个接口上启用 TCP/IP。当您在某个接口上启用 TCP/IP 时,您需要以自动或手动方式为它分配一个或多个逻辑 IPv4 地址。IPv4 地址是一个逻辑地址,因为它是在 Internet 层分配的,与网络接口层使用的地址毫无关系。IPv4 地址的长度是 32 位。 IPv4 地址语法 如果网络管理员使用二进制表示形式来表示 IPv4 地址,则每个地址都将显示为一个由数字 1 和 0 构成的 32 位字符串。因为这种字符串的表示和记忆非 常麻烦,所以管理员使用点分十进制表示形式,即使用半角句号(圆点)来分隔四个十进制数(从 0 至 255)。每个十进制数叫做一个八位位组,代表 32 位地 址中的 8 位(1 个字节)。 例如,IPv4 地址 11000000101010000000001100011000 的点分十进制表示形式是 192.168.3.24。要将 IPv4 地址从二进制表示形式转换成点分十进制表示形式,您需要执行以下操作: • 将二进制地址分割成 8 位的块:11000000 10101000 00000011 00011000
• 将各个块转换成十进制:192 168 3 24
• 以半角句号分隔各个块:192.168.3.24
引用某个 IPv4 地址时,应使用 w.x.y.z 表示形式。图 3-1 描绘了 IPv4 地址的结构。 图 3-1 点分十进制表示形式的 IPv4 地址 查看大图 IPv4 地址前缀 一个唯一的 IPv4 地址的每一位都有一个定义的值。但是,IPv4 地址前缀表示 IPv4 地址的范围;在该范围中,零个或多个高序位被固定为特定值,而剩 下的低序可变位被设置为零。地址前缀通常用来表达所允许的地址的范围、分配给子网的网络标识符和路由。 要表示一个 IPv4 地址前缀,您必须标识出被固定的高序位的数目和它们的值。然后,您可以使用前缀长度表示形式或点分十进制表示形式。 前缀长度表示形式 如果您使用前缀长度表示形式,您可以将地址前缀表示为 StartingAddress/PrefixLength,其中: • StartingAddress 是该范围内第一个在数学上可行的地址的点分十进制表示形式。要构造起始地址,请将固定位设置为它们的定义值,将剩余的位设置为 0。
• PrefixLength 是地址中固定的高序位的数目。
例如,IPv4 地址前缀 131.107.0.0/16 指定了一个包含 65,536 个地址的范围。前缀长度是 16,它指定此范围内所有的地址的开头 16 位都与起始地址的开头 16 位相同。因为起始地址的前 16 位固定为 10000011 01101011(十进制形式为 131 107),所以在此 范围内的所有地址的第一个八位位组都是 131,而第二个八位位组都是 107。因为最后两个八位位组有 16 个可变位,所以总共有 216(即 65,536)个可能的地址。 要使用前缀长度表示形式来指定一个地址前缀,您需要先创建一个起始地址(方法是将所有的可变位设置为 0),将该地址转换成点分十进制表示形式,然后在起始地址的 后面添加一个斜杠和固定位的数目(前缀长度)。 IPv4 地址前缀 131.107.0.0/16 有 16 个固定位 (10000011 01101011)。起始地址就是固定的前 16 位和设置为 0 的后 16 位,即 10000011 01101011 00000000 00000000 或 131.107.0.0。接着,您应当添加一个斜杠和固定位 的数目 (/16) 来将地址前缀表示为 131.107.0.0/16。 前缀长度表示形式又叫做无类别域间路由 (CIDR) 表示形式。 点分十进制表示形式 您也可以将一个 IPv4 地址前缀长度表示为一个点分十进制表示形式的 32 位数。要使用此方法,应将所有固定位设置为 1,将所有可变位设置为 0,然后将 结果转换成点分十进制表示形式。还是使用我们先前的例子,将 16 个固定位设置为 1,将 16 个可变位设置为 0,则结果为 11111111 11111111 00000000 00000000 或 255.255.0.0。此地址前缀可表示为 131.107.0.0, 255.255.0.0。这种将前缀长度表示为一个点分十进制数的方法又叫做网络掩码或子网掩码表示形式。 表 3-1 列出了您将一个 8 位数的连续高序位设置为 1 时,八位位组的对应十进制数。 位的数目 二进制 十进制
0 00000000 0
1 10000000 128
2 11000000 192
3 11100000 224
4 11110000 240
5 11111000 248
6 11111100 252
7 11111110 254
8 11111111 255
表 3-1 前缀长度的十进制数值 在 Windows 中配置 IPv4 地址前缀时,较常使用的是子网掩码表示形式,而非前缀长度表示形式。不过,您必须对这两种类型的表示形式都很熟悉,因为某 些 Windows 配置对话框要求您使用前缀长度表示形式而不是子网掩码表示形式,而且 IPv6 只支持前缀长度表示形式。 IPv4 地址的类型 Internet 标准定义了 IPv4 地址的以下类型: • 单播 分配给特定子网上的一个单一网络接口,用于“一对一”通信。
• 多播 分配给不同子网上的一个或多个网络接口,用于“一对多”通信。
• 广播 分配给同一子网上的所有网络接口,用于子网上的“一对所有”通信。
以下几节将详细介绍这几种类型的地址。 IPv4 单播地址 IPv4 单播地址标识网络中的一个接口的位置,就像用街道地址标识城市街区的房子一样。正如一个街道地址必须能够标识一个唯一的住所一样,IPv4 单播地址也 必须是全局唯一的,而且要采用一种统一的格式。 每个 IPv4 单播地址包括一个网络 ID 和一个主机 ID。 • 网络 ID(又称网络地址)是 IPv4 单播地址的一部分,用来标识位于同一物理或逻辑网段(其边界由 IPv4 路由器定义)上的接口的集合。TCP/IP 网络上的网段又叫做子网或链路。同一物理或逻辑子网上的所有节点都必须使用相同的网络 ID,而且该网络 ID 在整个 TCP/IP 网络内必须是唯一的。
• 主机 ID(又称主机地址)是 IPv4 单播地址的一部分,用来标识子网上的网络节点的接口。主机 ID 在一个网段内必须是唯一的。
图 3-3 描绘了一个示例单播 IPv4 地址的结构。 图 3-3 示例单播 IPv4 地址的结构 查看大图 如果网络 ID 在 TCP/IP 网络中是唯一的,而且主机 ID 在一个网段中也是唯一的,则整个 IPv4 单播地址在整个 TCP/IP 网络中就是唯一 的。 Internet 地址类别 Internet 团体最初定义地址类别是为了系统地给不同大小的网络分配地址前缀。地址类别定义了用于网络 ID 和主机 ID 的位数,还定义了网络的可能数 量和每个网络中的主机数量。在五个地址类别中,A 类、B 类和 C 类地址是为 IPv4 单播地址保留的。D 类地址是为 IPv4 多播地址保留的,而 E 类地址是为试验性用途而保留的。 A 类网络 ID 被分配给拥有大量主机的网络。A 类网络 ID 的前缀长度只有 8 位,这样,剩余的 24 位可用来标识多达 16,777,214 个主 机 ID。但是,这个较短的前缀长度将把可接受 A 类网络 ID 的网络数量限制为 126 个。第一,A 类网络 ID 的高序位总是设置为 0,此约定将 A 类网络 ID 的数量从 256 个减少到 128 个。第二,首八位设置成 00000000 的地址是不能被分配的,因为它们构成了被保留的网络 ID。第三,首八位设置成 01111111(十进制的 127)的地址是不能被分配的,因为它们是为环回地址保留的。后面的两个约定将 A 类网络 ID 的数 量从 128 个减少到 126 个。 对于任何一个 IPv4 网络 ID 来说,主机位全部设置为 0(全 0 主机 ID)和主机位全部设置为 1(全 1 主机 ID)的两个主机 ID 是保留 的主机 ID,不能分配给网络节点接口。此约定将每个 A 类网络中的主机 ID 的数量从 16,777,216 (224) 个减少到 16,777,214 个。 图 3-4 说明了 A 类地址的结构。 图 3-4 A 类地址的结构 查看大图 B 类网络 ID 被分配给中型和大型网络。在这类网络的地址中,前 16 位指定了特定的网络,后 16 位指定了特定的主机。但是,B 类地址的两个高序位总 是设置为 10,这使得所有 B 类网络和地址的地址前缀均为 128.0.0.0/2(或 128.0.0.0, 192.0.0.0)。如果用 14 位表示 B 类网络 ID,用 16 位表示主机 ID,则可以将 B 类地址分配给 16,384 个网络,每个网络可以有 65,534 个主机。 图 3-5 说明了 B 类地址的结构。 图 3-5 B 类地址的结构 查看大图 C 类地址被分配给小型网络。在这类网络的地址中,前 24 位指定了特定的网络,后 8 位指定了特定的主机。但是,C 类地址的三个高序位总是设置为 110,这使得所有 C 类网络和地址的地址前缀均为 192.0.0.0/3(或 192.0.0.0, 224.0.0.0)。如果用 21 位表示 C 类 网络 ID,用 8 位表示主机 ID,则可以将 C 类地址分配给 2,097,152 个网络,每个网络可以有 254 个主机。 图 3-6 说明了 C 类地址的结构。 图 3-6 C 类地址的结构 查看大图 D 类地址是为 IPv4 多播地址保留的。D 类地址的四个高序位总是设置为 1110,这使得所有 D 类地址的地址前缀均为 224.0.0.0/4(或 224.0.0.0, 240.0.0.0)。有关详细信息,请参见本章的“IPv4 多播地址”。 E 类地址是为试验性用途而保留的。E 类地址的高序位总是设置为 1111,这使得所有 E 类地址的地址前缀均为 240.0.0.0/4(或 240.0.0.0, 240.0.0.0)。 表 3-2 总结了可用于 IPv4 单播地址的 Internet 地址类别 A、B 和 C。 类别 w 的值 网络 ID 部分 主机 ID 部分 网络 ID 每个网络的主机 ID
A 1-126 w x.y.z 126 16,277,214
B 127-191 w.x y.z 16,384 65,534
C 192-223 w.x.y z 2,097,152 254
表 3-2 Internet 地址类别摘要 新式 Internet 地址 Internet 地址类别是一种过时的用来分配单播地址的方法,因为实践证明其效率是很低下的。例如,一个拥有 A 类网络 ID 的大型组织最多可以有 16,777,214 个主机。但是,如果该组织仅仅使用 70,000 个主机 ID,则 Internet 的 16,707,214 个潜在的 IPv4 单播地址就被浪费了。 自 1993 年以后,便开始根据各个组织对可访问 Internet 的 IPv4 单播地址的实际需求来向组织分配 IPv4 地址前缀。这种方法称为无类别 域间路由 (CIDR)。例如,某个组织确定它需要 2,000 个可访问 Internet 的 IPv4 单播地址。Internet 名称和号码分配社团 (ICANN) 或某个 Internet 服务提供商 (ISP) 就分配给它一个 IPv4 地址前缀,其中有 21 个位是固定的,其余的 11 个位用于 主机 ID。利用为主机 ID 提供的这 11 个位,您可以创建 2,046 个可能的 IPv4 单播地址。 基于 CIDR 的地址分配通常是将开始的 24 个位用于网络 ID,而将后面的 8 个位用于主机 ID。表 3-3 列出了所需的主机 ID 的数量和对应 的基于 CIDR 的地址分配的前缀长度。 主机 ID 的数量 前缀长度 点分十进制数
2–254 /24 255.255.255.0
255–510 /23 255.255.254.0
511–1,022 /22 255.255.252.0
1,021–2,046 /21 255.255.248.0
2,047–4,094 /20 255.255.240.0
4,095–8,190 /19 255.255.224.0
8,191–16,382 /18 255.255.192.0
16,383–32,766 /17 255.255.128.0
32,767–65,534 /16 255.255.0.0
表 3-3 主机 ID 需求和基于 CIDR 的前缀长度 公用地址 如果您需要到 Internet 的直接(路由)连接,则您必须使用公用地址。如果您需要到 Internet 的间接(代理的或转换的)连接,则您可以使用公用 地址,也可以使用专用地址。如果您的 Intranet 没有以任何方式连接到 Internet,则您可以使用您想使用的任何单播 IPv4 地址。但是,如果 您的 Intranet 曾直接连接到 Internet,则您应当使用专用地址,以防止网络重新编号。 ICANN 分配公用地址,这包括已被确定在 Internet 中唯一的、以前分配的有类别网络 ID 或较新的基于 CIDR 的地址前缀。对于基于 CIDR 的地址前缀来说,w(第一个八位位组)的值的范围是 1 至 126 和 128 至 223,但是专用地址前缀(本章“专用地址”一节作了介绍)除 外。 ICANN 将一个公用地址前缀分配给一个组织后,相应的路由就被添加到 Internet 的路由器中,从而使与该地址前缀相匹配的通信量能够到达这个组织。例 如,将一个地址前缀分配给一个组织后,该地址前缀也会作为路由存在于 Internet 的路由器中。发送到分配的地址前缀内的地址的 IPv4 数据包将被路由 到正确的目标。 非法地址 不需要 Internet 连接的专用组织 Intranet 可以选择它们需要的任何地址方案,甚至可以使用 ICANN 已经分配给其他网络的公用地址前 缀。如果专用组织后来决定直接连接到 Internet,则这些地址就会和现有的公用地址相冲突而变为非法地址。具有非法地址的组织无法用这些非法地址接收通信 量,因为 Internet 上的路由器会将发往 ICANN 分配的地址前缀的通信量发送到被分配了这些前缀的组织,而不会发送到使用非法地址的组织。 例如,一个专用组织选择使用 206.73.118.0/24 作为其 Intranet 的地址前缀。但是,ICANN 已经将这个前缀分配给了 Microsoft Corporation,所以 Internet 路由器中的路由会将所有发往 IPv4 地址 206.73.118.0/24 的数据包 发送到 Microsoft。只要该专用组织不连接到 Internet,就不会出现问题,因为这两个地址前缀位于不同的 IPv4 网络中,这两个地址在各自的 网络中是唯一的。如果这个专用组织后来直接连接到 Internet 并继续使用 206.73.118.0/24 作为地址前缀,则任何通过 Internet 发送到这两个地址的通信量都会到达 Microsoft,而不会到达这个专用组织。 专用地址 每个 IPv4 接口都需要有一个在其 IPv4 网络中唯一的 IPv4 地址。对于 Internet,子网上连接到 Internet 的每个 IPv4 接口都需要有一个在 Internet 内唯一的 IPv4 地址。随着 Internet 的发展,各个连接到 Internet 的组织需要为其 Intranet 上的每个接口获取一个公用地址。这一需求对可用公用地址池提出了很高的要求。 在分析组织的地址需求时,Internet 的设计者注意到,对于许多组织来说,大多数主机都不需要直接连接到 Internet。那些确实需要一组特定的 Internet 服务(例如 Web 访问和电子邮件)的主机通常通过应用层网关(例如代理服务器和电子邮件服务器)来访问 Internet 服务。因此,大 多数组织只需要很少的公用地址,供那些直接连接到 Internet 的节点(例如代理、服务器、路由器、防火墙和转换器等)使用。 组织中不需要直接访问 Internet 的主机则需要使用与已分配的公用地址不重复的 IPv4 地址。为解决这一编址问题,Internet 设计者保留了 IPv4 地址空间的一部分供专用地址使用。专用地址空间中的 IPv4 地址叫做专用地址,这些地址永远都不会被当作公用地址来分配。因为公用和专用地址空间不 重叠,所以专用地址永远不会与公用地址重复。 RFC 1918 为专用地址空间定义了以下地址前缀: • 10.0.0.0/8 (10.0.0.0, 255.0.0.0) 允许以下范围内的有效 IPv4 单播地址:10.0.0.1 至 10.255.255.254。地址前缀 10.0.0.0/8 有 24 个主机位;在一个 专用组织内,任何一种编址方案都可以使用这些主机位。
• 172.16.0.0/12 (172.16.0.0, 255.240.0.0) 允许以下范围内的有效 IPv4 单播地址:172.16.0.1 至 172.31.255.254。地址前缀 172.16.0.0/12 有 20 个主机 位;在一个专用组织内,任何一种编址方案都可以使用这些主机位。
• 192.168.0.0/16 (192.168.0.0, 255.255.0.0) 允许以下范围内的有效 IPv4 单播地址:192.168.0.1 至 192.168.255.254。地址前缀 192.168.0.0/16 有 16 个主机位;在一个专用组织内,任何一种编址方案都可以使用这些主机位。
因为 ICANN 永远不会把专用地址空间内的 IPv4 地址分配给一个连接到 Internet 的组织,所以 Internet 路由器中也永远不会包含指 向专用地址的路由。您也无法通过 Internet 连接到一个专用地址。因此,使用专用地址的主机必须将其 Internet 通信量请求发送到一个具有有效公 用地址的应用层网关(例如一个代理服务器),或者通过一个网络地址转换 (NAT) 设备将此专用地址转换成一个有效的公用地址。 自动专用 IP 地址 正如第 1 章“TCP/IP 简介”所介绍的那样,您可以在一台运行 Windows Server 2003 或 Windows XP 操作系统的计算机上 配置一个接口,以便让该接口自动获取一个 IPv4 地址配置。如果计算机没有联系到动态主机配置协议 (DHCP) 服务器,则计算机会使用其备用配置,备用配 置可以通过“Internet 协议 (TCP/IP)”组件的属性对话框中的“备用配置”选项卡来指定。 选中了“备用配置”选项卡上的“自动专用 IP 地址”选项时,如果找不到 DHCP 服务器,则 Windows 的 TCP/IP 组件就会使用自动专用 IP 地址 (APIPA)。TCP/IP 组件从地址前缀 169.254.0.0/16 中随机选择一个 IPv4 地址,并分配一个子网掩码 255.255.0.0。ICANN 保留了此地址前缀,因而此地址前缀在 Internet 上是不可访问的。利用 APIPA,单子网小型办公室/家庭办公室 (SOHO) 网络在使用 TCP/IP 时不需要管理员去配置和更新静态地址或管理 DHCP 服务器。APIPA 不配置默认网关。因此,您只能和子网中的其 他节点交换通信量。 特殊的 IPv4 地址 以下地址是特殊的 IPv4 地址: • 0.0.0.0 称为未指定的 IPv4 地址,用来表示地址缺失。未指定地址仅用作下述情况下的源地址:某个 IPv4 节点没有配置 IPv4 地址配置,正尝试通过某个配置 协议(例如 DHCP)来获取一个地址。
• 127.0.0.1 称为 IPv4 环回地址,它被分配给了一个内部环回接口。此接口可供节点用来向自己发送数据包。
单播 IPv4 编址准则 在为组织的子网分配网络 ID 时,请遵循以下准则: • 网络 ID 在 IPv4 网络中必须是唯一的。 如果主机能够直接从子网访问 Internet,则您必须使用一个由 ICANN 或者某个 Internet 服务提供商分配的公用 IPv4 地址前缀。如果 主机不能直接从子网访问 Internet,则使用一个合法的公用地址前缀或使用一个在您的专用 Intranet 内唯一的专用地址前缀均可。
• 网络 ID 不能以数字 0 或 127 开头。 第一个八位位组的这两个值是保留值,您不能将它们用于 IPv4 单播地址。
为 IPv4 子网上的节点接口分配主机 ID 时,请遵循以下准则: • 主机 ID 在一个子网内必须是唯一的。
• 不能使用全 0 或全 1 主机 ID。
为给定的地址前缀定义有效的 IPv4 单播地址范围时,请按照以下标准做法操作: • 对于范围内的第一个 IPv4 单播地址,请将地址中的低序位设置为 1,而将地址中的所有其他主机位均设置为 0。
• 对于范围内的最后一个 IPv4 单播地址,请将地址中的低序位设置为 0,而将地址中所有其他主机位均设置为 1。
例如,地址前缀 192.168.16.0/20 的地址范围的表示方法如下: • 该范围内的第一个 IPv4 单播地址是 11000000 10101000 00010000 00000001(主机位以粗体字显示)或者 192.168.16.1。
• 范围内的最后一个 IPv4 单播地址是 11000000 10101000 00011111 11111110(主机位以粗体字显示)或者 192.168.31.254。
因此,地址前缀 192.168.16.0/20 的地址范围是:192.168.16.1 至 192.168.21.254。 IPv4 多播地址 IPv4 使用多播地址可将数据包从一个源传送到多个目标。在启用了多播的 IPv4 Intranet 上,路由器将定址到某个 IPv4 多播地址的 IPv4 数据包转发到那个其中的主机在侦听发送到该 IPv4 多播地址的通信量的子网。IPv4 多播能够高效地将多种类型的通信从一个源传送到多个目标。 IPv4 多播地址是由 D 类 Internet 地址类别 (224.0.0.0/4) 定义的。IPv4 多播地址的范围是:224.0.0.0 至 239.255.255.255(含)。地址前缀 224.0.0.0/24 的 IPv4 多播地址(224.0.0.0 至 224.0.0.255)是为本 地子网上的多播通信量保留的。 IPv4 广播地址 IPv4 使用一组广播地址可将数据包从一个源传送到子网上的所有接口。子网上的所有接口都处理发送到 IPv4 广播地址的数据包。下面介绍 IPv4 广播地 址的各种类型: • 网络广播 网络广播地址是通过将有类别地址前缀中的所有主机位都设置为 1 而形成的。例如,131.107.255.255 是有类别网络 ID 131.107.0.0/16 的网络广播地址。网络广播会将数据包发送到有类别网络的所有接口。IPv4 路由器不转发网络广播数据包。
• 子网广播 子网广播地址是通过将无类别地址前缀的所有主机位都设置为 1 而形成的。例如,131.107.26.255 是无类别网络 ID 131.107.26.0/24 的网络广播地址。子网广播会将数据包发送到无类别网络的所有主机。IPv4 路由器不转发子网广播数据包。 有类别地址前缀没有子网广播地址,而只有网络广播地址。无类别地址前缀没有网络广播地址,而只有子网广播地址。
• 全子网定向广播 全子网定向广播地址是通过将无类别地址前缀的有类别网络 ID 主机位全部设置为 1 而形成的。RFC 1812 中不赞成使用全子网定向广播地址。根据定 义,定址到全子网定向广播地址的数据包将传送到已划分了子网的有类别网络 ID 的所有子网上的所有主机。例如,131.107.255.255 是已划分了子网 的网络 ID 131.107.26.0/24 的全子网定向广播地址。全子网定向广播地址就是原始有类别网络 ID 的网络广播地址。
• 有限广播 有限广播地址是通过将 IPv4 地址的 32 个位全部设置为 1 (255.255.255.255) 而形成的。在本地网络 ID 未知的情况下,可以使用 有限广播地址来进行本地子网上的“一对所有”传送。IPv4 节点通常仅在自动化配置过程(例如启动协议 (BOOTP) 或 DHCP)中使用有限广播地址。例 如,在 DHCP 服务器确认使用所提议的 IPv4 地址配置之前,DHCP 客户端必须使用有限广播地址发送所有通信量。
返回页首 IPv6 编址 IPv6 和 IPv4 最明显的区别就是地址大小。IPv6 的地址长度是 128 位,是 IPv4 地址长度的四倍。一个 32 位地址空间允许 232 即 4,294,967,296 个可能的地址。一个 128 位地址空间允许 2128 即 340,282,366,920,938,463,463,374,607,431,768,211,456(或 3.4×1038)个可能的地址。 IPv4 地址空间是二十世纪七十年代末设计的,当时几乎没有人(如果有的话,也只是极少数)会想到那些地址会用完。但是,由于基于 Internet 地址类别 的网络 ID 的原始分配和近来 Internet 中主机的迅速增长,IPv4 地址空间就要耗尽了;到 1992 年,情况已经非常明朗,实施替代方案已经是 势在必行。 对于 IPv6 来说,我们甚至更难想像到 IPv6 地址空间有一天也会用完。用一种更形象的说法,即一个 128 位的地址空间为地球表面每平方米面积提供了 655,570,793,348,866,943,898,599 (6.5×1023) 个地址。当然,人们决定将 IPv6 地址设置为 128 位的长 度,并不是因为地球表面每平方米可能会有 655,570,793,348,866,943,898,599 (6.5×1023) 个地址。之所以设计如此大的 IPv6 地址空间,是为了进行高效的地址分配和路由来反映现代 Internet 拓扑,也是为了满足较新的网络技术使用的 64 位媒体访问控制 (MAC) 地址的需要。使用 128 位的地址为分层寻址和路由的设计提供了多层结构和灵活性,而这正是基于 IPv4 的 Internet 所缺少的。 RFC 3513 描述了 IPv6 编址体系结构。 IPv6 地址语法 IPv4 地址是以点分十进制表示形式来表示的。对于 IPv6,128 位的地址是按每 16 位 1 个分界线来分隔的,每个 16 位块转换成 4 个十六 进制数(基16 计数系统),相邻的 16 位块以半角冒号隔开。生成的表示形式叫做冒号十六进制表示形式。 下面是一个二进制形式的 IPv6 地址: 0011111111111110001010010000000011010000000001010000000000000000 0000001010101010000000001111111111111110001010001001110001011010 每 16 位用 1 个分界线来分割此 128 位地址: 0011111111111110 0010100100000000 1101000000000101 0000000000000000 0000001010101010 0000000011111111 1111111000101000 1001110001011010 每个 16 位块都转换成十六进制,相邻的块用半角冒号隔开。结果为: 3FFE:2900:D005:0000:02AA:00FF:FE28:9C5A 通过删除每个 16 位块内的前导零,还可以进一步简化 IPv6 表示形式。不过,每个块必须最少有一个数字。删除前导零后,此地址就变成了: 3FFE:2900:D005:0:2AA:FF:FE28:9C5A 在二进制数和十六进制数之间转换 十六进制计数系统在表示一个数时使用数字 0 至 9,字母 A、B、C、D、E 和 F,以及 16 的指数幂。表 3-4 列出了数字 0 至 15 的十进 制、十六进制和二进制表示形式。 十进制 十六进制 二进制
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111
表 3-4 十进制、十六进制和二进制之间的转换 要将十六进制数转换成二进制数,应将每个十六进制数字转换成对等的 4 位二进制数字。例如,要将十六进制数 0x03D8 转换成二进制,应将各个十六进制数 字(0、3、D 和 8)分别转换成二进制。这样,0x03D8 就是 0000 0011 1101 1000 或 0000001111011000。 要将二进制数转换成十六进制数,应从低序位开始将二进制数分割成包含 4 位的块。然后,将每个包含 4 位的块转换成与其相等的十六进制形式。例如,要将二进制 数 0110000110101110 转换成十六进制,应首先将整个数分割成 4 位一块的数字块,即 0110 0001 1010 1110。然后,将每块 转换成十六进制数字,即 0x61AE。 虽然您可以使用 Windows Server 2003 或 Windows XP 中的计算器在十六进制和二进制之间进行转换,但如果您手动执行转换会帮助您 更好地理解此操作。要在十进制和十六进制之间进行转换(IPv6 地址不需要经常执行此操作),请使用 Windows 计算器。 压缩零 某些类型的地址包含一长串零。要进一步简化 IPv6 地址的表示形式,您可以将以冒号十六进制格式表示的一串连续的、设置为 0 的 16 位块压缩 成“::”(叫做双冒号)。 例如,您可以将单播 IPv6 地址 FE80:0:0:0:2AA:FF:FE9A:4CA2 压缩成 FE80::2AA:FF:FE9A:4CA2,可以将 多播 IPv6 地址 FF02:0:0:0:0:0:0:2 压缩成 FF02::2。 您只能使用零压缩来压缩以冒号十六进制表示形式表示的一个连续的 16 位块序列。您不能对 16 位块的一部分进行零压缩。例如,您无法将 FF02:30:0:0:0:0:0:5 表示为 FF02:3::5。 要确定“::”代表多少位零,您可以计算压缩地址中的块数,用 8 减去此数,然后将结果乘以 16。例如,地址 FF02::2 有两个块(“FF02”块 和“2”块),这意味着其他六个 16 位块(总共 96 位)已被压缩。 在一个给定的地址中,您只能使用一次零压缩。否则,您就无法确定每个“::”代表多少位零。如果一个地址包含同样长的两个零块序列,则应通过转换将左边的零块序列 表示为“::”。 IPv6 地址前缀 您可以按照使用前缀长度表示形式表示 IPv4 地址范围的方式,将 IPv6 地址范围表示为地址前缀。例如,FF00::/8 是一个地址范 围,3FFE:FFFF::/32 是一个路由前缀,3FFE:FFFF:0:2F3B::/64 是一个子网前缀。您不能使用 IPv4 子网掩码的冒号十六进 制表示形式来表示一个地址前缀。 IPv6 地址类型 IPv6 有三种地址类型: • 单播 单播地址标识单播地址类型范围中的一个接口。使用适当的单播路由拓扑,定址到单播地址的数据包将被传送到单个接口。单播地址用于从一个源到单个目标进行通信。
• 多播 多播地址标识多个接口。使用适当的多播路由拓扑,定址到多播地址的数据包将被传送到由该地址标识的所有接口。多播地址用于从一个源到多个目标进行通信,数据会传送 到多个接口。
• 任意广播 任意广播地址标识多个接口。使用适当的路由拓扑,定址到任意广播地址的数据包将被传送到单个接口,即该地址标识的最近的接口。“最近的”接口是指最近的路由距 离。任意广播地址用于从一个源到多个目标之一进行通信,数据将传送到单个接口。
IPv6 地址总是标识接口,而不标识节点。节点由分配给其接口之一的任意单播地址标识。 RFC 3513 没有定义任何类型的广播地址,而换用了 IPv6 多播地址。例如,IPv4 的子网和有限的广播地址被保留的 IPv6 多播地址 FF02::1 取代。 IPv6 单播地址 以下地址类型都是单播 IPv6 地址: • 全局单播地址
• 链路本地地址
• 站点本地地址
• 特殊 IPv6 地址
• 兼容性地址
全局单播地址 全局单播地址相当于公用 IPv4 地址。它们在 Internet 上的 IPv6 部分(称为 IPv6 Internet)是可全局路由和访问的。 通过聚合或汇总全局单播地址,可以生成一个高效的路由基础结构。当前基于 IPv4 的 Internet 由平面路由和分层路由混合组成,但是,基于 IPv6 的 Internet 能够支持高效的分层寻址和路由。全局单播地址在其范围中是唯一的,此范围就是整个 IPv6 Internet。 图 3-7 描绘了 RFC 3587 中定义的全局单播地址的总体结构。 图 3-7 RFC 3587 中定义的全局单播地址的结构 查看大图 图 3-8 描绘了在撰写本文时 IANA 分配的全局单播地址结构(根据 RFC 3587 中的定义)。 图 3-8 IANA 当前分配的全局单播地址 查看大图 全局单播地址中的字段有: • 固定部分(设置为 001) 三个高序位被设置为 001。当前分配的全局地址的地址前缀是 2000::/3。
• 全局路由前缀 全局路由前缀可标识一个特定组织的站点。三个固定位和 45 位全局路由前缀的组合用于创建 48 位站点地址前缀,创建的站点地址将被分配给组织的单个站点。分 配之后,IPv6 Internet 上的路由器会将匹配 48 位地址前缀的 IPv6 通信量转发到组织站点的路由器。
• 子网 ID 子网 ID 标识组织站点中的子网。此字段长 16 位。组织站点可在其站点内使用这 16 位来创建 65,536 个子网或多个层次的寻址层次结构和一个高效 路由基础结构。
• 接口 ID 接口 ID 指示站点内子网上的接口。此字段长 64 位。
例如,3FFE:FFFF:2A3C:F282:2B0:D0FF:FEE9:4143 是一个全局单播 IPv6 地址。在此地址中: • 3FFE:FFFF:2A3C 表示组织站点
• F282 表示该站点内的子网
• 2B0:D0FF:FEE9:4143 表示该站点内该子网上的接口
RFC 3587 中定义的全局单播地址中的字段会创建一个三级结构,如图 3-9 所示。 图 3-9 RFC 3587 中定义的全局单播地址的三级结构 查看大图 公用拓扑就是由提供 IPv6 Internet 接入的大大小小的 ISP 和连接到 IPv6 Internet 的组织构成的集合。站点拓扑是组织站点内的 子网构成的集合。接口标识符标识组织站点中子网上的特定接口。 本地使用的单播地址分为两个类别: • 链路本地地址,用于链路上的邻居之间以及邻居发现过程,它定义 IPv6 子网上的节点与主机和路由器的交互方式。
• 站点本地地址,用于组织 Intranet 上的同一站点内不同节点之间的通信。
链路本地地址 节点在与同一链路(又称子网)上的相邻节点通信时会使用链路本地地址。例如,在没有路由器的单链路 IPv6 网络上,链路上主机之间的通信会使用链路本地地 址。链路本地地址相当于运行 Windows 的计算机上自动配置的 APIPA IPv4 地址。链路本地地址的范围(网络上的一个区域,地址在其中保持着唯一 性)是本地链路。 邻居发现过程需要使用链路本地地址(该地址总是自动配置的),即使在所有其他单播地址都不存在的情况下也需要。 图 3-10 描绘了链路本地地址的结构。 图 3-10 链路本地地址的结构 查看大图 由于链路本地地址的前 64 位是固定的,所有链路本地地址的地址前缀都是 FE80::/64。 IPv6 路由器绝对不会将链路本地通信量转发到链路之外。 站点本地地址 站点本地地址相当于 IPv4 专用地址空间。专用 Intranet 没有与 IPv6 Internet 的直接的路由连接,它可以使用站点本地地址而不会与 全局地址发生冲突。站点本地地址是不可从其他站点访问的,而且路由器也决不能将站点本地通信量转发到站点外。站点本地地址可以用作对全局地址的补充。站点本地地址 的范围是整个站点(组织网络的一部分,已定义了地理边界、拓扑边界或网络带宽边界)。 与链路本地地址不同,站点本地地址不是自动配置的,必须通过无状态或有状态地址配置来进行分配。 图 3-11 描绘了站点本地地址的结构。 图 3-11 站点本地地址的结构 查看大图 站点本地地址的前 10 位被固定为 1111 1110 11。因此,所有站点本地地址的地址前缀都是 FEC0::/10。除了 10 个高序固定位外,还有 一个 54 位子网 ID 字段,您可以使用该字段在您的组织中创建子网。使用 54 位,您在一个平面子网结构中最多可拥有 254 个子网;您也可以分割子网 ID 字段的高序位来创建一个分层的、摘要型路由基础结构。子网 ID 字段的后面是 64 位接口 ID 字段,它标识子网上的特定接口。 注意 一个标题为“Deprecating Site Local Addresses”(禁止使用站点本地地址,文件名为 draft-ietf-ipv6-deprecate-site-local-0x.txt)的 Internet 草案正式规定禁止在将来的 IPv6 实施中 使用站点本地地址。在推出标准的替代方法之前,现有的 IPv6 实施仍可继续使用站点本地地址。“Internet Protocol Version 6 (IPv6) Addressing Architecture”(Internet 协议版本 6 (IPv6) 编址体系结构)标准的更新版本现已作为 Internet 草案 (draft-ietf-ipv6-addr-arch-v4-0x.txt) 发布,其中规定禁止使用站点本地地址。这一关于 IPv6 编址标准的 Internet 草案将淘汰 RFC 3513。 本地使用地址的区域 ID 本地使用地址在组织 Intranet 中不是唯一的。链路本地地址可以基于每个链路(子网)进行复制。站点本地地址可以基于每个站点进行复制。因此,当指定链路 本地目标地址时,您必须指定该目标所在的链路。对于站点本地目标地址,当您使用多个站点时,您必须指定目标所在的站点。使用区域 ID,可以指定其上的目标地址可 供访问的网络部分或网络区域。在 Ping、Tracert 和 Pathping 命令中,指定一个区域 ID 的语法是 IPv6Address%ZoneID。 对于链路本地目标,ZoneID 通常等于连接到目标所在链路的接口的接口索引。接口索引是内部编号,分配给从 netsh interface ipv6 show interface 命令的显示中可以看到的 IPv6 接口。对于站点本地地址,ZoneID 等于可从 netsh interface ipv6 show address level=verbose 命令的显示中看到的站点编号。如果有多个站点未被使用,则不需要站点本地地址的区域 ID。当目标是全局 单播地址时,不需要 ZoneID 参数。 特殊 IPv6 地址 以下是特殊 IPv6 地址: • 未指定地址 未指定地址(0:0:0:0:0:0:0:0 或 ::)表示地址缺失,相当于 IPv4 的未指定地址 0.0.0.0。未指定地址通常用作尝试验证临时地址唯 一性的数据包的源地址。未指定地址从不分配给接口或用作目标地址。
• 环回地址 环回地址(0:0:0:0:0:0:0:1 或 ::1)标识一个环回接口。使用此地址,一个节点可以向自己发送数据包;此地址相当于 IPv4 的环回地址 127.0.0.1。定址到环回地址的数据包从不在链路上发送,也不会由 IPv6 路由器转发。
兼容性地址 为了帮助从 IPv4 向 IPv6 过渡,定义了以下地址: • 与 IPv4 兼容的地址 与 IPv4 兼容的地址,0:0:0:0:0:0:w.x.y.z 或 ::w.x.y.z(其中的 w.x.y.z 是公用 IPv4 地址的点分十进制表示 形式),供那些使用 IPv6 进行通信的 IPv6/IPv4 节点使用。IPv6/IPv4 节点是兼用 IPv4 和 IPv6 协议的节点。当 IPv4 兼容地址用作 IPv6 目标时,IPv6 通信量自动使用 IPv4 标头进行封装,然后发送到使用 IPv4 基础结构的目标。用于 Windows Server 2003 和 Windows XP 的 IPv6 能够支持 IPv4 兼容地址,但默认情况下禁用这类地址。
• IPv4 映射地址 IPv4 映射地址,0:0:0:0:0:FFFF:w.x.y.z 或 ::FFFF:w.x.y.z,将仅使用 IPv4 的节点表示为 IPv6 节 点。IPv4 映射地址仅用作内部表示形式。IPv4 映射地址从不用作 IPv6 数据包的源或目标地址。用于 Windows Server 2003 和 Windows XP 的 IPv6 不支持 IPv4 映射地址。
• 6to4 地址 6to4 地址用于 Internet 上同时运行 IPv4 和 IPv6 的两个节点之间的通信。您可以通过将全局前缀 2002::/16 与节点的 32 位公用 IPv4 地址组合成 48 位前缀,来构成 6to4 地址。6to4 是 RFC 3056 中描述的 IPv6 过渡技术。
• ISATAP 地址 标题为“站点间自动隧道寻址协议 (ISATAP)”的 Internet 草案定义了在专用 intranet 上同时运行 IPv4 和 IPv6 的两个节 点之间使用的 ISATAP 地址。ISATAP 地址使用本地管理的接口 ID ::0:5EFE:w.x.y.z,其中 w.x.y.z 是任意单播 IPv4 地址(无论是公用的还是专用的)。您可以将 ISATAP 接口 ID 与任何对 IPv6 单播地址有效的 64 位前缀组合在一起,包括链路本地地 址前缀 (FE80::/64)、站点本地前缀和全局前缀。
• Teredo 地址 当终结点之一或两个终结点都位于 IPv4 网络地址转换 (NAT) 设备之后时,Teredo 地址用于在 Internet 上同时运行 IPv4 和 IPv6 的两个节点之间进行通信。您可以将一个 32 位的 Teredo 前缀与 Teredo 服务器的公用 IPv4 地址及其他元素组合在一起,构成 Teredo 地址。Teredo 是一种 IPv6 过渡技术,Internet 草案“Teredo: Tunneling IPv6 over UDP through NATs”(Teredo:通过 NAT 使用 IPv6 over UDP 进行隧道传输)中详细描述了这种技术。
IPv6 接口标识符 单播 IPv6 地址的最后 64 位是接口标识符,该标识符对于 IPv6 地址的 64 位前缀来说是唯一的。IPv6 接口标识符有以下几种: • 由扩展唯一标识符 (EUI)-64 地址派生而来的 64 位接口标识符。
• 随机生成的接口标识符,随时间而更改以提供一定的隐蔽性。
• 在有状态地址自动配置(例如,通过动态主机配置协议 IPv6 版 [DHCPv6])过程中分配的接口标识符。
基于 EUI-64 地址的接口标识符 RFC 3513 声明,所有使用 001 到 111 之间的前缀的单播地址还必须使用从 EUI-64 地址(由 IEEE 定义的一个 64 位地址)派生 的一个 64 位接口标识符。EUI-64 地址可以是分配给网络适配器的地址,也可以是从 IEEE 802 地址派生的地址。 网络适配器的传统接口标识符使用一个叫做 IEEE 802 地址的 48 位地址。它包括一个 24 位的公司 ID(又称制造商 ID)和一个 24 位的扩 展 ID(又称板 ID)。唯一地分配给各个网络适配器制造商的公司 ID 和在装配时唯一地分配给各个网络适配器的板 ID 的组合,便构成了一个全局唯一的 48 位地址。此 48 位地址又叫做物理、硬件或 MAC 地址。 图 3-12 描绘了 48 位 IEEE 802 地址的结构。 图 3-12 48 位 IEEE 802 地址的结构 查看大图 IEEE 802 地址内定义的位有: • 统一/本地 (U/L) 第一个字节中的次低序位指示地址是统一管理的还是本地管理的。如果 U/L 位被设置为 0,则由 IEEE(通过指定的唯一公司 ID)管理该地址。如果 U/L 位被设置为 1,则该地址是本地管理的。网络管理员覆盖了制造商地址,并指定了一个不同的地址。U/L 位是由图 3-12 中的 u 指定的。
• 个体/组 (I/G) 第一个字节中的低序位指示该地址是个体地址(单播)还是组地址(多播)。当设置为 0 时,该地址是一个单播地址。当设置为 1 时,该地址是一个多播地 址。I/G 位是由图 3-12 中的 g 指定的。
对于典型的 802 网络适配器地址来说,U/L 和 I/G 位均被设置为 0,对应于统一管理的单播 MAC 地址。 IEEE EUI-64 地址代表一种新的网络接口编址标准。公司 ID 仍旧是 24 位长,但是扩展 ID 为 40 位,这大大增加了为网络适配器制造商提 供的地址空间。EUI-64 地址使用 U/L 和 I/G 位的方式与 IEEE 802 地址使用 U/L 和 I/G 位的方式相同。 图 3-13 描绘了 EUI-64 地址的结构。 图 3-13 EUI-64 地址的结构 查看大图 图 3-14 描绘了如何用 IEEE 802 地址创建 EUI-64 地址。您可以在 IEEE 802 地址中的公司 ID 和扩展 ID 之间插入 16 位 11111111 11111110 (0xFFFE)。 图 3-14 将 IEEE 802 地址转换成 EUI-64 地址 查看大图 要获得 IPv6 单播地址的 64 位接口标识符,必须对 EUI-64 地址中的 U/L 位取补码。(如果该位是 1,则将其设置为 0;如果该位是 0,则将其设置为 1。)图 3-15 描绘了对一个统一管理的单播 EUI-64 地址进行的转换。 图 3-15 将一个统一管理的单播 EUI-64 地址转换成 IPv6 接口标识符 查看大图 要从 IEEE 802 地址获得 IPv6 接口标识符,您必须先将 IEEE 802 地址映射为 EUI-64 地址,然后对 U/L 位取补码。图 3-16 描绘了对一个统一管理的单播 IEEE 802 地址进行的转换。 图 3-16 将一个统一管理的单播 IEEE 802 地址转换成 IPv6 接口标识符 查看大图 IEEE 802 地址转换示例 主机 A 的以太网 MAC 地址为 00-AA-00-3F-2A-1C。首先,通过在第三个和第四个字节之间插入 FF-FE 将其转换成 EUI-64 格 式,生成 00-AA-00-FF-FE-3F-2A-1C。然后对 U/L 位(第一个字节中的第七位)取补码。第一个字节的二进制形式是 00000000。对第七位取补码后,它变成了 00000010 (0x02)。将最终结果 02-AA-00-FF-FE-3F-2A-1C 转换成冒号十六 进制表示形式后,它就变成了接口标识符 2AA:FF:FE3F:2A1C。因此,对应于 MAC 地址为 00-AA-00-3F-2A-1C 的网络适配器的 链路本地地址是 FE80::2AA:FF:FE3F:2A1C。 对 U/L 位取补码时,如果地址是统一管理的,请将 0x2 加到第一个字节;如果地址是本地管理的,则从第一个字节减去 0x2。 临时地址接口标识符 在当今基于 IPv4 的 Internet 中,Internet 用户通常连接到某个 Internet 服务提供商 (ISP) 并使用点对点协议 (PPP) 和 Internet 协议控制协议 (IPCP) 来获得一个 IPv4 地址。用户每次连接时,可能会获得一个不同的 IPv4 地址,这使得难 以根据 IPv4 地址对拨号用户在 Internet 上的通信量进行跟踪。 对于基于 IPv6 的拨号连接来说,通过路由器发现和无状态地址自动配置建立连接后,用户被分配了一个 64 位前缀。如果接口标识符始终基于 EUI-64 地址(派生自静态 IEEE 802 地址),则无论前缀是什么,攻击者都能够识别出特定节点的通信量,这样就很容易跟踪特定的用户以及特定用户使用 Internet 的方式。为了解决这一问题和提供一定的隐蔽性,RFC 3041 描述了一种随机生成的、随时间更改的备用 IPv6 接口标识符。 初始接口标识符是通过使用随机数字生成的。对于不能为生成未来接口标识符值而存储任何历史信息的 IPv6 系统来说,每次 IPv6 协议初始化时都会生成一个 新的随机接口标识符。具有存储能力的 IPv6 系统会存储历史信息值,且 IPv6 协议初始化时通过以下过程创建一个不同的接口标识符: 1. 从存储中检索历史信息值,并根据适配器的 EUI-64 地址来附加该接口标识符。
2. 根据步骤 1 中的数量计算消息摘要 5 (MD5) 哈希算法。哈希会根据输入生成一个固定大小的数学结果。哈希是很容易计算的;但是,很难通过计算来从哈希结 果确定输入。
3. 将步骤 2 中计算出的 MD5 哈希的最后 64 位保存为历史信息值,用于下一次接口标识符计算。
4. 取出步骤 2 中计算出的 MD5 哈希的前 64 位,并将第七位设为 0。第七位对应于 U/L 位,该位设置为 0 时表示一个本地管理的 IPv6 接口 标识符。得到的结果就是 IPv6 接口标识符。
基于此随机接口标识符生成的 IPv6 地址称为临时地址。临时地址是为那些使用无状态地址自动配置的公用地址前缀生成的。 IPv6 多播地址 IPv6 多播地址将前八位固定为 1111 1111。这样,所有 IPv6 多播地址的前缀都是 FF00::/8。除了前八位以外,多播地址还包括其他一些 结构,用于标识标志、多播地址的作用域和多播组。图 3-17 描绘了 IPv6 多播地址的结构。 图 3-17 IPv6 多播地址的结构 查看大图 多播地址中的字段有: • 标志 表示多播地址上设置的标志。此字段的大小是 4 位。根据 RFC 3513,已定义的唯一标志是瞬态 (T) 标志,该标志使用“标志”字段的低序位。设置为 0 时,T 标志表示多播地址是 IANA 分配的永久分配(人们熟知的)多播地址。设置为 1 时,T 标志表示多播地址是一个暂时的(非永久分配的)多播地 址。
• 作用域 表示 IPv6 网络作用域,多播通信量必须在该作用域内传送。此字段的大小是 4 位。路由器使用多播路由协议提供的多播作用域和信息来确定是否可以转发多播通 信量。 RFC 3513 定义了“作用域”字段的值。“作用域”字段最常使用的值是 1(接口本地作用域)、2(链路本地作用域)和 5(站点本地作用域)。
• 组 ID 标识多播组;它在作用域内是唯一的。此字段的大小是 112 位。永久分配的组 ID 独立于作用域。暂时的组 ID 仅与特定的作用域相关。
为了标识接口本地和链路本地作用域的所有节点,定义了以下地址: • FF01::1(接口本地作用域的所有节点多播地址)
• FF02::1(链路本地作用域的所有节点多播地址)
为了标识接口本地、链路本地和站点本地作用域的所有路由器,定义了以下地址: • FF01::2(接口本地作用域的所有路由器多播地址)
• FF02::2(链路本地作用域的所有路由器多播地址)
• FF05::2(站点本地作用域的所有路由器多播地址)
若要获得当前的永久分配 IPv6 多播地址的列表,请访问 http://www.iana.org/assignments/ipv6-multicast-addresses。 IPv6 多播地址取代了各种形式的 IPv4 广播地址。IPv6 中的链路本地作用域的所有节点多播地址 (FF02::1) 取代了 IPv4 网络广播地 址(用于有类别环境中,该地址中的所有主机位都设置为 1)、子网广播地址(用于无类别环境中,该地址中的所有主机位都设置为 1)和有限广播地址 (255.255.255.255)。 被请求节点多播地址 被请求节点多播地址为使用高效的网络节点查询从已知的 IPv6 地址来解析链路层地址(称为链路层地址解析)提供了便利。在 IPv4 中,以太网和 802.11 无线网段上的 ARP 请求帧被发送到了广播地址 0xFF-FF-FF-FF-FF-FF。此帧会干扰网段上的所有节点,包括那些没有运行 IPv4 的节点。IPv6 使用“邻居请求”消息来执行链路层地址解析。但是,如果将本地链路作用域的所有节点多播地址用作“邻居请求”消息目标,则会干扰本地 链路上的所有 IPv6 节点,因此使用了被请求节点多播地址。被请求节点多播地址由前缀 FF02::1:FF00:0/104 和单播 IPv6 地址的最后 24 位构成。图 3-18 显示了单播 IPv6 地址到其对应的被请求节点多播地址的映射。 图 3-18 创建被请求节点多播地址 查看大图 例如,节点 A 被分配了链路本地地址 FE80::2AA:FF:FE28:9C5A,它侦听对应的被请求节点多播地址 FF02::1:FF28:9C5A。 (粗体字突出显示了最后六个十六进制数字是一致的。)本地链路上的节点 B 必须将节点 A 的链路本地地址 FE80::2AA:FF:FE28:9C5A 解 析为其对应的链路层地址。节点 B 向被请求节点多播地址 FF02::1:FF28:9C5A 发送一条“邻居请求”消息。因为节点 A 正在侦听该多播地 址,所以它将处理该“邻居请求”消息并回复一条单播“邻居公布”消息,这就完成了地址解析过程。 通过使用被请求节点多播地址,链路层地址解析(链路上的常见事件)就不会影响到所有的网络节点了。因此,在地址解析过程中,只有很少的节点受干扰。实际上,链路层 地址、IPv6 接口 ID 和被请求节点地址之间的关系允许将被请求节点地址用作伪单播地址以获得非常高效的地址解析。 IPv6 任意广播地址 一个任意广播地址会被分配给多个接口。路由结构转发定址到任意广播地址的数据包,使它们可以到达被分配了任意广播地址的最近接口。为便于传送,路由体系结构必须知 道被分配了任意广播地址的接口及其用路由跃点数表示的“距离”。目前,任意广播地址仅用作目标地址。任意广播地址是从单播地址空间分配的,它们的作用域与从其分配 任意广播地址的单播地址类型的作用域是一致的。 子网-路由器任意广播地址是从给定接口的子网前缀构造的。要构造子网-路由器任意广播地址,请将 64 位子网前缀中的位固定为合适的值,并将地址中的“接口 ID”部分的位设置为 0。这样,一个子网的子网-路由器任意广播地址就分配给了连接到该子网的所有路由器接口。子网-路由器任意广播地址可用于与连接到远程子网 的多个路由器之一进行通信(例如获取该子网的通信量方面的网络管理统计信息)。 主机的 IPv6 地址 具有单一网络适配器的 IPv4 主机通常只有一个分配给该适配器的 IPv4 地址。但是,一台 IPv6 主机通常有多个 IPv6 地址 — 即使只有一个 接口。IPv6 主机被分配了以下单播地址: • 每个接口的链路本地地址。
• 各个接口的单播地址(可以是一个站点本地地址和一个或多个全局单播地址)。
• 环回接口的环回地址 (::1)。
IPv6 主机通常至少具有两个用于接收数据包的地址:一个是用于本地链路通信量的链路本地地址,一个是可路由的站点本地地址或全局地址。 此外,各个主机还侦听以下多播地址的通信量: • 接口本地作用域的所有节点多播地址 (FF01::1)。
• 链路本地作用域的所有节点多播地址 (FF02::1)。
• 各个接口上的各个单播地址的被请求节点地址。
• 各个接口上已加入的组的多播地址。
路由器的 IPv6 地址 IPv6 路由器被分配了以下单播和任意广播地址: • 每个接口的链路本地地址。
• 各个接口的单播地址(可以是一个站点本地地址和一个或多个全局单播地址)。
• 一个子网-路由器任意广播地址。
• 其他任意广播地址(可选)。
• 环回接口的环回地址 (::1)。
此外,各个路由器还侦听以下多播地址的通信量: • 接口本地作用域的所有节点多播地址 (FF01::1)。
• 接口本地作用域的所有路由器多播地址 (FF01::2)。
• 链路本地作用域的所有节点多播地址 (FF02::1)。
• 链路本地作用域的所有路由器多播地址 (FF02::2)。
• 站点本地作用域的所有路由器多播地址 (FF05::2)。
• 各个接口上的各个单播地址的被请求节点地址。
• 各个接口上已加入的组的多播地址。
返回页首 比较 IPv4 和 IPv6 编址 表 3-5 列出了 IPv4 地址和编址概念及对应的 IPv6 地址和编址概念。 IPv4 地址 IPv6 地址
Internet 地址类别 不适用于 IPv6
IPv4 多播地址 (224.0.0.0/4) IPv6 多播地址 (FF00::/8)
广播地址:网络广播、子网广播、定向到所有子网的广播、有限广播 不适用于 IPv6
未指定地址是 0.0.0.0 未指定地址是 ::
环回地址是 127.0.0.1 环回地址是 ::1
公用 IPv4 地址 全局单播地址
专用 IPv4 地址(10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16) 站点本地地址 (FEC0::/10)
APIPA 地址 (169.254.0.0/16) 链路本地地址 (FE80::/64)
地址语法:点分十进制表示形式 地址语法:删除前导零和使用零压缩的冒号十六进制格式。
地址前缀语法:前缀长度或点分十进制(子网掩码)表示形式 地址前缀语法:仅使用前缀长度表示形式
表 3-5 比较 IPv4 和 IPv6 编址 返回页首 本章小结 本章主要包括以下内容: • IPv4 地址以点分十进制格式表示。IPv4 地址前缀可以表示为起始地址的点分十进制表示形式加上地址前缀长度,前缀长度可以用一个整数来指示,也可以用一个 点分十进制数(又称子网掩码)来指示。
• IPv4 使用单播地址将数据包从一个源传送到一个目标,使用多播地址将数据包从一个源传送到多个目标,使用广播地址将数据包从一个源传送到子网上的所有目标。
• 对于 IPv4,您可以使用公用单播地址(如果已由 ICANN 或某个 ISP 分配)或专用地址(10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16)。Windows 的 TCP/IP 组件使用 APIPA 地址自动在单个子网上为主机配置 169.254.0.0/16 地 址前缀中的地址。
• IPv6 地址以冒号十六进制格式表示,此表示形式删除了前导零并使用双冒号来压缩一组连续的纯零块。IPv6 地址前缀可以表示为起始地址的冒号十六进制形式加 上前缀长度。
• IPv6 使用单播地址、多播地址和任意广播地址将数据包从一个源传送到多个目标之一。
• 对于单播 IPv6 地址,可以使用全局地址(如果已由 IANA 或某个 ISP 分配)、站点本地地址 (FEC0::/10) 或链路本地地址 (FE80::/64)。链路本地地址要求指定一个区域 ID 来标识目标的链路。如果使用了多个站点,则站点本地地址要求指定一个区域 ID 来标识目标的站 点。
• 通常情况下,IPv6 接口标识符是从 IEEE 802 地址或 IEEE EUI-64 地址派生的。
• 被请求节点多播地址是一个特殊的多播地址,用于在子网上进行高效的链路层地址解析。
返回页首 本章术语表 地址 – Internet 层分配给一个接口或一组接口的标识符,用于标识 IP 数据包的源或目标。 地址类别 – 在 Internet 上使用的预定义的 IPv4 地址分组。地址类别定义了特定大小的网络,并确定了可以为 IPv4 地址中的第一个八位位组 分配的数字的范围。无类别域间路由 (CIDR) 已使有类别 IPv4 编址显得落后了。 地址前缀 – 通过将高序固定位设置为定义值、将低序可变位设置为 0 定义的一个地址范围。地址前缀通常用来表达所允许的地址的范围、分配给子网的网络标识符和 路由。在 IPv4 中,您可以使用前缀长度或者点分十进制(子网掩码)表示形式来表示地址前缀。在IPv6 中,您可以使用前缀长度表示形式来表示地址前缀。 任意广播地址 – 从单播地址空间中分配出来的一个地址,可标识多种接口,可用来将数据包从一个源传送到多个目标之一。使用适当的路由拓扑,定址到任意广播地址的 数据包将被传送到被分配了该地址的最近接口。 APIPA – 请参见自动专用 IP 地址 (APIPA)。 自动专用 IP 地址 (APIPA) – Windows Server 2003 和 Windows XP 中的 TCP/IP 组件的一种功能。如果 TCP/IP 组件被配置为自动配置,但没有可用的 DHCP 服务器,APIPA 便会让计算机自动配置范围 169.254.0.0/16 中的 IPv4 地址和子网掩码。 CIDR – 请参见无类别域间路由 (CIDR)。 A 类 IPv4 地址 – 1.0.0.1 至 127.255.255.254 范围内的一个单播 IPv4 地址。第一个八位位组表示网络 ID,后三个八 位位组表示主机 ID。无类别域间路由 (CIDR) 使有类别 IPv4 编址显得落后了。 B 类 IPv4 地址 – 128.0.0.1 至 191.255.255.254 范围内的一个单播 IPv4 地址。前两个八位位组表示网络 ID,后两 个八位位组表示主机 ID。无类别域间路由 (CIDR) 使有类别 IPv4 编址显得落后了。 C 类 IPv4 地址 – 192.0.0.1 至 223,255,255,254 范围内的一个单播 IPv4 地址。前三个八位位组表示网络 ID,最后 一个八位位组表示主机 ID。无类别域间路由 (CIDR) 使有类别 IPv4 编址显得落后了。 无类别域间路由 (CIDR) – 在现代的 Internet 上聚合路由和分配 IPv4 地址的一种技术。CIDR 是以一个地址前缀加一个前缀长度的形式 表示地址前缀的,而不是以 CIDR 所取代的地址类别表示的。 冒号十六进制表示形式 – IPv6 地址的一种表示形式。128 位 IPv6 地址被分成八个 16 位的块。各个块都是以十六进制数表示的,相邻块之间用半 角冒号分隔开。各个块中的前导零被省略了。3FFE:FFFF:2A1D:48C:2AA:3CFF:FE21:81F9 就是一个采用冒号十六进制表示形式的 IPv6 单播地址的示例。 点分十进制表示形式 – 最常用的 IPv4 地址表示形式。32 位 IPv4 地址被分成四个 8 位的块。各个块都是以十进制数表示的,相邻块之间用半角句 号分隔开。131.107.199.45 就是一个采用点分十进制表示形式的 IPv4 单播地址的示例。 双冒号 – 指将 IPv6 地址中的一连串零块压缩成“::”的做法。例如,多播地址 FF02:0:0:0:0:0:0:2 可表示为 FF02::2。 EUI – 请参见“扩展唯一标识符”。 EUI-64 地址 – 用作 IPv6 接口标识符基础的一个 64 位的链路层地址。 扩展唯一标识符 – 电气和电子工程师协会 (IEEE) 定义的一个链路层地址。 全局单播地址 – 在 Internet 的 IPv6 部分可全局路由和访问的 IPv6 单播地址。IPv6 全局地址相当于公用 IPv4 地址。 IEEE – 电气和电子工程师协会。 IEEE 802 地址 – 由 IEEE 定义的一个 48 位的链路层地址。以太网和令牌环网适配器使用 IEEE 802 地址。 IEEE EUI-64 地址 – 请参见 EUI-64 地址。 非法地址 – 与 ICANN 已分配给另一个组织的公用 IPv4 地址相冲突的重复的地址。 链路本地地址 – 本地使用的前缀为 FE80::/64、作用域为本地链路的地址。节点使用链路本地地址与同一链路中邻近的节点进行通信。链路本地地址相当于自 动专用 IP 地址 (APIPA) 中的 IPv4 地址。 环回地址 – 对于 IPv4 来说,就是指地址 127.0.0.1。对于 IPv6 来说,就是指地址 0:0:0:0:0:0:0:1(或 ::1)。节点 使用环回地址向自己发送数据包。 多播地址 – 可标识零个或多个接口的地址,用于将数据包从一个源传送到多个目标。使用适当的多播路由拓扑,定址到多播地址的数据包将被传送到由该地址标识的所有 接口。 前缀长度表示形式 – 以 StartingAddress/PrefixLength 表示地址前缀的做法,其中 PrefixLength 是指地址中固定的 高序位的位数。 专用地址 – 供组织用来在下列地址前缀之一中进行专用 Intranet 寻址的 IPv4 地 址:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。 公用地址 – 由 ICANN 分配的 IPv4 地址,这类地址在 IPv4 Internet 上的全局唯一性和可访问性是有保障的。 站点本地地址 – 本地使用的由前缀 FEC0::/10 标识的 IPv6 地址。站点本地地址的作用域是一个站点。站点本地地址相当于 IPv4 专用地址空 间。站点本地地址是不可从其他站点访问的,而且路由器也决不能将站点本地通信量转发到站点外。 被请求节点多播地址 – 节点用来解析地址的一个 IPv6 多播地址。被请求节点多播地址由前缀 FF02::1:FF00:0/104 和单播 IPv6 地 址的最后 24 位构成。被请求节点多播地址可以充当伪单播地址以便在 IPv6 链路上高效解析地址。 子网掩码 – 用点分十进制表示形式表示的 IPv4 地址范围的地址前缀长度。例如,地址前缀 131.107.0.0/16 的子网掩码表示形式为 131.107.0.0, 255.255.0.0。 单播地址 – 仅标识单个接口的、用于将数据包从一个源传送到单个目标的地址。使用适当的单播路由拓扑,定址到单播地址的数据包将被传送到单个接口。 未指定地址 – 对于 IPv4 来说,就是指地址 0.0.0.0。对 IPv6 来说,就是指地址 0:0:0:0:0:0:0:0(或 ::)。未指定地址 表示地址缺失。 区域 ID – 用来指定 IPv6 通信量目标区域的一个整数。在 Ping、Tracert 和 Pathping 命令中,指定一个区域 ID 的语法是 IPv6Address%ZoneID。通常,链路本地地址的 ZoneID 的值和接口索引是相等的。对于站点本地地址,ZoneID 等于站点数目。如果目标 为一个全局地址,或者有多个站点未被使用,则不需要 ZoneID 参数。
Categories