【TCP/IP 笔记】IPv6-01 | IPv6 地址

参考 http://tcpipguide.com

文章目录

  • IPv6 地址
    • IPv6 地址类型
    • IPv6 地址空间大小
    • IPv6 地址表示
      • 压缩书写
    • IPv6 地址分配
    • IPv6 全球单播地址格式
    • IPv6 接口标识符与物理地址间的映射
    • IPv6 特殊地址
      • 保留地址 (Reserved Addresses)
      • 私人地址 (Private Addresses)
        • 链路本地地址 (Link-Local Unicast Addresses)
        • 站点本地地址 (Site-Local Unicast Addresses)
      • 环回地址 (Loopback Address)
      • 未指定地址 (Unspecified Address)
    • 嵌入式 IPv6/IPv4 地址
    • IPv6 组播 (Multicast)
      • IPv6 组播地址格式
      • 组播范围 (Multicast Scopes)
      • 众所周知的组播地址
      • 被请求节点组播地址 (Solicited-Node Multicast Addresses)
    • IPv6 任播 (Anycast)

IPv6 地址

IPv6 地址类型

  • 单播地址 (Unicast Addresses):同 IPv4 中的单播地址,一个接口对应一个。
  • 组播地址 (Multicast Addresses):用于表示一组 IP 设备的地址,一个发往组播地址的信息将发给它所代表的组中的所有设备。IPv6 中为组播提供更多的支持。
  • 任播地址 (Anycast Addresses):将信息发送到一组设备中的任意一个,通常会发给这组设备中最近的一个。一个常见的用途:客户端有两个或多个服务器提供服务,而客户端不介意哪个服务器提供服务,重点是哪个服务器更容易提供服务,这时候就可以用任播。

在 IPv6 中广播被移除了。

IPv6 地址空间大小

IPv4 存在的一个很大的问题便是地址空间太小了,即使后来我们用了如 NAT 的方法去解决他,但用 NAT 也使得一些功能被限制了,不管用什么方法也是无法解决 IPv4 地址空间太小,而人们的需求日益增加的基本问题。最简单有效的方法就是在下一代中扩大地址空间。

用一个字来概括 IPv6 的地址空间就是大!非常大!

IPv4 的地址长度为 32bits,所以最多有 4,294,967,296 个地址,而 IPv6 的地址长度达到了惊人的 128bits,最多可以有 340,282,366,920,938,463,463,374,607,431,768,211,456 个地址!

IPv6 地址表示

128bits 的长度使得 IPv6 地址写起来很长,即使用十进制表示也很长,所以一般用十六进制来表示 IPv6 地址。

【TCP/IP 笔记】IPv6-01 | IPv6 地址_第1张图片

压缩书写

  • Leading-Zero Suppressed:将全为 0 的用一个 0 表示。
  • Zero-Compressed:将连续的 0 用双冒号 ( :: ) 代替,仅可出现一次,如果出现多次,我们就无法确定此处代替了多少个 0。

Mixed Notation 用于表示最后 32bits 为嵌入式 IPv4 地址的 IPv6 地址,前 96bits 用冒号六进制表示,后 32bits 用 IPv4 的点十进制表示。

IPv6 地址分配

IPv6 地址通过开始的若干 bits 来指示地址类型 (用于指示的位数称为 FP, format prefix),这和 IPv4 分类寻址中使用前 1~4 bits 来区分的方式很像,但 IPv6 中的 FP 范围为 3~10。

IPv6 地址分配计划:

开头 配给
0000 0000 未分配(包括环回地址等)
0000 0001 未分配
0000 001 为 NSAP 地址分配保留
0000 01 未分配
0000 1 未分配
0001 未分配
001 全球单播地址
010 未分配
011 未分配
100 未分配
101 未分配
110 未分配
1110 未分配
1111 0 未分配
1111 10 未分配
1111 110 未分配
1111 1110 0 未分配
1111 1110 10 链路本地地址 (Link-Local Unicast Addresses)
1111 1110 11 站点本地地址 (Site-Local Unicast Addresses)
1111 1111 多播地址

IPv6 全球单播地址格式

在这里插入图片描述

字段名 长度 (bits) 描述
Prefix 48 Global Routing Prefix:含网络号用于路由,前三位为 001 表示为单播地址。
Subnet ID 16 Subnet Identifier:标识站点内部的子网。
Interface ID 64 Interface ID:一个接口的唯一标识。

IPv6 接口标识符与物理地址间的映射

从上面可以发现单播地址中最后 64bits 用作接口标识符,这么长的接口标识符当然不能随便浪费,因为几乎所有设备接口的物理地址长度都为 64bits 或更少,所以可以基于接口的物理地址来指定这个接口标识符,而不是用没有意义的数字作为接口标识符,这样做的好处有:使得网络更容易管理,我们不需要记录接口标识符和设备的对应关系,可以通过 MAC 地址得知 IP 地址,也可以通过 IP 地址得知其 MAC 地址。

从数据链路层地址到 IP 接口标识符的实际映射取决与特定的算法。当然,同一网络下所用的映射算法是相同的。

  • IEEE 802 MAC 地址:MAC 地址分为两部分,前 24bits 为制造商 ID,后 24bits 为底板 ID (装配时唯一指派给网络适配器)。
  • EUI-64:64-bit extended unique identifier。将 IEEE 802 MAC 地址从 24bits 扩充到 40bits。

从 EUI-64 地址映射到 IP 接口标识很简单,只要将 EUI-64 的第七位从 0 改成 1 即可。

从 IEEE 802 MAC 地址映射到 IP 接口标识要先转换成 EUI-64 再将第七位改为 1。怎么将 IEEE 802 MAC 地址改成 EUI-64 呢?在 IEEE 802 MAC 地址的制造商 ID 和底板 ID 中间插入 1111 1111 1111 1110 (“FFFE” in hexadecimal) 即可。

IPv6 特殊地址

保留地址 (Reserved Addresses)

不像 IPv4 中有很多小的保留地址块分布在整个地址空间中,IPv6 的保留地址在整个地址空间的“最前面”:开头为 “0000 0000” 的地址。之后要说的特殊地址有些就来自与这里。

私人地址 (Private Addresses)

私人地址的开头为 “1111 1110 1”,有两种类型:链路本地地址 (Link-Local Unicast Addresses) 和站点本地地址 (Site-Local Unicast Addresses) 。

链路本地地址 (Link-Local Unicast Addresses)

这个地址的作用范围比站点本地地址小,它只在特定的物理网络中。路由器不会使用链路本地地址传输数据报。它可以用于地址配置或 ND 操作如地址识别 (address resolution) 和邻居发现 (neighbor discovery)。地址前缀为 “1111 1110 10”

站点本地地址 (Site-Local Unicast Addresses)

这个地址可以在整个站点或组织范围内使用,路由器将在站内使用站点本地地址传输数据报,不会传到公共网络。地址前缀为 “1111 1110 11”。

环回地址 (Loopback Address)

和 IPv4 不同,IPv6 只有一个环回地址不再是一个地址块。地址为 0:0:0:0:0:0:0:1 (缩写 ::1)。

未指定地址 (Unspecified Address)

在 IPv4 中全为零的地址有特殊的含义:它指主机自己,在主机不知道自己的地址时使用。在 IPv6 中这一概念被正式化,全为零的地址称为未指定地址 (0:0:0:0:0:0:0:0,缩写为 “::” )。往往出现在设备配置自己的 IP 时询问的数据报的源地址。

嵌入式 IPv6/IPv4 地址

因为不可能突然全球都使用 IPv6,需要一段时间来从 IPv4 过渡到 IPv6,这段时间里,IPv4 和 IPv6 是共存的。所以我们需要一个方法使得 IPv6 可以向下兼容 IPv4,于是就开发出了一种方案,允许 IPv4 地址嵌入到 IPv6 地址中,使得 IPv6 设备识别 IPv4 设备实现通信。因为 IPv6 的地址空间比 IPv4 的地址空间大得多,所以将 IPv4 嵌入进 IPv6 地址很容易实现。这种嵌入式地址是上面提到的保留地址块中的一部分,所以以 “0000 0000” 开头。有两种不同格式的嵌入式地址,两种地址的前 80bits 都为 0,并将 IPv4 嵌入进最后 32bits。不同之处在于中间剩余的 16bits。

  • IPv4 兼容的 IPv6 地址 (IPv4-Compatible IPv6 Addresses):这种特殊地址分配给双栈设备(既可以使用 IPv4 也可以使用 IPv6),中间的 16bits 全为 0。
  • IPv4 映射的 IPv6 地址 (IPv4-Mapped IPv6 Addresses):这种地址分配给只支持 IPv4 的设备,中间 16bits 全为 1。

IPv6 组播 (Multicast)

组播允许一个设备发送数据报给一组接收者。组播地址开头为 “1111 1111” 。

IPv6 组播地址格式

【TCP/IP 笔记】IPv6-01 | IPv6 地址_第2张图片

字段名 长度 (bits) 描述
(Indicator) 8 前 8bits 总为 "1111 1111" 表示这个地址为多播地址。
Flags 4 表明这个多播地址的一些特性。在现阶段前 3bits 未使用设为 0,第四位为 "T"(Transient) Flag,如果值为 0 则表明此多播地址永久分配,即众所周知的地址。如果设为 1 则表明此多播地址为临时地址,不是永久分配的。
Scope ID 4 这 4bits 用于定义此多播地址的作用范围,16 个不同的值,从 0 到 15。
Scope ID Value Multicast Address Scope
0 Reserved
1 Node-Local Scope
2 Link-Local Scope
5 Site-Local Scope
8 Organization-Local Scope
14 Global Scope
15 Reserved
Group ID 112 定义在每个不同范围级别的特殊组号

组播范围 (Multicast Scopes)

【TCP/IP 笔记】IPv6-01 | IPv6 地址_第3张图片

众所周知的组播地址

如下表所示,其中地址中的 “x” 为组播地址的 scope ID 字段。

组播地址模型 Scope ID 可用值 名称 描述
FF0x::0 0 ~ 15 Reserved Group ID 全为 0 的组播地址
FF0x::1 1, 2 All Nodes 当 Group ID 为 1 时,此地址为 scope ID 范围内所有节点的组播地址
FF0x::2 1, 2, 5 All Routers 当 Group ID 为 2 时,此地址为 scope ID 范围内所有路由器的组播地址

被请求节点组播地址 (Solicited-Node Multicast Addresses)

除了常规的组播地址以外,每个单播地址都有一个特殊的组播地址,叫做被请求节点组播地址。该地址是通过设备的单播地址特殊映射得到的。当同一网络的其他设备需要访问此设备时可以使用。用于邻居发现协议 (Neighbor Discovery, ND) 以提供比 IPv4 中 ARP 更高效的地址解析。

所有被请求节点组播地址的 T flag 值为 0,scope ID 为 2。Group ID 中前 80bits 为 0:0:0:0:1,接着 8bits 全为 1 (FF),最后 24bits 为其单播地址的最后 24bits。

【TCP/IP 笔记】IPv6-01 | IPv6 地址_第4张图片

IPv6 任播 (Anycast)

任播是出现在 IPv6 的一种新的 IP 地址。我们可以认为是一种介于单播和组播之间的地址。单播是将数据报发送到一个接口;组播是将数据报发送到一个组的所有成员;而任播是将数据报发送到一个组的随便一个成员。实际上是发送到组里最容易到达的成员,即最近的那个成员。

你可能感兴趣的:(Web)