随着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种常用类型报文的作用,希望小伙伴们多多尝试,加深理解。
近年来,云计算的兴起可能已经使主机托管服务黯然失色,但是经过时间考验的主机...
俗话说上班摸鱼一时爽,一直摸鱼一直爽。 上班族这群时间管理大师们往往能在上班...
如何选择交换机?如何根据项目确定网络结构?我们在做大部分项目都有这样的疑问,...
人工智能和其他科技的发展让越来越多的无人科技的出现。到2030年为止,有8亿人的...
AR自2012年进入大众视野,曾有人称它将***新技术革命。6年过后,AR市场距离起来...
做前端开发的同学都知道,网页的基本组成部分是 HTML,JavaScript 和 CSS。开发...
近期,曾经的第四大宽带接入网运营商而且是第一大民营宽带运营商,100万元贱卖资...
从2019年6月6日5G在我国正式商用至今,已经过去了一年的时间。细数过去一年5G产...
北京,首钢冬奥园区。 一家名叫「MAI Shop」的零售商店,最近刚刚在这里开业,然...
近期,中国移动多个地区的网上营业厅和APP已不为用户提供优惠的4G套餐,用户办理...