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。