导语 | 随着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具备以下优势:

  • 更好控制 IPv6 地址的分配,DHCPv6 方式不仅可以记录为 IPv6 主机分配的地址,还可以为特定的 IPv6 主机分配特定的地址,以便于网络管理。

  • DHCPv6 支持为网络设备分配 IPv6 前缀,便于全网络的自动配置和网络层次性管理。

  • 除了为 IPv6 主机分配 IPv6 地址和前缀外,还可以分配DNS服务器 IPv6 地址等网络配置参数。

2. DHCPv6报文格式

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

3. DHCPv6字段注释

  • msg-type:长度8比特,表示报文的类型,总共定义了13种消息类型。

  • transaction-id:长度24比特,表示 DHCPv6 客户端随机生成的交互ID(服务端发起的报文交互ID为0),用来标识一次来回交互的 DHCPv6 报文。例如Solicit/Advertise报文为一次交互,Request/Reply报文为另外一次交互,两者有不同的交互ID。

  • options:根据消息类型不一样长度可变,表示 DHCPv6 的可选字段。此字段包含了 DHCPv6 服务器分配给 IPv6 主机的配置信息,如客户端标识、服务器标识或有效生命周期等信息。

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报文:

  • DHCPv6 服务器发送携带了地址和配置信息的Reply消息来回应从 DHCPv6 客户端收到的Solicit、Request、Renew、Rebind报文。

  • DHCPv6 服务器发送携带配置信息的Reply消息来回应收到的Information-Request报文。

  • 用来回应 DHCPv6 客户端发来的Confirm、Release、Decline报文。

(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信息进行判断:

  • 若报文中携带的服务端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种常用类型报文的作用,希望小伙伴们多多尝试,加深理解。

点击文末「阅读原文」,即可报名腾讯技术开放日-云视频会议专场~

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

  1. IPv6下DHCPv6协议(RFC3315)详细介绍

    DHCPv6 详细介绍 前言 一.基础部分 二.DHCPv6的进阶 1.相关术语/概念(Term) 2.几个相关的算法/规则 3.Message交换过程详述 4.基础的几个option介绍(RFC33 ...

  2. IPV6邻居发现协议(NDP)

    概述 NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARP.ICMP路由器发现和ICMP重定向等协议,并对它们作了改进.作 ...

  3. IPv6邻居发现协议--NDP详解

    一.ICMPv6 -Internet控制报文协议 ICMPv6是IPV6的基础协议之一,用于向源节点传递报文转发的信息或错误 协议类型号(即:IPv6Next Header)为58 icmpv6可以提 ...

  4. IPv6邻居发现协议ND学习笔记

    我们都或多或少的听说过IPv6的地址是可以自动生成的吧,那么这个自动生成是怎么生成的大家知道吗,我们来ND协议里一起寻找答案吧! 一,ND协议定义 ND(邻居发现协议)协议是IPv6非常重要的基础协议 ...

  5. ipv6协议提供的服务器,ipv6地址获取协议

    ipv6地址获取协议 内容精选 换一换 IPv6的使用,可以有效弥补IPv4网络地址资源有限的问题.如果当前云服务器使用IPv4,那么启用IPv6后,云服务器可在双栈模式下运行,即云服务器可以拥有两个 ...

  6. ipv6协议与网络服务器有关,IPv6与IPv4协议网络中的双工通信差异

    我们都知道IPv6与IPv4协议网络的本质区别.那么在进行双向会话通信过程中两者有什么差异呢?下面我们就来详细说一下这方面的内容.Ipv6和IPv4协议动态NAT一样,NAT-PT只能用于由IPv6网 ...

  7. linux ipv6邻居信息,IPv6邻居发现协议基本原理

    IPv6邻居发现协议提供下列功能:无服务器自动配置.路由器发现.前缀发现.解析.邻居不可达检测.链路MTU发现.下一跳决定和重复检测等. IPv6邻居发现协议定义了5种ICMPv6包: 路由器请求(R ...

  8. IPV6 邻居发现协议(NDP)

    IPV6除了显著增加了地址空间外,另一个最显著的特征就是它的即插即用性. 邻居发现协议(Neighbor Discovery Protocol,NDP)就是使用以下的功能实现即插即用特性的协议: 路由 ...

  9. IPv6邻居发现协议NDP

    邻居发现协议NDP 邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议.邻居发现协议替代了IPv4的ARP(Address Resolu ...

最新文章

  1. 动态代理-JDK_proxycglib
  2. 3D数学基础:图形与游戏开发---随笔三
  3. Mac的文件比对工具:Meld、Beyond Compare
  4. 函数stat、fstat、fstatat和lstat
  5. 任务管理器启动资源管理器
  6. Power Bi:零售数据可视化
  7. iPhone平台下的游戏开发
  8. python数据结构之图深度优先和广度优先
  9. 计算机网路网络层之IP协议(4)——有类IP地址
  10. 2018先进制造业产业发展白皮书
  11. 运筹学_大M法_week4
  12. word域代码 乱序
  13. AutoIt安装下载及使用总结
  14. 给普通人的Python——第四章
  15. 微信小程序开发视频加载:[渲染层网络层错误] Failed to load media
  16. D盘需要管理员权限问题
  17. jzoj(senior)4208. 【五校联考1day1】线段树什么的最讨厌了
  18. win10——戴尔笔记本电脑插上耳机没有声音电脑外放
  19. 15位身份证号和18位身份证号截取生日
  20. 光纤到桌面即FTTD综合布线方法

热门文章

  1. STM8的程序更换不同芯片时要注意的地方
  2. 打开ppt时显示正在与服务器,1.在安装时显示无法连接到服务器或类似的网络出错信息.ppt...
  3. Android SVG矢量资源的使用方法
  4. HDU 1713 相遇周期【这也算数学吗?】
  5. 2020年最新前端框架大全,Web工程师人手一份
  6. 【JZOJ 4821】 打膈膜
  7. 内网穿透工具-NPS
  8. 阿里旺旺输入框内光标排在右侧,想让其排在左侧解决办法
  9. Prometheus 监控系统
  10. 联想ideapad700-15ISK拆机清灰+迁移win10 arch双系统 (上篇)