原文地址
http://support.huawei.com/ecommunity/bbs/10155851.html
4.1 介绍
定义
IPv6 动态主机配置协议DHCPv6(Dynamic Host Configuration Protocol for IPv6)是针对IPv6
编址方案设计,为主机分配IPv6 地址/前缀和其他网络配置参数的一种有状态协议。
目的
IPv6 协议具有地址空间巨大的特点,但同时长达128 比特的IPv6 地址又要求高效合理
的地址自动分配和管理策略。IPv6 无状态地址配置方式(参看协议RFC2462)是目前广
泛采用的IPv6 地址自动配置方式。配置了该协议的主机只需相邻路由器开启IPv6 路由
通告功能,即可以根据通告报文包含的前缀信息自动配置本机地址。
无状态地址配置方案中路由器并不记录所连接的IPv6 主机的具体地址信息,可管理性
差。而且当前无状态地址配置方式不能使IPv6 主机获取DNS 服务器的IPv6 地址等配置
信息,在可用性上有一定缺陷。对于互联网服务提供商(ISP)来说,也没有相关的规
范指明如何向路由器自动分配IPv6 前缀,所以在部署IPv6 网络时,只能采用手动配置
的方法为路由交换设备配置IPv6 地址。
DHCPv6 技术解决了这一问题。DHCPv6 属于一种有状态地址自动配置协议。在有状态
地址配置过程中,DHCPv6 服务器分配一个完整的IPv6 地址给主机,并提供DNS 服务
器地址等其他配置信息,这中间可能通过DHCPv6 中继转发DHCPv6 报文,最终服务
器能把分配的IPv6 地址和客户端的进行绑定,从而增强了网络的可管理性。
与其他IPv6 地址分配方式(手工配置、通过路由器通告消息中的网络前缀无状态自动
配置等)相比,DHCPv6 具有以下优点:
l 更好地控制IPv6 地址的分配。DHCPv6 方式不仅可以记录为IPv6 主机分配的地
址,还可以为特定的IPv6 主机分配特定的地址,以便于网络管理。
l DHCPv6 支持为网络设备分配IPv6 前缀,便于全网络的自动配置和网络层次性管
理。
l 除了为IPv6 主机分配IPv6 地址/前缀外,还可以分配DNS 服务器IPv6 地址等网络
配置参数。
4.2 原理描述
4.2.1 DHCPv6 概述
DHCPv6 是一种运行在客户端和服务器之间的协议,与IPv4 中的DHCP 一样,所有的
协议报文都是基于UDP 的。但是由于在IPv6 中没有广播报文,因此DHCPv6 使用组播
报文,客户端也无需配置服务器的IPv6 地址。
IPV6 地址分配类型
IPv6 协议具有地址空间巨大的特点,但同时长达128 比特的IPv6 地址又要求高效合理
的地址自动分配和管理策略。
目前IPv6 地址的分配方法有以下几种:手动配置。手动配置IPv6 地址/前缀及其他网络配置参数(DNS、NIS、SNTP 服务
器地址等参数)。
l 无状态自动地址分配。由接口ID 生成链路本地地址,再根据路由通告报文包含的
前缀信息自动配置本机地址。
l 有状态自动地址分配,即DHCPv6 方式。DHCPv6 又分为如下三种:
– DHCPv6 有状态自动分配。DHCPv6 服务器自动配置IPv6 地址/前缀及其他网络
配置参数(DNS、NIS、SNTP 服务器地址等参数)。
– DHCPv6 无状态自动分配。主机IPv6 地址仍然通过路由通告方式自动生成,
DHCPv6 服务器只分配除IPv6 地址以外的配置参数,包括DNS、NIS、SNTP 服
务器等参数。
– DHCPv6 PD 前缀自动分配。下层网络路由器不需要再手工指定用户侧链路的
IPv6 地址前缀,它只需要向上层网络路由器提出前缀分配申请,上层网络路由
器便可以分配合适的地址前缀给下层路由器,下层路由器把获得的前缀,前缀
一般长度小于64,进一步自动细分成64 前缀长度的子网网段,把细分的地址前
缀再通过路由通告(RA)至与IPv6 主机直连的用户链路上,实现主机的地址自动
配置,从而完成整个IPv6 网络的层次化布局。
DHCPv6 基本架构
DHCPv6 基本构架如图4-1 所示。
图4-1 DHCPv6 基本构架示意图
DHCPv6 基本协议架构中,主要包括以下三种角色:
l DHCPv6 Client:
DHCPv6 客户端,通过与DHCPv6 服务器进行交互,获取IPv6 地址/前缀和网络配
置信息,完成自身的地址配置功能。
l DHCPv6 Relay:
DHCPv6 中继代理,负责转发来自客户端方向或服务器方向的DHCPv6 报文,协助
DHCPv6 客户端和DHCPv6 服务器完成地址配置功能。一般情况下,DHCPv6 客户
端通过本地链路范围的组播地址与DHCPv6 服务器通信,以获取IPv6 地址/前缀和
其他网络配置参数。如果服务器和客户端不在同一个链路范围内,则需要通过DHCPv6 中继代理来转发报文,这样可以避免在每个链路范围内都部署DHCPv6 服
务器,既节省了成本,又便于进行集中管理。
DHCPv6 基本协议架构中,DHCPv6 中继代理不是必须的角色。如果DHCPv6 客户
端和DHCPv6 服务器位于同一链路范围内,或DHCPv6 客户端和DHCPv6 服务器
直接通过单播交互完成地址分配或信息配置的情况下,是不需要DHCPv6 中继代理
参与的。只有当DHCPv6 客户端和DHCPv6 服务器不在同一链路范围内,或
DHCPv6 客户端和DHCPv6 服务器无法单播交互的情况下,才需要DHCPv6 中继代
理的参与。
l DHCPv6 Server:
DHCPv6 服务器,负责处理来自客户端或中继代理的地址分配、地址续租、地址释
放等请求,为客户端分配IPv6 地址/前缀和其他网络配置信息。
DHCPv6 基本概念
1. 组播地址
l 在DHCPv6 协议中,客户端不用配置DHCPv6 Server 的IPv6 地址,而是发送目
的地址为组播地址的Solicit 报文来定位DHCPv6 服务器。
l 在DHCPv4 协议中,客户端发送广播报文来定位服务器。为避免广播风暴,在
IPv6 中,已经没有了广播类型的报文,而是采用组播报文。DHCPv6 用到的组
播地址有两个:
– FF02::1:2(All DHCP Relay Agents and Servers):所有DHCPv6 服务器和中
继代理的组播地址,这个地址是链路范围的,用于客户端和相邻的服务器及
中继代理之间通信。所有DHCPv6 服务器和中继代理都是该组的成员。
– FF05::1:3(All DHCP Servers):所有DHCPv6 服务器组播地址,这个地址是
站点范围的,用于中继代理和服务器之间的通信,站点内的所有DHCPv6 服
务器都是此组的成员。
2. UDP 端口号
l DHCPv6 报文承载在UDPv6 上。
l 客户端监听的UDP 目的端口号是546。
l 服务器、中继代理监听的UDP 端口号是547。
3. DHCP 唯一标识符(DUID)
l DHCP 设备唯一标识符DUID(DHCP Unique Identifier),每个服务器或客户端
有且只有一个唯一标识符,服务器使用DUID 来识别不同的客户端,客户端则
使用DUID 来识别服务器。
l 客户端和服务器DUID 的内容分别通过DHCPv6 报文中的Client Identifier 和
Server Identifier 选项来携带。两种选项的格式一样,通过option-code 字段的取
值来区分是Client Identifier 还是Server Identifier 选项。
4. 身份联盟(IA)
l 身份联盟IA(Identity Association)是使得服务器和客户端能够识别、分组和管
理一系列相关IPv6 地址的结构。每个IA 包括一个IAID 和相关联的配置信息。
l 客户端必须为它的每一个要通过服务器获取IPv6 地址的接口关联至少一个IA。
客户端用给接口关联的IA 来从服务器获取配置信息。每个IA 必须明确关联到
一个接口。
l IA 的身份由IAID 唯一确定,同一个客户端的IAID 不能出现重复。IAID 不应因
为设备的重启等因素发生丢失或改变。__IA 中的配置信息由一个或多个IPv6 地址以及T1 和T2 生存期组成。IA 中的每
个地址都有合法生存期和首选生存期。
l 一个接口至少关联一个IA,一个IA 可以包含一个或多个地址信息。
5. M/O 标记
l M 标记:路由器通告的RA 报文中的管理标记,当M 标志位为1 时,表示链路
上的IPv6 主机采用DHCPv6 方式获取IPv6 地址/前缀。
l O 标记:路由器通告的RA 报文中的其他配置标记,当O 标志位为1 时,表示
链路上的IPv6 主机采用DHCPv6 方式获取除IPv6 地址/前缀以外的其他网络配
置参数。
M/O 标识位数值对应说明如下:
4.2.2 DHCPv6 报文介绍
DHCPv6 报文格式
DHCPv6 报文格式如图4-2 所示。
图4-2 DHCPv6 的报文格式
DHCPv6 报文类型
目前DHCPv6 定义了如下十三种类型报文,DHCPv6 服务器和DHCPv6 客户端之间通过
这十三种类型的报文进行通信。下表将对DHCPv6 和DHCPv4 报文进行类比。
4.2.3 DHCPv6 工作原理
DHCPv6 自动分配分为DHCPv6 有状态自动分配和DHCPv6 无状态自动分配。
l DHCPv6 有状态自动分配。DHCPv6 服务器自动配置IPv6 地址/前缀,同时分配
DNS、NIS、SNTP 服务器等网络配置参数。
l DHCPv6 无状态自动分配。主机IPv6 地址仍然通过路由通告方式自动生成,DHCP
服务器只分配除IPv6 地址以外的配置参数,包括DNS、NIS、SNTP 服务器地址等
参数。
DHCPv6 有状态自动分配
IPv6 主机在地址分配之前,由IPv6 节点生成链路本地地址并且DAD 通过后,首先有一
个链路路由器发现过程,即IPv6 节点发送RS 报文,链路路由器收到RS 报文后,回应
RA 报文。如果IPv6 节点收到的RA 报文中M 标记为1,O 标记位为1,则表示IPv6 节
点通过有状态DHCPv6 方式获取地址和其他配置参数(例如DNS 服务器的IPv6 地址
等)。
DHCPv6 服务器为客户端分配地址/前缀的过程分为两类:
l DHCPv6 四步交互分配过程
l DHCPv6 两步交互快速分配过程
DHCPv6 四步交互
四步交互常用于网络中有多个DHCPv6 服务器的情况。DHCPv6 客户端首先通过组播发
送Solicit 报文来定位可以为其提供服务的DHCPv6 服务器,在收到多个DHCPv6 服务
器的Advertise 报文后,根据DHCPv6 服务器的优先级选择一个为其分配地址和配置信
息的服务器,接着通过Request/Reply 报文交互完成地址申请和分配过程。
DHCPv6 服务器端如果没有配置使能两步交互,无论客户端报文中是否包含Rapid Commit
选项,服务器都采用四步交互方式为客户端分配地址和配置信息。
DHCPv6 四步交互地址分配过程如图4-3 所示。
图4-3 DHCPv6 四步交互地址分配过程
DHCPv6 四步交互地址分配过程如下:
1. DHCPv6 客户端发送Solicit 报文,请求DHCPv6 服务器为其分配IPv6 地址和网络
配置参数。
2. 如果Solicit 报文中没有携带Rapid Commit 选项,或Solicit 报文中携带Rapid
Commit 选项,但服务器不支持快速分配过程,则DHCPv6 服务器回复Advertise 报
文,通知客户端可以为其分配的地址和网络配置参数。
3. 如果DHCPv6 客户端接收到多个服务器回复的Advertise 报文,则根据Advertise 报
文中的服务器优先级等参数,选择优先级最高的一台服务器,并向所有的服务器发
送Request 组播报文,该报文中携带已选择的DHCPv6 服务器的DUID。
4. DHCPv6 服务器回复Reply 报文,确认将地址和网络配置参数分配给客户端使用。
DHCPv6 两步交互
两步交互常用于网络中只有一个DHCPv6 服务器的情况。DHCPv6 客户端首先通过组播
发送Solicit 报文来定位可以为其提供服务的DHCPv6 服务器,DHCPv6 服务器收到客户
端的Solicit 报文后,为其分配地址和配置信息,直接回应Reply 报文,完成地址申请和
分配过程。
两步交换可以提高DHCPv6 过程的效率,但在有多个DHCPv6 服务器的网络中,多个
DHCPv6 服务器都可以为DHCPv6 客户端分配IPv6 地址,回应Reply 报文,但是客户
端实际只可能使用其中一个服务器为其分配的IPv6 地址和配置信息。为了防止这种情
况的发生,管理员可以配置DHCPv6 服务器是否支持两步交互地址分配方式。
DHCPv6 两步交互地址分配过程如图4-4 所示。
图4-4 DHCPv6 两步交互地址分配过程
DHCPv6 两步交互地址分配过程如下:
1. DHCPv6 客户端在发送的Solicit 报文中携带Rapid Commit 选项,标识客户端希望
服务器能够快速为其分配地址和网络配置参数。
2. DHCPv6 服务器接收到Solicit 报文后,将进行如下处理:
l 如果DHCPv6 服务器支持快速分配地址,则直接返回Reply 报文,为客户端分
配IPv6 地址和其他网络配置参数,Replay 报文中也携带Rapid Commit 选项。
l 如果DHCPv6 服务器不支持快速分配过程,则采用四步交互方式为客户端分配
IPv6 地址/前缀和其他网络配置参数。
DHCPv6 无状态自动分配
在地址分配前,IPv6 节点生成链路本地地址并且DAD 通过后,首先有一个链路路由器
发现过程。即IPv6 节点广播发送RS 报文,链路路由器收到RS 报文后,回应RA 报文。
如果IPv6 节点收到的RA 报文中M 标记为0,O 标记为1,则表示IPv6 节点通过
DHCPv6 无状态方式获取配置参数(包括DNS、SIP、SNTP 等服务器配置信息,不包
括IPv6 地址)。
DHCPv6 无状态工作过程如图4-5 所示。
DHCPv6 无状态工作过程如下:
1. DHCPv6 客户端以组播方式向DHCPv6 服务器发送Information-Request 报文,该报
文中携带Option Request 选项,指定DHCPv6 客户端需要从DHCPv6 服务器获取的
配置参数。
2. DHCPv6 服务器收到Information-Request 报文后,为DHCPv6 客户端分配网络配置
参数,并单播发送Reply 报文,将网络配置参数返回给DHCPv6 客户端。
3. DHCPv6 客户端根据收到Reply 报文提供的参数完成DHCPv6 客户端无状态配置。
4.2.4 DHCPv6 PD 工作原理
DHCPv6 前缀代理DHCPv6 PD(Prefix Delegation)是由Cisco 公司提出的一种前缀分配机
制,并在RFC3633 中得以标准化。在一个层次化的网络拓扑结构中,不同层次的IPv6
地址分配一般是手工指定的。手工配置IPv6 地址扩展性不好,不利于IPv6 地址的统一
规划管理。
通过DHCPv6 前缀代理机制,下游网络路由器不需要再手工指定用户侧链路的IPv6 地
址前缀,它只需要向上游网络路由器提出前缀分配申请,上游网络路由器便可以分配合
适的地址前缀给下游路由器,下游路由器把获得的前缀(一般前缀长度小于64)进一步自
动细分成64 前缀长度的子网网段,把细分的地址前缀再通过路由通告(RA)至与IPv6 主
机直连的用户链路上,实现IPv6 主机的地址自动配置,完成整个系统层次的地址布局。
DHCPv6 PD 工作过程如图4-6 所示。
DHCPv6 PD 四步交互地址分配过程如下:
1. DHCPv6 PD 客户端发送Solicit 报文,请求DHCPv6 PD 服务器为其分配IPv6 地址
前缀。
2. 如果Solicit 报文中没有携带Rapid Commit 选项,或Solicit 报文中携带Rapid
Commit 选项,但服务器不支持快速分配过程,则DHCPv6 服务器回复Advertise 报
文,通知客户端可以为其分配的IPv6 地址前缀。
3. 如果DHCPv6 客户端接收到多个服务器回复的Advertise 报文,则根据Advertise 报
文中的服务器优先级等参数,选择优先级最高的一台服务器,并向该服务器发送
Request 报文,请求服务器确认为其分配地址前缀。
4. DHCPv6 PD 服务器回复Reply 报文,确认将IPv6 地址前缀分配给DHCPv6 PD 客
户端使用。
DHCPv6 PD 同样也支持携带Rapid Commit 选项的两步交互方式,报文交互方式参见
DHCPv6 两步交互方式。
4.2.5 DHCPv6 中继工作原理
DHCPv6 中继工作过程如图4-7 所示。DHCPv6 客户端通过DHCPv6 中继转发报文,获
取IPv6 地址/前缀和其他网络配置参数(例如DNS 服务器IPv6 地址等)。
DHCPv6 中继工作交互过程如下:
1. DHCPv6 客户端向所有DHCPv6 服务器和DHCPv6 中继的组播地址FF02::1:2 发送
请求报文。
2. 根据DHCPv6 中继转发报文有如下两种情况:
l 如果DHCPv6 中继和DHCPv6 客户端位于同一个链路上,即DHCPv6 中继为
DHCPv6 客户端的第一跳中继,中继转发直接来自客户端的报文,此时DHCPv6
中继实质上也是客户端的IPv6 网关设备。DHCPv6 中继收到客户端的报文后,
将其封装在Relay-Forward 报文的中继消息选项(Relay Message Option)中,并
将Relay-Forward 报文发送给DHCPv6 服务器或下一跳中继。
l 如果DHCPv6 中继和DHCPv6 客户端不在同一个链路上,中继收到的报文是来
自其他中继的Relay-Forward 报文。中继构造一个新的Relay-Forward 报文,并
将Relay-Forward 报文发送给DHCPv6 服务器或下一跳中继。
3. DHCPv6 服务器从Relay-Forward 报文中解析出DHCPv6 客户端的请求,为
DHCPv6 客户端选取IPv6 地址和其他配置参数,构造应答消息,将应答消息封装
在Relay-Reply 报文的中继消息选项中,并将Relay-Reply 报文发送给DHCPv6 中
继。
4. DHCPv6 中继从Relay-Reply 报文中解析出DHCPv6 服务器的应答,转发给DHCPv6
客户端。DHCPv6 客户端根据Advertise 报文中的服务器优先级选择一个DHCPv6
服务器,后续从该DHCPv6 服务器获取IPv6 地址和其他网络配置参数。
4.2.6 IPv6 地址/前缀的分配与更新原则
IPv6 地址分配的优先次序
DHCPv6 服务器按照如下次序为DHCPv6 客户端选择IPv6 地址/前缀。
1. 选择IPv6 地址池
DHCPv6 服务器接口必须绑定IPv6 地址池,DHCPv6 服务器将选择该IPv6 地址池
为接口下的DHCPv6 客户端分配地址/前缀。
2. 选择IPv6 地址/前缀
确定地址池后,DHCPv6 服务器将按照下面步骤为DHCPv6 客户端分配IPV6 地
址/前缀:
a. 如果地址池中为客户端指定了地址/前缀,优先从地址池中选择与客户端DUID
匹配的地址/前缀分配给客户端。
b. 如果客户端报文中的IA 选项携带了有效的地址/前缀,优先从地址池中选择该
地址/前缀分配给客户端。如果该地址/前缀在地址池中不可用,则另外分配一
个空闲地址/前缀给客户端。如果IPV6 前缀长度比指定分配长度大,则按指定
分配长度来分配。
c. 从地址池中选择空闲地址/前缀分配给客户端,保留地址(例如RFC 2526 中定
义的任播地址)、冲突地址、已被分配的地址不能再分配给客户端。
d. 如果没有合适的IPv6 地址/前缀可以分配,则分配失败。
DHCPv6 地址租约更新
DHCPv6 服务器为DHCPv6 客户端分配的地址是有租约的,租约由生命期(包括地址的
优先生命期和有效生命期构成)和续租时间点(IA 的T1、T2)构成。地址有效生命期
结束后,DHCPv6 客户端不能再使用该地址。在有效生命期到达之前,如果DHCPv6 客
户端希望继续使用该地址,则需要更新地址租约。
DHCPv6 客户端为了延长其与IA 关联的地址的有效生命期和优先生命期,在T1 时刻,
发送包含IA 选项的Renew 报文给服务器,其中IA 选项中携带需要续租的IA 地址选
项。如果DHCPv6 客户端一直没有收到T1 时刻续租报文的回应报文,那么在T2 时
刻,DHCPv6 客户端通过Rebind 报文向DHCPv6 服务器继续续租地址。
T1 时刻地址租约更新过程如图4-8 所示。
T1 时刻地址租约更新过程如下:
1. DHCPv6 客户端在T1 时刻(推荐值为优先生命期的1/2)发送Renew 报文进行地
址租约更新请求。
2. DHCPv6 服务器回应Reply 报文。
l 如果DHCPv6 客户端可以继续使用该地址,则DHCPv6 服务器回应续约成功的
Reply 报文,通知DHCPv6 客户端已经成功更新地址租约。
l 如果该地址不可以再分配给该DHCPv6 客户端,则DHCPv6 服务器回应续约失
败的Reply 报文,通知DHCPv6 客户端不能获得新的租约。
T2 时刻地址租约更新过程如图4-9 所示。
T2 时刻地址租约更新过程如下:
1. DHCPv6 客户端在T1 时刻发送Renew 请求更新租约,但是没有收到DHCPv6 服务
器的回应报文。
2. DHCPv6 客户端在T2 时刻(推荐值为优先生命期的0.8 倍),向所有DHCPv6 服
务器组播发送Rebind 报文请求更新租约。
3. DHCPv6 服务器回应Reply 报文。
l 如果DHCPv6 客户端可以继续使用该地址,则DHCPv6 服务器回应续约成功的
Reply 报文,通知DHCPv6 客户端已经成功更新地址/前缀租约。
l 如果该地址不可以再分配给该DHCPv6 客户端,则DHCPv6 服务器回应续约失
败的Reply 报文,通知DHCPv6 客户端不能获得新的租约。
IP 地址预留
DHCPv6 服务器支持预留IPv6 地址,即保留部分IPv6 地址不参与动态分配。比如预留
的IPv6 地址可作为DNS 服务器的IPv6 地址。