IPv6 地址与从 IPv4 向 IPv6 过渡

本页讲 IPv6 地址的三种类型、写法和分类,以及从 IPv4 过渡到 IPv6 的两种策略(2023 年考过)。写法题只有两条规则:每组开头的 0 可以省、结尾的 0 不能省;双冒号在一个地址里只能出现一次。

机制

4.3.3 IPv6 地址的类型

IPv6 数据报的目的地址有以下三种基本类型:

  1. 单播:传统的点对点通信。
  2. 多播:一点对多点的通信,数据报发送到一组计算机中的每一台。
  3. 任播:这是 IPv6 增加的一种类型。任播的终点是一组计算机,但数据报只交付其中的一台计算机,通常是距离最近的一台计算机。

冒号十六进制记法

IPv4 地址通常使用点分十进制表示法,若 IPv6 也使用这种表示法,则地址书写起来将相当长。IPv6 标准使用冒号十六进制记法,即把地址中的每 4 位用一个十六进制数表示,并用冒号分隔每 16 位,如 4BF5:AA12:0216:FEBC:BA5F:039A:BE9A:2170。

  • 当 16 位域的开头有一些 0 时,可以采用一种缩写表示法,但在域中必须至少有一个数字。例如,可以把地址 4BF5:0000:0000:0000:BA5F:039A:000A:2176 缩写为 4BF5:0:0:0:BA5F:39A:A:2176。
  • 当有相继的 0 值域时,还可以进一步缩写,这些域可用双冒号缩写(::),称为零压缩。当然,双冒号表示法在一个地址中仅能出现一次,因为 0 值域的个数没有编码,需要从指定的总的域的个数来推算。这样一来,前述地址可被更紧凑地书写成 4BF5::BA5F:39A:A:2176。

IPv6 地址的分类

地址类型二进制前缀说明
未指明地址00…0(128 位),记为 ::/128不能用作目的地址,只能用于还未配置 IPv6 地址的主机作为源地址
环回地址00…01(128 位),记为 ::1/128作用与 IPv4 的环回地址相同,但 IPv6 的环回地址仅此一个
多播地址11111111(8 位),记为 FF00::/8作用和 IPv4 的一样,占 IPv6 地址空间的 1/256
本地链路单播地址1111111010(10 位),记为 FE80::/10作用类似于 IPv4 的私有 IP 地址
全球单播地址除上述四种外的其他所有 IPv6 地址用得最多的地址

未指明地址和环回地址分别对应 IPv4 的 0.0.0.0 和 127.0.0.1(4.2.2 特殊地址)。

IPv6 全球单播地址采用三级结构:

第一级第二级第三级
全球路由选择前缀,48 位子网标识符,16 位接口标识符,64 位
用于互联网中的路由选择,相当于 IPv4 分类地址中的网络号用于各机构构建自己的子网用于指明主机或路由器的单个网络接口,相当于 IPv4 分类地址中的主机号

与 IPv4 不同,IPv6 地址的接口标识符有 64 位之多,足以对各种接口的硬件地址直接进行编码。这样,IPv6 就可直接从 128 位地址的最后 64 位中直接提取出相应的硬件地址,而不需要使用地址解析协议(ARP)进行地址解析。

4.3.4 从 IPv4 向 IPv6 过渡

从 IPv4 向 IPv6 过渡只能采用逐步演进的办法,同时还必须使新安装的 IPv6 系统能够向后兼容:IPv6 系统必须能够接收和转发 IPv4 分组,并且能够为 IPv4 分组选择路由。从 IPv4 向 IPv6 过渡可以采用下列两种策略(IPv4 向 IPv6 过渡的策略 2023 年考过):

  1. 双协议栈:指在一台设备上同时装有 IPv4 和 IPv6 两个协议栈,分别配置了一个 IPv4 地址和一个 IPv6 地址,因此这台设备既能和 IPv4 网络通信,又能和 IPv6 网络通信。双协议栈主机在与 IPv6 主机通信时采用 IPv6 地址,而在与 IPv4 主机通信时采用 IPv4 地址。双协议栈主机使用应用层的域名系统(DNS)获知目的主机采用的是哪种地址:若 DNS 返回的是 IPv4 地址,则双协议栈的源主机就使用 IPv4 地址;若 DNS 返回的是 IPv6 地址,则双协议栈的源主机就使用 IPv6 地址。
  2. 隧道技术:指在 IPv6 数据报要进入 IPv4 网络时,把整个 IPv6 数据报封装成 IPv4 数据报的数据部分,使原来的 IPv6 数据报就好像在 IPv4 网络的隧道中传输。当 IPv4 数据报离开 IPv4 网络时,再将其数据部分交给主机的 IPv6 协议。
flowchart LR
  A["IPv6 主机"] -- "IPv6 数据报" --> B["双协议栈路由器<br/>(隧道入口)"]
  B -- "IPv4 数据报<br/>(数据部分 = 整个 IPv6 数据报)" --> C["IPv4 网络"]
  C --> D["双协议栈路由器<br/>(隧道出口)"]
  D -- "IPv6 数据报" --> E["IPv6 主机"]

计算模板

零压缩地址还原

  1. 数出已写出的组数 ,双冒号处补 个 0000。
  2. 每组不足 4 位的,在开头补 0。

例:8::D0:123:CDEF:89A 写出了 5 组,双冒号处补 3 组,得 8:0000:0000:0000:D0:123:CDEF:89A;每组在开头补足 4 位,得 0008:0000:0000:0000:00D0:0123:CDEF:089A(王道 4.3.5 第 4 题)。在结尾补 0(如 8000、89A0)是常见错误。

零压缩地址书写

先把每组开头的 0 去掉,再选一段连续的全 0 组换成 ::。有多段不相邻的全 0 组时,只能压缩其中一段,其余写成 0。例如 1A22:120D:0000:0000:72A2:0000:0000:00C0 可写成 1A22::120D::72A2::00C0 是错的(出现了多个 ::),正确写法之一是 1A22:120D::72A2:0:0:C0。

边界

任播只交付一台,多播交付每一台。 两者的终点都是一组计算机。

双冒号只能出现一次。 出现两次就无法确定每一段各代表几个 0 组。

隧道技术是”IPv6 装进 IPv4”,不是反过来。 被封装的是整个 IPv6 数据报,放在 IPv4 数据报的数据部分(2023)。

双协议栈主机用 DNS 决定用哪种地址。 这是应用层协议参与网络层选择的一个例子。

口径差异:本地链路地址不是 IPv6 的"私有地址",IPv6 也并非完全不需要地址解析

教材口径:本地链路单播地址(FE80::/10)的作用类似于 IPv4 的私有 IP 地址;接口标识符直接编码硬件地址,所以不需要 ARP。

标准口径:本地链路地址只在一条链路上有效,路由器根本不转发,性质更接近 IPv4 的 169.254.0.0/16;与 IPv4 私有地址对应的是唯一本地地址(FC00::/7),可以在机构内部路由。接口标识符如今常为随机生成(出于隐私考虑),无法从中读出 MAC 地址,IPv6 用 ICMPv6 的邻居发现协议完成地址解析,功能上取代了 ARP。另外,IPv6 没有广播地址,需要”通知所有人”的场合用多播。

考试按教材口径作答。

对照速查

说法对错
IPv6 地址长 128 位,用冒号十六进制记法表示✅
每组结尾的 0 也可以省略❌(只能省开头的 0)
双冒号可以在一个地址中出现多次❌
任播数据报交付给组内的每一台计算机❌(只交付一台,通常最近的)
::/128 可以用作目的地址❌(只能作未配置地址主机的源地址)
IPv6 的环回地址只有一个✅
全球单播地址的接口标识符占 64 位✅
隧道技术把 IPv4 数据报封装在 IPv6 数据报中❌(反了)
IPv4 向 IPv6 过渡可以采用双协议栈和隧道技术✅(2023)

考点

  • 三种地址:单播、多播、任播
  • 冒号十六进制记法;开头 0 可省,双冒号只用一次
  • 五类地址:未指明 ::/128、环回 ::1/128、多播 FF00::/8、本地链路 FE80::/10、全球单播
  • 全球单播 48 + 16 + 64
  • 过渡:双协议栈(DNS 决定)+ 隧道技术(IPv6 装进 IPv4)(2023)

链接