
文章插图
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信息进行判断:
· 若报文中携带的服务端DUID不是本服务端的DUID , 则对该Request报文不回应 , 同时将Request报文中请求的IPv6地址进行回收 。
· 若报文中携带的服务端DUID是本服务端的DUID , 则以单播方式回应Reply报文 , 确认Request报文中请求的IPv6地址分配给客户端使用 。
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种常用类型报文的作用 , 希望小伙伴们多多尝试 , 加深理解 。
推荐阅读
- 自动挡车是N挡点火还是P挡点火好?修车师傅说出实话,建议你了解
- 防止Windows10自动唤醒,就用这4招
- IPv5 发生了什么?为什么有 IPv4、IPv6 但没有 IPv5?
- 交管12123换驾驶证怎么获取体检信息?
- 如何自制葱油
- 自动挡车型刹车失灵怎么办?记住这个自救方法
- 自动挡汽车可以在N挡启动吗?很多人都不清楚,一次性给你讲清楚
- 所有自动挡车主!避开误区,安全出行
- 自动挡六大禁忌,老司机也要处处牢记
- 8 个 DevOps 自动化工具,帮你做出持续改进
