IPv4自动获取有dhcp协议,那IPv6是否有dhcpv6协议( 二 )


IPv4自动获取有dhcp协议,那IPv6是否有dhcpv6协议

文章插图
 
2. 提供阶段
DHCPv6 服务器接收到Solicit报文后 , 选择按照 IPv6 地址从小到大的顺序采用循环查找方式 , 选择最新找到的可供分配的 IPv6 地址 , 然后通过Advertise报文以单播方式回应给CVM 。
Advertise报文里面携带了服务器的DUID、客户端的DUID、分配给客户端的IPv6地址及租期等信息 。
IPv4自动获取有dhcp协议,那IPv6是否有dhcpv6协议

文章插图
 
3. 选择阶段
因为Solicit报文是组播发送的 , 所以如果同一链路范围内存在多个 DHCPv6 服务器 , 则接收到Solicit报文的服务器都会回应Advertise报文 。
如果有多个 DHCPv6 服务器向DHCPv6客户端回应Advertise报文 , 则 DHCPv6 客户端选择服务器优先级最高的Advertise报文(DHCPv6 服务器可以在Advertise消息中包含Preference选项 , 以便控制客户端对服务器的选择) , 然后客户端以组播方式向同一链路范围内的所有 DHCPv6 服务器发送Request报文 , 该报文中包含客户端选择的 DHCPv6 服务器(高优先级)的DUID、客户端的DUID、客户端IPv6地址 。
IPv4自动获取有dhcp协议,那IPv6是否有dhcpv6协议

文章插图
 
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地址解析
IPv4自动获取有dhcp协议,那IPv6是否有dhcpv6协议

文章插图
 
CVM非首次接入腾讯云IPv6网络 , 通过 DHCPv6 自动获取 IPv6 地址的交互报文如下所示:
IPv4自动获取有dhcp协议,那IPv6是否有dhcpv6协议

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

文章插图
 
第二步 , DHCPv6 服务器(腾讯云虚拟组件)收到Confirm报文后 , 确认Confirm报文中所有的地址是否适用于该CVM 。
若Confirm报文中所有的IPv6地址都通过了确认 , 服务器回应确认成功的Reply报文(如果客户端收到确认失败的Reply报文 , 则发送Solicit报文 , 重新请求IPv6地址;) 。
第三步 , 客户端CVM收到确认成功的Reply报文后会发送地址冲突探测报文(Neighbor Solicitation) , 检查本链路范围内是否有其他客户端使用相同的IPv6地址 , 如果在指定时间内没有收到回应 , 表示该CVM可以使用此地址 。
至此 , 客户端通过DHCPv6协议首次和非首次自动获取IPv6地址的原理就解释清楚了 , 通过该文章也阐述了DHCPv6的6种常用类型报文的作用 , 希望小伙伴们多多尝试 , 加深理解 。




推荐阅读