IPv6下的DHCP(DHCPv6)
一、IPv6概述
IPv6在IPv4的基础上做了很多改进,如扩编地址(由32位扩编为128位)、支持无状态地址自动配置、简化报头、身份验证、支持新的网络服务(QoS)等,并且增强了移动性和安全性,这使得IPv6成为下一代互联网的核心协议。
IPv6支持的地址分配方式:
1、 无状态地址自动配置;
2、 有状态地址自动配置。
无状态地址自动配置是指主机通过监听路由通告获得全局地址前缀(64位),然后在后边缀上自己的接口地址得到全局IP地址。这主要是因为IPv6有海量的IP地址资源,用户可以自行配置一个全局IP。接口地址实际上就是MAC地址,由于MAC地址是48位的,所以这里要用到一个IEEE提供的EUI64转换算法,可以将48位的MAC地址换算为64位。然后主机向该地址发送一个邻居发现请求(Neighbor DiscoveryRequest),如果无响应,则证明网络地址是唯一的。
主机通过无状态地址自动配置获得IP的过程如图所示。
IPv6的无状态地址自动配置
有状态地址自动配置是由IPv4下的DHCP转化而来,IPv6继承并改进了这种服务,即DHCPv6协议,它向 IPv6主机提供有状态的地址配置或无状态的配置设置。IPv6主机自动执行无状态地址自动配置,并在相邻路由器发送的路由器公告消息中使用基于以下标记的配置协议(如 DHCPv6):
托管地址配置标记,也称为 M 标记。设置为 1时,此标记指示主机使用配置协议来获取有状态地址。
其他有状态配置标记 ,也称为 O 标记。设置为 1时,此标记指示主机使用配置协议来获取其他配置设置。
结合 M 和 O 标记的值可以产生以下组合:
M 和 O 标记均设置为 0。 此组合对应不具有 DHCPv6基础结构的网络。主机使用非链接本地地址的路由器公告以及其他方法(如手动配置)来配置其他设置。
M 和 O 标记均设置为 1。 DHCPv6用于这两种地址(链接本地地址和其他非链接本地地址)和其他配置设置。该组合称为 DHCPv6 有状态,其中 DHCPv6将有状态地址分配给 IPv6 主机。
M 标记设置为 0,O 标记设置为 1。 DHCPv6不用于分配地址,仅用来分配其他配置设置。相邻路由器配置为通告非链接本地地址前缀,IPv6 主机从中派生出无状态地址。此组合称为DHCPv6 无状态:DHCPv6 不为 IPv6 主机分配有状态地址,但分配无状态配置设置。
M 标记设置为 1,O 标记设置为 0。 在此组合中,DHCPv6用于地址配置,但不用于其他设置。因为 IPv6 主机通常需要使用其他设置(如域名系统 (DNS) 服务器的 IPv6地址)进行配置,所以这是一种不太可能的组合。
类似于 DHCPv4,DHCPv6 基础结构的组件由下列各项构成:请求配置的 DHCPv6客户端、提供配置的 DHCPv6 服务器、以及 DHCPv6 中继代理(当客户端位于不具备 DHCPv6服务器的子网上时,它在客户端和服务器之间传递信息)。
2、DHCPv6协议下主机与服务器交互
DHCPv6协议下客户端与服务器端的交互与DHCPv4类似采用如下图所示的4步交互:
DHCPv6协议下主机与服务器的四步交互
但DHCPv6支持快速的两步交互,即如果客户端发送的SOLICIT报文中有rapidcommit选项,并且服务器支持该交互方式,就可以进行如下图所示的两步交互:
DHCPv6协议下主机与服务器的两步快速交互
在上述交互过程中提到的DHCPv6报文与DHCPv4类似,如solicit报文类似与discover报文,advertise报文类似于offer报文等等。
DHCPv6 消息 | 描述 | 等效的 DHCPv4 消息 |
要求(solicit) | 由客户端发送以定位服务器。 | DHCPDiscover |
公告(advertise) | 由服务器对“要求”消息进行响应时发送以指明可用性。 | DHCPOffer |
请求(request) | 由客户端发送以请求来自特定服务器的地址或配置设置。 | DHCPRequest |
确认(confirm) | 由客户端发送给所有服务器,以确定对于已连接的链接客户端的配置是否有效。 | DHCPRequest |
更新(renew) | 由客户端发送给特定服务器以延长分配地址的生存期并获取更新的配置设置。 | DHCPRequest |
重新绑定(rebind) | 未接收到对“更新”消息的响应时由客户端发送给任何服务器。 | DHCPRequest |
应答(reply) | 对要求、请求、更新、重新绑定、信息请求、确认、发布或拒绝消息进行响应时由服务器发送给特定客户端。 | DHCPAck |
发布(release) | 由客户端发送以指明客户端不再使用分配的地址。 | DHCPRelease |
拒绝(decline) | 由客户端发送给特定服务器以指明分配的地址已在使用中。 | DHCPDecline |
重新配置(reconfigure) | 由服务器发送给客户端以指明该服务器具有新的或更新的配置设置。客户端随后发送“更新”或“信息请求”消息。 | N/A |
信息请求(information-request) | 由客户端发送以请求配置设置(但不包括地址)。 | DHCPInform |
中继转发(relay-forw) | 由中继代理发送以转发消息给服务器。中继转发包含封装为 DHCPv6 中继消息选项的客户端消息。 | N/A |
中继应答(relay-reply) | 由服务器发送以通过中继代理发送消息给客户端。中继应答包含封装为 DHCPv6中继消息选项的服务器消息。 | N/A |
表一 DHCP报文与DHCPv4报文对比
3、DHCPv6的报文结构
DHCPv6的封包有两种结构,即在中继与客户端上使用的报文结构有时是不同的,在客户端与服务器端报文结构如下图所示:
客户端与服务器端交互的报文——摘自RFC3315
而在服务器与中继代理端交互的报文结构与客户端与服务器端交互的报文是不同的,某种程度上显得更为复杂一些,RFC3315中描述的这种报文结构如图所示:
服务器与中继代理之间的报文——摘自RFC3315
结束语
从IPv4走向IPv6是必然的发展趋势,虽然IPv6支持无状态的自动分配地址,但这并不意味着DHCP会随着IPv6的出现以及IPv6设备的大量部署而退出历史舞台。不仅是在这么一个过渡时期,DHCP是不可或缺的,即便是在将来,DHCP仍将发挥重要作用。思科公司的Droms预计,大部分的企业都将花钱来支持DHCPv6。他说:“网管员们都想知道网络上连接着什么样的主机和设备,以及这些设备的地址,因此,他们将希望使用DHCPv6。”
DHCPv6较DHCPv4更为复杂,也有很多不同的地方,如DHCPv4使用67和68端口,而DHCPv6使用546和547端口;不同的报文结构以及交互方式,DHCPv6设备都要使用DUID来互相认证等。但他们的原理类似,具备DHCPv4知识的技术人员在熟悉IPv6的基础上可以很快掌握DHCPv6协议。