DHCPv6 诞生的原因
IPv6 协议具有地址空间巨大的特点,但同时长达 128 比特的 IPv6 地址又要求高效合理的地址自动分配和管理策略。IPv6 无状态地址配置方式(RFC2462)是目前广泛采用的 IPv6 地址自动配置方式。配置了该协议的主机只需相邻设备开启 IPv6 路由通告功能,即可以根据通告报文包含的前缀信息自动配置本机地址。
无状态地址配置方案中设备并不记录所连接的 IPv6 主机的具体地址信息,可管理性差。而且当前无状态地址配置方式不能使 IPv6 主机获取 DNS 服务器的 IPv6 地址等配置信息,在可用性上有一定缺陷。对于互联网服务提供商来说,也没有相关的规范指明如何向设备自动分配 IPv6 前缀,所以在部署 IPv6 网络时,只能采用手动配置的方法为设备配置 IPv6 地址。
DHCPv6 技术解决了这一问题。DHCPv6 属于一种有状态地址自动配置协议。
与其他 IPv6 地址分配方式(手工配置、通过路由器通告消息中的网络前缀无状态自动配置等)相比,DHCPv6 具有以下优点:
- 更好地控制 IPv6 地址的分配。DHCPv6 方式不仅可以记录为 IPv6 主机分配的地址,还可以为特定的 IPv6 主机分配特定的地址,以便于网络管理。
- DHCPv6 支持为网络设备分配 IPv6 前缀,便于全网络的自动配置和网络层次性管理。
- 除了为 IPv6 主机分配 IPv6 地址 / 前缀外,还可以分配 DNS 服务器 IPv6 地址等网络配置参数。
DHCPv6 概述
DHCPv6 是一种运行在客户端和服务器之间的协议,与 IPv4 中的 DHCP 一样,所有的协议报文都是基于 UDP 的。但是由于在 IPv6 中没有广播报文,因此 DHCPv6 使用组播报文,客户端也无需配置服务器的 IPv6 地址。
IPv6 地址分配类型
IPv6 协议具有地址空间巨大的特点,但同时长达 128 比特的 IPv6 地址又要求高效合理的地址自动分配和管理策略。
- 手动配置。手动配置 IPv6 地址 / 前缀及其他网络配置参数(DNS、NIS、SNTP 服务器地址等参数)。
- 无状态自动地址分配。由接口 ID 生成链路本地地址,再根据路由通告报文 RA(Router Advertisement)包含的前缀信息自动配置本机地址。
- 有状态自动地址分配,即 DHCPv6 方式。DHCPv6 又分为如下两种:
- DHCPv6 有状态自动分配。DHCPv6 服务器自动分配 IPv6 地址 / PD 前缀及其他网络配置参数(DNS、NIS、SNTP 服务器地址等参数)。
- DHCPv6 无状态自动分配。主机 IPv6 地址仍然通过路由通告方式自动生成,DHCPv6 服务器只分配除 IPv6 地址以外的配置参数,包括 DNS、NIS、SNTP 服务器等参数。
DHCPv6 基本架构
DHCPv6 基本协议架构中,主要包括以下三种角色:
-
DHCPv6 Client:
DHCPv6 客户端,通过与 DHCPv6 服务器进行交互,获取 IPv6 地址 / 前缀和网络配置信息,完成自身的地址配置功能。
-
DHCPv6 Relay:
DHCPv6 中继代理,负责转发来自客户端方向或服务器方向的 DHCPv6 报文,协助 DHCPv6 客户端和 DHCPv6 服务器完成地址配置功能。一般情况下,DHCPv6 客户端通过本地链路范围的组播地址与 DHCPv6 服务器通信,以获取 IPv6 地址 / 前缀和其他网络配置参数。如果服务器和客户端不在同一个链路范围内,则需要通过 DHCPv6 中继代理来转发报文,这样可以避免在每个链路范围内都部署 DHCPv6 服务器,既节省了成本,又便于进行集中管理。
DHCPv6 基本协议架构中,DHCPv6 中继代理不是必须的角色。如果 DHCPv6 客户端和 DHCPv6 服务器位于同一链路范围内,或 DHCPv6 客户端和 DHCPv6 服务器直接通过单播交互完成地址分配或信息配置的情况下,是不需要 DHCPv6 中继代理参与的。只有当 DHCPv6 客户端和 DHCPv6 服务器不在同一链路范围内,或 DHCPv6 客户端和 DHCPv6 服务器无法单播交互的情况下,才需要 DHCPv6 中继代理的参与。
-
DHCPv6 Server:
DHCPv6 服务器,负责处理来自客户端或中继代理的地址分配、地址续租、地址释放等请求,为客户端分配 IPv6 地址 / 前缀和其他网络配置信息。
DHCPv6 基本概念
组播地址
-
在 DHCPv6 协议中,客户端不用配置 DHCPv6 Server 的 IPv6 地址,而是发送目的地址为组播地址的 Solicit 报文来定位 DHCPv6 服务器。
-
在 DHCPv4 协议中,客户端发送广播报文来定位服务器。为避免广播风暴,在 IPv6 中,已经没有了广播类型的报文,而是采用组播报文。DHCPv6 用到的组播地址有两个:
-
FF02::1:2(All DHCP Relay Agents and Servers,所有 DHCPv6 服务器和中继代理的组播地址):
这个地址是链路范围的,用于客户端和相邻的服务器及中继代理之间通信。所有 DHCPv6 服务器和中继代理都是该组的成员。
-
FF05::1:3(All DHCP Servers,所有 DHCPv6 服务器组播地址):
这个地址是站点范围的,用于中继代理和服务器之间的通信,站点内的所有 DHCPv6 服务器都是此组的成员。
-
UDP 端口号
- DHCPv6 报文承载在 UDPv6 上。
- 客户端侦听的 UDP 目的端口号是 546。
- 服务器、中继代理侦听的 UDP 端口号是 547。
DHCP 唯一标识符(DUID)
DHCP 设备唯一标识符 DUID(DHCPv6 Unique Identifier),每个服务器或客户端有且只有一个唯一标识符,服务器使用 DUID 来识别不同的客户端,客户端则使用 DUID 来识别服务器。
客户端和服务器 DUID 的内容分别通过 DHCPv6 报文中的 Client Identifier 和 Server Identifier 选项来携带。两种选项的格式一样,通过 option-code 字段的取值来区分是 Client Identifier 还是 Server Identifier 选项。
身份联盟(IA)
- 身份联盟 IA(Identity Association)是使得服务器和客户端能够识别、分组和管理一系列相关 IPv6 地址的结构。每个 IA 包括一个 IAID 和相关联的配置信息。
- 客户端必须为它的每一个要通过服务器获取 IPv6 地址的接口关联至少一个 IA。客户端用给接口关联的 IA 来从服务器获取配置信息。每个 IA 必须明确关联到一个接口。
- IA 的身份由 IAID 唯一确定,同一个客户端的 IAID 不能出现重复。IAID 不应因为设备的重启等因素发生丢失或改变。
- IA 中的配置信息由一个或多个 IPv6 地址以及 T1 和 T2 生存期组成。IA 中的每个地址都有首选生存期和有效生存期。
- 一个接口至少关联一个 IA,一个 IA 可以包含一个或多个地址信息。
DHCPv6 报文类型
图:DHCPv6 的报文格式
字段 | ~~~~~~~~~~ 长度 | 含义 |
---|---|---|
msg-type | 1 字节 | 表示报文的类型,取值为 1~13,具体请参见 DHCPv6 报文类型。 |
transaction-ID | 3 字节 | DHCPv6 交互 ID, |