Internet 协议版本 6 (IPv6) 概述

Internet 协议版本 6 (IPv6) 是 Internet 的网络层的标准协议套件。 IPv6 旨在解决当前版本的 Internet 协议套件(称作 IPv4)存在的许多问题,包括地址消耗、安全性、自动配置和扩展性等问题。 IPv6 扩展了 Internet 的功能以启用新型应用程序,包括对等和移动应用程序。 以下是当前 IPv4 协议的主要问题:

  • 地址空间快速消耗。

    这导致使用网络地址转换器 (NAT) 将多个专用地址映射到一个公共 IP 地址。 此机制造成的主要问题是处理开销和端对端连接性的缺失。

  • 层次结构支持缺失。

    因其固有的预定义类组织,IPv4 缺乏真正的层次结构支持。 无法通过真正地映射网络拓扑的方式构成 IP 地址。 由于存在这种重大的设计缺陷,所以需要通过大型路由表将 IPv4 数据包传送至 Internet 上的任何位置。

  • 复杂的网络配置。

    对于 IPv4,地址必须以静态方式分配,或使用配置协议,如 DHCP。 在理想情况下,主机不需要依靠 DHCP 基础结构的管理。 主机可基于其所在的网络段自行配置。

  • 缺乏内置身份验证和保密性。

    IPv4 不需要针对提供交换数据的身份验证或加密的机制的支持。 IPv6 在这一方面作出更改。 Internet 协议安全 (IPSec)是 IPv6 支持要求。

新协议套件必须满足以下基本需求:

  • 低开销的大规模路由和寻址。
  • 针对各种连接情况进行自动配置。
  • 内置身份验证和保密性。

IPv6 寻址

使用 IPv6 时,地址长度为 128 位。 地址空间如此之大的一个原因是将可用地址细分为可以反映 Internet 拓扑的路由域的层次结构。 另一个原因是映射将设备连接到网络的网络适配器(或接口)的地址。 IPv6 有可以解析最低级别的地址(即网络接口级别的地址)的固有功能以及自动配置功能。

文本表示形式

以下是用于将 IPv6 地址表示为文本字符串的三种常规形式:

  • 冒号十六进制形式:

    这是首选形式 n:n:n:n:n:n:n:n。 每个 n 表示地址的 8 个 16 位元素之一的十六进制值。 例如:3FFE:FFFF:7654:FEDA:1245:BA98:3210:4562

  • 压缩形式:

    由于地址长度,有些地址通常包含一长串的零。 若要简化这些地址的编写,可使用压缩形式,其中 0 块的单个相邻的序列由双冒号 (::) 表示。 该符号在地址中只能出现一次。 例如,多播地址 FFED:0:0:0:0:BA98:3210:4562 的压缩形式是 FFED::BA98:3210:4562。 单播地址 3FFE:FFFF:0:0:8:800:20C4:0 的压缩形式是 3FFE:FFFF::8:800:20C4:0。 环回地址 0:0:0:0:0:0:0:1 的压缩形式是 ::1。 未指定地址 0:0:0:0:0:0:0:0 的压缩形式是 ::

  • 混合形式:

    此形式合并了 IPv4 和 IPv6 地址。 在这种情况下,地址格式为 n:n:n:n:n:n:d.d.d.d,其中每个 n 表示六个 IPv6 高序位 16 位地址元素的十六进制值,每个 d 表示一个 IPv4 地址的十进制值。

地址类型

地址中的前导位定义了特定 IPv6 地址类型。 包含这些前导位的可变长度字段称为格式前缀 (FP)。

IPv6 的单播地址分为两个部分。 第一部分包含地址前缀,第二部分包含接口标识符。 表示 IPv6 地址/前缀组合的简洁方法如下:ipv6-address/prefix-length。

以下是具有 64 位前缀的地址示例。

3FFE:FFFF:0:CD30:0:0:0:0/64

本示例中的前缀是 3FFE:FFFF:0:CD30。 此地址也可以采用压缩形式编写为 3FFE:FFFF:0:CD30::/64

IPv6 定义以下地址类型:

  • 单播地址:

    单个接口的标识符。 发送到此地址的数据包将会发送到已标识接口。 可通过高序位八进制数的值,区分单播地址和多播地址。 多播地址的高序位八进制数具有 FF 的十六进制值。 此八进制数的任何其他值标识单播地址。 以下是不同类型的单播地址:

    • 链接本地地址:

      这些地址用于单个链接,并且具有以下格式:FE80::*InterfaceID*。 链接本地地址用于链接的节点之间以实现自动地址配置、邻居发现,或者用于不存在路由器的情况。 链接本地地址主要用于启动时,以及系统尚未获取较大范围地址时。

    • 站点本地地址:

    这些地址用于单个站点,具有以下格式:FEC0::*SubnetID*:*InterfaceID*。 站点本地地址用于在站点内寻址,无需全局前缀。

    • 全局 IPv6 单播地址:

    这些地址可以在 Internet 上使用,并具有以下格式:*GlobalRoutingPrefix*::*SubnetID*:*InterfaceID*

  • 多播地址:

    一组接口(通常属于不同节点)的标识符。 发送到此地址的数据包将发送到由该地址标识的所有接口。 多播地址类型取代了 IPv4 广播地址。

  • 任播地址:

    一组接口(通常属于不同节点)的标识符。 发送到此地址的数据包将发送到由该地址标识的仅一个接口。 这是路由指标标识的最近接口。 任播地址取自单播地址空间,无法从语法上进行区分。 寻址的接口根据其配置区分单播和任播地址。

通常,节点始终具有链接本地地址。 它可能具有站点本地地址和一个或多个全局地址。

IPv6 路由

灵活的路由机制是 IPv6 的优势之一。 由于 IPv4 网络 ID 以前和现在的分配方式,需要由 Internet 主干网上的路由器来维护大型路由表。 这些路由器必须了解所有路由,才能转发可能定向到 Internet 任何节点的数据包。 借助聚合地址的功能,IPv6 可以灵活寻址,并且大大减小路由表的大小。 在这种新型寻址体系结构中,中间路由器必须仅跟踪网络中的本地部分,才能恰当地转发消息。

邻居发现

邻居发现提供的一些功能是:

  • 路由器发现:这允许主机识别本地路由器。
  • 地址解析:这允许节点解析相应的下一跃点地址的链接层地址(地址解析协议 [ARP] 的替换)。
  • 地址自动配置:这允许主机自动配置站点本地和全局地址。

邻居发现使用 IPv6 的 Internet 控制消息协议 (ICMPv6) 消息,包括:

  • 路由器播发:由路由器在伪周期基础上发送或作为路由器招标的响应发送。 IPv6 路由器使用路由器播发来播发其可用性、地址前缀和其他参数。
  • 路由器招标:由主机发送以请求链接上的路由器立即发送路由器播发。
  • 邻居招标:由节点发送,以进行地址解析、重复地址检测或验证邻居是否仍可以访问。
  • 邻居播发:由节点发送,以响应邻居招标或通知邻居链接层地址的更改。
  • 重定向:由路由器发送,以指示特定目标的下一个更好的跃点地址,用于发送节点。

IPv6 自动配置

IPv6 的一个重要目标是支持节点即插即用。 也就是说,可以将节点插入 IPv6 网络,让其自动进行配置,无需任何人为干预。

自动配置类型

IPv6 支持以下自动配置类型:

  • 有状态自动配置:

    这种类型的配置需要一定程度的人为干预,因其需要 IPv6 动态主机配置协议 (DHCPv6) 服务器来安装和管理节点。 DHCPv6 服务器保存向其提供配置信息的节点列表。 它还维护状态信息,这样服务器知道每个地址的使用时间,以及何时可用于重新分配。

  • 无状态自动配置:

    这种配置类型适用于小型组织和个人。 这种情况下,每个主机通过接收的路由器播发的内容确定其地址。 使用 IEEE EUI-64 标准来定义地址的网络 ID 部分,可以合理地假定链接上主机地址的唯一性。

无论如何确定地址,节点必须验证可能的地址对于本地链接是否唯一。 通过向可能的地址发送邻居请求消息可完成此操作。 如果节点收到任何响应,就知道该地址已在使用,并且必须确定其他地址。

IPv6 移动性

移动设备的广泛应用催生了新的要求:设备必须能够随意改变 IPv6 Internet 上的位置,但是仍然保持现有连接。 为实现此功能,向移动节点分配一个始终可以到达的主地址。 当移动节点在其中时,它连接到主链接并使用其主地址。 当移动节点离开时,主代理(通常是路由器)在移动节点和其正与之通信的节点之间中继消息。

禁用或启用 IPv6

若要使用 IPv6 协议,请确保当前运行的操作系统版本支持 IPv6,并确保正确配置了操作系统和网络类。

配置步骤

下表列出了各种配置

已启用 OS IPv6? 已启用代码 IPv6? 说明
❌ 否 ❌ 否 可以分析 IPv6 地址。
❌ 否 ✔️ 是 可以分析 IPv6 地址。
✔️ 是 ❌ 否 使用未标记为过时的名称解析方法,可以分析并解析 IPv6 地址。
✔️ 是 ✔️ 是 使用所有方法(包含标记为过时的方法),可以分析并解析 IPv6 地址。

IPv6 默认启用。 若要在环境变量中配置此开关,请使用 DOTNET_SYSTEM_NET_DISABLEIPV6 环境变量。 有关详细信息,请参阅 .NET 环境变量:DOTNET_SYSTEM_NET_DISABLEIPV6

另请参阅