Internet 协议版本 6 (IPv6) 是 Internet 网络层的标准协议套件。 IPv6 旨在解决当前版本的 Internet 协议套件(称为 IPv4)的许多问题,即地址耗尽、安全性、自动配置、扩展性等。 IPv6 扩展了 Internet 的功能,以启用新类型的应用程序,包括对等应用程序和移动应用程序。 以下是当前 IPv4 协议的主要问题:
地址空间的快速耗尽。
这导致使用将多个专用地址映射到单个公共 IP 地址的网络地址翻译器(NAT)。 此机制造成的主要问题是处理开销和端对端连接性的缺失。
缺少层次结构支持。
由于其固有的预定义类组织,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 的作系统版本,并确保正确配置作系统和网络类。
配置步骤
下表列出了各种配置
操作系统是否启用了 IPv6? | 已启用代码 IPv6? | DESCRIPTION |
---|---|---|
❌ 否 | ❌ 否 | 可以分析 IPv6 地址。 |
❌ 否 | ✔️ 是的 | 可以分析 IPv6 地址。 |
✔️ 是的 | ❌ 否 | 使用未标记为过时的名称解析方法,可以分析并解析 IPv6 地址。 |
✔️ 是的 | ✔️ 是的 | 可以使用所有方法(包括标记为已过时的方法)分析和解析 IPv6 地址。 |
默认情况下,IPv6 处于启用状态。 若要在环境变量中配置此开关,请使用 DOTNET_SYSTEM_NET_DISABLEIPV6
环境变量。 有关详细信息,请参阅 .NET 环境变量:DOTNET_SYSTEM_NET_DISABLEIPV6。