其他分享
首页 > 其他分享> > 奔涌的IPv6背后,DHCPv6协议你了解多少?

奔涌的IPv6背后,DHCPv6协议你了解多少?

作者:互联网

随着IPv6技术的普及,DHCPv6 作为基础技术是每一位IT人或多或少都需要了解的。本文将依托腾讯云CVM来详细剖析 DHCPv6 的工作原理,希望可以让更多小伙伴掌握 DHCPv6 协议。什么是 DHCPv6 协议?客户端如何首次自动获取一个 IPV6 地址?CVM重启又如何自动获取到上次使用的 IPv6 地址?本文作者:腾讯云售后架构师 李彬文。

 

一、DHCPv6简介

 

DHCPv6 (Dynamic Host Configuration Protocol for IPv6)是一个用来分配 IPv6 地址、前缀以及DNS等配置的网络协议。

 

DHCPv6 是一种运行在客户端和服务端之间的协议,与 IPv4 中的 DHCP 一样,所有的协议报文都是基于 UDP 的(客户端使用UDP 端口号546,服务端使用端口号547)。但是由于在 IPv6中 没有广播报文,因此 DHCPv6 使用组播(默认所有DHCPv6服务器都会加入并侦听该组播组:FF02::1:2)报文,客户端也无需配置服务端的IPv6地址。

 

1. DHCPv6协议的优势

 

相对其他分配IPV6地址的方式而言,DHCPv6具备以下优势:

 

2. DHCPv6报文格式

 

 

 

DHCPv6 属于 OSI 七层协议栈的应用层,所以需要先封装网络层 IPv6 头部以及传输层UDP头部。

 

3. DHCPv6字段注释

 

 

4. DHCPv6定义的几种常见消息类型

 

(1)Solicit,DHCPv6 客户端使用Solicit报文来发现 DHCPv6 服务器的位置。

 

(2)Advertise,DHCPv6 服务器发送Advertise报文来对Solicit报文进行回应,通告客户端能够提供哪些 DHCPv6 服务。

 

(3)Request,DHCPv6 客户端发送Request报文来向DHCPv6服务器请求IPv6地址和其它配置信息。

 

(4)Confirm,DHCPv6 客户端向任意可达的 DHCPv6 服务器发送Confirm报文检查自己目前获得的 IPv6 地址是否适用与它所连接的链路。

 

(5)Reply,DHCPv6服务器在以下场合发送Reply报文:

 

(6)Decline,DHCPv6 客户端向 DHCPv6 服务器发送 Decline 报文,声明 DHCPv6 服务器分配的一个或多个地址在 DHCPv6 客户端所在链路上已经被其他客户端使用。

 

二、首次获取IPV6地址解析

           

 

CVM首次接入腾讯云 IPv6 网络,通过 DHCPv6 自动获取 IPv6 地址的交互报文如下所示:

 

 

1. 发现阶段

 

客户端CVM(云服务器)发送Solicit报文来发现 DHCPv6 服务器,并请求DHCPv6 服务器(腾讯云虚拟组件)为其分配 IPv6 地址和网络配置参数。

 

由于CVM不知道 DHCPv6 服务器的 IPv6 地址,所以CVM用组播地址:FF02::1:2向同一链路范围内的所有DHCPv6服务器发送Solicit报文。

 

Solicit报文中携带了客户端的DUID、需要请求的非临时地址、以及其他网络配置参数等信息。

 

 

 

2. 提供阶段

 

DHCPv6 服务器接收到Solicit报文后,选择按照 IPv6 地址从小到大的顺序采用循环查找方式,选择最新找到的可供分配的 IPv6 地址,然后通过Advertise报文以单播方式回应给CVM。

 

Advertise报文里面携带了服务器的DUID、客户端的DUID、分配给客户端的IPv6地址及租期等信息。

 

 

 

3. 选择阶段

 

因为Solicit报文是组播发送的,所以如果同一链路范围内存在多个 DHCPv6 服务器,则接收到Solicit报文的服务器都会回应Advertise报文。

 

如果有多个 DHCPv6 服务器向DHCPv6客户端回应Advertise报文,则 DHCPv6 客户端选择服务器优先级最高的Advertise报文(DHCPv6 服务器可以在Advertise消息中包含Preference选项,以便控制客户端对服务器的选择),然后客户端以组播方式向同一链路范围内的所有 DHCPv6 服务器发送Request报文,该报文中包含客户端选择的 DHCPv6 服务器(高优先级)的DUID、客户端的DUID、客户端IPv6地址。

 

 

 

4. 确认阶段

 

当 DHCPv6 服务器收到Request报文后,对报文中携带的服务端DUID信息进行判断:

 

 

 

5. 客户端CVM处理阶段

 

客户端CVM收到Reply报文后会发送地址冲突探测报文(Neighbor Solicitation),检查本链路范围内是否有其他客户端使用相同的IPv6地址,如果在指定时间内没有收到回应,表示客户端可以使用此地址。

 

 

注意事项:如果发的地址冲突探测报文(Neighbor Solicitation)收到了回应,说明有其他客户端使用了此地址,CVM会以单播方式向服务端发送Decline(声明地址冲突)报文,并重新发送Solicit报文请求新的可用IPv6地址。服务端收到Decline报文后,会将报文中携带的IPv6地址列为冲突地址。

 

三、重启后获取IPV6地址解析

 

 

 

CVM非首次接入腾讯云IPv6网络,通过 DHCPv6 自动获取 IPv6 地址的交互报文如下所示:

 

 

 

第一步,当客户端CVM(云服务器)非首次接入 IPv6 网络时(比如重启、网卡禁用后再启用等),CVM会通过组播地址:FF02::1:2,发送Confirm报文确认该CVM之前的IPv6地址是否仍然可用。

 

 

第二步,DHCPv6 服务器(腾讯云虚拟组件)收到Confirm报文后,确认Confirm报文中所有的地址是否适用于该CVM。

 

若Confirm报文中所有的IPv6地址都通过了确认,服务器回应确认成功的Reply报文(如果客户端收到确认失败的Reply报文,则发送Solicit报文,重新请求IPv6地址;)。

 

 

第三步,客户端CVM收到确认成功的Reply报文后会发送地址冲突探测报文(Neighbor Solicitation),检查本链路范围内是否有其他客户端使用相同的IPv6地址,如果在指定时间内没有收到回应,表示该CVM可以使用此地址。

 

 

至此,客户端通过DHCPv6协议首次和非首次自动获取IPv6地址的原理就解释清楚了,通过该文章也阐述了DHCPv6的6种常用类型报文的作用,希望小伙伴们多多尝试,加深理解。

标签:报文,奔涌,地址,DHCPv6,IPv6,服务器,客户端
来源: https://www.cnblogs.com/qcloud1001/p/12883358.html