网络应用层之(1)DHCPv6协议

news2024/12/26 0:15:04

网络应用层之(1)DHCPv6协议


Author: Once Day Date: 2024年5月26日

一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…

漫漫长路,有人对你微笑过嘛…

全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CSDN博客。

参考文章:

  • 《TCP/IP详解卷一》
  • DHCPv6-原理浅谈+报文示例+简易配置(SLAAC+DHCPv6+PD前缀代理)–RFC8415_dhcpv6报文-CSDN博客
  • 一文读懂DHCP协议 && DHCPv6协议 - 知乎 (zhihu.com)
  • 奔涌的IPv6背后,DHCPv6协议你了解多少? - 知乎 (zhihu.com)
  • DHCPV6协议报文详解 - 华为 (huawei.com)
  • DHCPv6技术介绍-新华三集团-H3C
  • RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6) (rfc-editor.org)
  • Info-Finder(在线工具) 报文格式 (huawei.com)
  • DHCP - IP 报文格式大全 (huawei.com)
  • DHCPv6 - IP 报文格式大全 (huawei.com)

文章目录

  • 网络应用层之(1)DHCPv6协议
        • 1. 介绍
          • 1.1 DHCPv6协议介绍
          • 1.2 IPv6地址生命周期
          • 1.3 DHCPv6相关的RFC文档
        • 2. 报文格式
          • 2.1 DHCPv6报文格式
          • 2.2 DHCPv6中继报文格式
          • 2.3 DHCPv6报文类型
          • 2.4 DHCPv6身份关联(IA)
          • 2.5 DHCPv6唯一标识符(DUID)
          • 2.6 DHCPv6报文选项
        • 3. 工作流程
          • 3.1 DHCPv6基础交互流程
          • 3.2 DHCPv6网络组成和交互
          • 3.3 IPv6重复地址检测
        • 4. 总结

1. 介绍
1.1 DHCPv6协议介绍

DHCPv6(Dynamic Host Configuration Protocol for IPv6)是一种用于IPv6网络的自动配置协议,它允许IPv6主机自动获取IP地址、DNS服务器、域名等网络配置信息。DHCPv6协议是DHCP协议的IPv6版本,它建立在IPv6协议之上,提供了更多的功能和灵活性。

DHCPv6的发展历史:

  • 1998年,IETF(Internet Engineering Task Force)开始制定DHCPv6协议标准。
  • 2003年,DHCPv6的第一个版本RFC 3315发布,定义了DHCPv6的基本功能和消息格式。
  • 2007年,RFC 4649发布,引入了DHCPv6的无状态模式(Stateless DHCPv6),允许主机通过路由器通告获取配置信息。
  • 2010年,RFC 5970发布,定义了DHCPv6的选项和参数,扩展了DHCPv6的功能。
  • 2018年,RFC 8415发布,是DHCPv6协议的最新版本,合并了之前的RFC文档,并进行了一些优化和改进。

目前,DHCPv6已经得到广泛应用,尤其是在大型IPv6网络中,如企业网络、校园网等。DHCPv6为网络管理员提供了集中管理和配置IPv6主机的便利,简化了网络管理的复杂性。

DHCPv6的主要竞品是SLAAC(Stateless Address Autoconfiguration),SLAAC是IPv6协议内置的一种无状态地址自动配置机制,它允许IPv6主机根据路由器通告自动生成IPv6地址,而不需要DHCPv6服务器的参与

与DHCPv6相比,SLAAC具有以下特点:

  • 简单性,SLAAC不需要额外的服务器,配置过程更加简单。
  • 灵活性,SLAAC允许主机自行生成IPv6地址,不依赖于中心化的地址分配。
  • 扩展性,SLAAC可以更好地适应大规模的IPv6网络部署。

然而,SLAAC也有一些局限性,如无法提供其他网络配置信息(如DNS服务器),缺乏集中管理和控制等。因此,在实际应用中,DHCPv6和SLAAC经常结合使用,形成一种混合模式,称为"无状态DHCPv6"(Stateless DHCPv6)。在这种模式下,主机通过SLAAC获取IPv6地址,同时通过DHCPv6获取其他网络配置信息。

1.2 IPv6地址生命周期

在这里插入图片描述

IPv6主机的每个接口通常拥有多个地址,每个地址都拥有一组计时器,以指出相应地址可使用多长时间和目的作用。在IPv6中,地址分配包含一个首选生命周期和有效生命周期,满足上图所示的状态机。

  • 当一个地址第一次被使用时,进入一个临时或者乐观状态。
  • 处于临时状态的地址,仅能用于IPv6邻居发现协议,不可用于源和目的地址,并且一直进行重复地址检测(DAD),查看是否有其他节点使用该地址。
  • 乐观状态的地址可用于一组有限的用途(RFC 4429),直至DAD完成。
  • 处于首选状态时,可用于一般的用途(无限制使用)。
  • 当首选状态超时后,相应的首选地址将被废弃,此时可用于现有传输连接,但不能新建连接。
1.3 DHCPv6相关的RFC文档

以下是一些与DHCPv6相关的重要RFC文档:

  • RFC 3315 - Dynamic Host Configuration Protocol for IPv6 (DHCPv6),发布于2003年7月,定义了DHCPv6的基本协议、消息格式和选项,是DHCPv6协议的第一个正式标准,奠定了DHCPv6的基础。

  • RFC 3633 - IPv6 Prefix Options for Dynamic Host Configuration Protocol (DHCP) version 6,发布于2003年12月,定义了DHCPv6的前缀委派(Prefix Delegation)选项,允许DHCPv6服务器将IPv6前缀分配给客户端,用于创建子网。

  • RFC 3646 - DNS Configuration options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6),发布于2003年12月,定义了DHCPv6的DNS配置选项,允许DHCPv6服务器为客户端提供DNS服务器地址和DNS搜索列表。

  • RFC 3898 - Network Information Service (NIS) Configuration Options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6),发布于2004年10月,定义了DHCPv6的NIS配置选项,允许DHCPv6服务器为客户端提供NIS服务器地址和NIS域名。

  • RFC 4075 - Simple Network Time Protocol (SNTP) Configuration Option for DHCPv6,发布于2005年5月,定义了DHCPv6的SNTP配置选项,允许DHCPv6服务器为客户端提供SNTP服务器地址。

  • RFC 4242 - Information Refresh Time Option for Dynamic Host Configuration Protocol for IPv6 (DHCPv6),发布于2005年11月,定义了DHCPv6的信息刷新时间选项,允许DHCPv6服务器指定客户端刷新配置信息的时间间隔。

  • RFC 4649 - Dynamic Host Configuration Protocol for IPv6 (DHCPv6) Relay Agent Remote-ID Option,发布于2006年8月,定义了DHCPv6中继代理的Remote-ID选项,允许DHCPv6中继代理向DHCPv6服务器传递客户端的标识信息。

  • RFC 5970 - DHCPv6 Options for Network Boot,发布于2010年9月,定义了DHCPv6的网络引导选项,允许DHCPv6服务器为客户端提供网络引导所需的参数,如引导文件和引导服务器地址。

  • RFC 6221 - Lightweight DHCPv6 Relay Agent,发布于2011年5月,定义了轻量级DHCPv6中继代理(LDRA),简化了DHCPv6中继代理的实现,适用于资源受限的设备。

  • RFC 8415 - Dynamic Host Configuration Protocol for IPv6 (DHCPv6) bis,发布于2018年11月,是DHCPv6协议的最新版本,合并和更新了之前的DHCPv6 RFC文档,包括RFC 3315、RFC 3633、RFC 3646、RFC 3898、RFC 4075、RFC 4242和RFC 4649,修复了一些问题,并引入了新的特性和改进。

2. 报文格式
2.1 DHCPv6报文格式

DHCPv6协议使用UDP传输,客户端使用546端口,服务器使用547端口

DHCPv6报文格式由固定长度的字段和可变长度的选项字段组成,如下所示

在这里插入图片描述

各字段说明如下:

  • msg-type(1字节),表示DHCPv6报文的类型,如Solicit、Advertise、Request等。
  • transaction-id(3字节),用于标识一个DHCPv6事务,客户端生成一个唯一的事务ID,服务器在响应中使用相同的事务ID。
  • options(可变长度),包含DHCPv6的各种选项,如客户端标识符、服务器标识符、请求的参数等。选项的格式为TLV(Type-Length-Value)。
2.2 DHCPv6中继报文格式

DHCPv6中继代理用于转发DHCPv6报文,以支持客户端和服务器不在同一链路的情况。

DHCPv6中继报文在原有DHCPv6报文的基础上,添加了中继代理消息选项。

在这里插入图片描述

各字段说明如下:

  • msg-type(1字节),对于中继代理发送的报文,类型为Relay-Forward(12),对于中继代理接收的报文,类型为Relay-Reply(13)。
  • hop-count(1字节),记录报文经过的中继代理数量,每经过一个中继代理,该字段加1。
  • link-address(16字节),中继代理连接客户端的链路地址,通常是中继代理面向客户端的接口IPv6地址。
  • peer-address(16字节),客户端或下一跳中继代理的IPv6地址。
  • DHCPv6 Relay Message(可变长度), 必须包含名为"Relay Message option"的选项,当然,中继可以添加其他选项。
2.3 DHCPv6报文类型

以下是DHCPv6常见消息类型及其与DHCPv4消息的对应关系:

DHCPv6消(msg-type)DHCPv4消息作用
Solicit (1)DHCPDISCOVER客户端请求分配IPv6地址和配置参数
Advertise (2)DHCPOFFER服务器响应客户端的Solicit消息,提供可用的IPv6地址和配置参数
Request (3)DHCPREQUEST客户端请求从服务器获取IPv6地址和配置参数
Confirm (4)DHCPREQUEST客户端确认之前获取的IPv6地址和配置参数是否仍然有效
Renew (5)DHCPREQUEST客户端请求更新IPv6地址租约和配置参数
Rebind (6)DHCPREQUEST客户端在Renew失败后,请求任意服务器更新IPv6地址租约和配置参数
Reply (7)DHCPACK/DHCPNAK服务器响应客户端的Request、Confirm、Renew或Rebind消息
Release (8)DHCPRELEASE客户端释放分配的IPv6地址和配置参数
Decline (9)DHCPDECLINE客户端声明分配的IPv6地址已经被使用或无效
Reconfigure (10)FORCERENEW服务器通知客户端重新获取配置参数
Information-Request (11)DHCPINFORM客户端请求获取配置参数,但不请求分配IPv6地址
Relay-Forward (12)无对应消息中继代理将客户端的DHCPv6消息转发给服务器或下一跳中继代理
Relay-Reply (13)无对应消息服务器或中继代理将响应消息发送给上一跳中继代理,最终到达客户端

注意事项:

  • DHCPv6引入了一些新的消息类型,如Confirm、Reconfigure、Relay-Forward和Relay-Reply,这些消息在DHCPv4中没有对应的消息类型。
  • DHCPv6中的Renew和Rebind消息在功能上对应于DHCPv4中的DHCPREQUEST消息,但在DHCPv6中被细分为两种不同的消息类型。
  • DHCPv6中的Information-Request消息对应于DHCPv4中的DHCPINFORM消息,用于获取配置参数,但不分配IPv6地址。
  • 除了上述消息外,LEASEQUERY(租约查询)类消息并没有列出来。
2.4 DHCPv6身份关联(IA)

DHCPv6中引入了身份关联(Identity Association,IA)的概念,用于将一组相关的IPv6地址和配置参数关联起来,方便管理和续约。DHCPv6定义了三种类型的IA:

  • IA_NA(Identity Association for Non-temporary Addresses),用于为客户端分配一个或多个非临时IPv6地址

    • 每个IA_NA都有一个唯一的IAID(Identity Association Identifier),由客户端生成,用于标识该IA_NA。

    • IA_NA可以包含多个IPv6地址,每个地址都有自己的首选生存期(Preferred Lifetime)和有效生存期(Valid Lifetime)。

    • 客户端可以在一个DHCPv6请求中包含多个IA_NA,以获取多组IPv6地址。

  • IA_TA(Identity Association for Temporary Addresses),用于为客户端分配一个或多个临时IPv6地址

    • 临时地址通常用于保护隐私,定期更换,不用于长期稳定的通信。
    • 与IA_NA类似,每个IA_TA都有一个唯一的IAID,可以包含多个临时IPv6地址。
    • 客户端可以在一个DHCPv6请求中包含多个IA_TA,以获取多组临时IPv6地址。
  • IA_PD(Identity Association for Prefix Delegation),用于为客户端分配一个或多个IPv6前缀,客户端可以使用这些前缀创建子网并分配地址

    • IA_PD主要用于支持IPv6的前缀委派(Prefix Delegation),允许DHCPv6服务器将IPv6前缀分配给客户端,客户端再将这些前缀划分为子前缀,分配给下游设备。
    • 每个IA_PD都有一个唯一的IAID,可以包含多个IPv6前缀。
    • 客户端可以在一个DHCPv6请求中包含多个IA_PD,以获取多组IPv6前缀。

通过使用不同类型的IA,DHCPv6可以满足客户端对非临时地址、临时地址和前缀委派的不同需求。

2.5 DHCPv6唯一标识符(DUID)

DHCPv6引入了DUID(DHCP Unique Identifier)作为设备的唯一标识符,用于识别DHCPv6客户端和服务器。DUID在DHCPv6会话中保持不变,即使设备的接口硬件地址(如MAC地址)发生变化,DUID也不会改变。这提高了DHCPv6的稳定性和可靠性。

DUID由两部分组成:DUID类型(2字节)和标识符(可变长度)

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               DUID-Type        |                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                              |
.                                                              .
.                           Identifier                         .
.                                                              .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

DHCPv6定义了三种主要的DUID类型:

  • DUID-LLT(Link-Layer address plus Time),DUID-Type为1。标识符包括硬件类型(16位)、时间(32位,自2000年1月1日以来的秒数)和链路层地址(如MAC地址),适用于具有稳定硬件地址的设备。

  • DUID-EN(Enterprise Number),DUID-Type为2。标识符包括IANA分配的企业号(32位)和企业特定的标识符(可变长度),适用于没有稳定硬件地址,但可以分配唯一标识符的设备。

  • DUID-LL(Link-Layer address),DUID-Type为3。标识符包括硬件类型(16位)和链路层地址,适用于具有稳定硬件地址,但无法获取时间信息的设备。

2.6 DHCPv6报文选项

以下是DHCPv6可用选项:

选项名称code描述和作用
CLIENTID1客户端标识符,用于标识DHCPv6客户端。通常基于客户端的DUID(DHCP Unique Identifier)构建。
SERVERID2服务器标识符,用于标识DHCPv6服务器。通常基于服务器的DUID构建。
IA_NA3Identity Association for Non-temporary Addresses,用于请求/分配非临时的IPv6地址。
IA_TA4Identity Association for Temporary Addresses,用于请求/分配临时的IPv6地址。
IAADDR5IA Address,与IA_NA或IA_TA选项一起使用,用于指定分配的IPv6地址及其相关参数。
如首选和有效生存期。
ORO6Option Request Option,客户端用于请求特定的DHCPv6选项。
PREFERENCE7服务器的优先级,数值越高表示优先级越高。
ELAPSED_TIME8客户端启动DHCPv6交互后经过的时间,以10毫秒为单位。
RELAY_MSG9中继代理转发的原始DHCPv6消息。
AUTH11认证选项,用于DHCPv6消息的完整性检查和身份验证。
UNICAST12服务器用于指示客户端将后续消息发送到特定的单播地址,而不是多播地址。
STATUS_CODE13表示DHCPv6操作的状态,如成功、未分配地址等。
RAPID_COMMIT14快速提交选项,客户端请求服务器使用两步握手快速分配地址,而不是标准的四步握手。
USER_CLASS15用户类别,客户端用于将自己标识为特定的用户类别,服务器可以基于此进行不同的处理。
VENDOR_CLASS16供应商类别,客户端用于标识设备的制造商或供应商,服务器可以基于此提供特定的配置。
VENDOR_OPTS17供应商特定选项,用于传递供应商定义的配置信息。
INTERFACE_ID18接口标识符,中继代理用于标识客户端消息的接收接口。
RECONF_MSG19重配置消息,服务器用于通知客户端有新的配置可用。
客户端应该发起Renew或Information-request交互以获取更新的配置。
RECONF_ACCEPT20重配置接受选项,客户端用于指示是否接受服务器的重配置消息。
DNS_RECURSIVE_NAME_SERVER23DNS递归名称服务器选项,用于向客户端提供一个或多个DNS递归解析服务器的IPv6地址。
DNS_DOMAIN_SEARCH_LIST24DNS域搜索列表选项,用于向客户端提供一个域名后缀列表,用于补充非完全限定域名(Non-FQDN)。
IA_PD25Identity Association for Prefix Delegation,前缀委派标识关联选项,用于请求/分配IPv6前缀。
IAPREFIX26IA Prefix,与IA_PD选项一起使用,用于指定委派的IPv6前缀及其相关参数,如首选和有效生存期。
RELAY_AGENT_REMOTE_ID37中继代理远程ID选项,用于标识连接到中继代理的客户端的远程设备。
通常包含远程设备的标识信息,如电路ID或订阅者ID。
RELAY_AGENT_SUBSCRIBER_ID38中继代理订阅者ID选项,用于标识连接到中继代理的客户端的订阅者。
通常包含订阅者的标识信息,如用户名或账号。
3. 工作流程
3.1 DHCPv6基础交互流程

在这里插入图片描述

DHCPv6协议的交互过程如下:

  • 客户机接入网络后,通过ICMPv6路由通告(RA)消息获知DHCPv6服务器的操作模式。假设RA消息中的M(可管理地址配置)和O(其他配置)标志都被置位,表示同时支持无状态和有状态地址配置模式。M关闭且O启用表示客户机使用无状态DHCPv6。

  • 客户机发送Solicit报文到FF02::1:2多播地址(所有DHCP中继和服务器),UDP目的端口547,源端口546。报文中包含客户机DUID、IA_NA(非临时地址请求)等选项。二层mac使用IPv6多播mac(33:33:00:01:00:02)

  • DHCP服务器收到Solicit后,回复Advertise单播报文给客户机。报文包含服务器的DUID、客户机的DUID、客户机IA_NA对应的IAAddress(分配的IPv6地址)等选项,表明可以为客户机提供IPv6地址。

  • 客户机收到一个或多个Advertise报文后,选择其中一个服务器,向其发送Request报文请求正式分配地址。报文目的地址、端口与Advertise相同,并包含请求分配的IA地址等信息。

  • 服务器收到Request报文后,正式分配地址,并回复Replay报文给客户机,确认地址分配。报文包含分配的IPv6地址、preferred和valid lifetime等。

  • 客户机收到Replay报文,提取分配的IPv6地址,并将地址配置到网卡上

  • 客户机启动DAD(Duplicate Address Detection)重复地址检测流程。向被分配的IPv6地址发送邻居请求(NS)报文,如果没有收到对应的邻居通告(NA)报文,说明地址没有冲突,可以正常使用。如果收到NA报文,则说明地址冲突,需要重新发起DHCP流程或手工指定新地址。

整个DHCPv6交互过程中,关键在于Solicit报文请求分配地址,Advertise/Replay报文回复确认可用地址,Request报文则是正式请求使用服务器Advertise的地址。

报文方面,Solicit和Request使用link-local地址作为源地址(也有可能是全零IP地址),发送到FF02::1:2多播地址。后续Advertise、Replay都是在Solicit报文建立的UDP单播连接上,使用Solicit的源地址和547端口作为目的地址和端口

下面是window DHCPv6获取地址的报文截图:

在这里插入图片描述

其中广播报文(Solicit)详细信息如下:

在这里插入图片描述

单播报文(Reply)详细信息如下:

在这里插入图片描述

3.2 DHCPv6网络组成和交互

本节内容源自华三IPv6技术介绍文档:DHCPv6技术介绍-新华三集团-H3C

典型的DHCPv6组网架构如下所示:

在这里插入图片描述

下面是各节点介绍:

  • DHCPv6客户端:动态获取IPv6地址、IPv6前缀或其他网络配置参数的设备。

  • DHCPv6服务器:负责为DHCPv6客户端分配IPv6地址、IPv6前缀和其他网络配置参数的设备。DHCPv6服务器不仅可以为DHCPv6客户端分配IPv6地址,还可以为其分配IPv6前缀。

    DHCPv6服务器为DHCPv6客户端分配IPv6前缀后,DHCPv6客户端向所在网络发送包含该前缀信息的RA消息,以便网络内的主机根据该前缀自动配置IPv6地址

  • DHCPv6中继:DHCPv6客户端通过本地链路范围的组播地址与DHCPv6服务器通信,以获取IPv6地址和其他网络配置参数。

如果服务器和客户端不在同一个链路范围内,则需要通过DHCPv6中继来转发报文,这样可以避免在每个链路范围内都部署DHCPv6服务器。

DHCPv6服务器为客户端分配地址/前缀的过程分为两类:交互两个消息的快速分配过程和交互四个消息的分配过程

(1) 交互四个消息的流程在3.1节中已经介绍,交互两个消息的快速分配过程如下:

在这里插入图片描述

  • DHCPv6客户端在发送的Solicit消息中携带Rapid Commit选项,标识客户端希望服务器能够快速为其分配地址/前缀和网络配置参数。
  • 如果DHCPv6服务器支持快速分配过程,则直接返回Reply消息,为客户端分配IPv6地址/前缀和其他网络配置参数。
  • 如果DHCPv6服务器不支持快速分配过程,则采用交互四个消息的分配过程为客户端分配IPv6地址/前缀和其他网络配置参数。

(2) 地址/前缀租约更新(renew单播报文)过程如下

在这里插入图片描述

  • DHCPv6服务器分配给客户端的IPv6地址/前缀具有一定的租借期限。在有效生命期到达之前,如果DHCPv6客户端希望继续使用该地址/前缀,则需要更新地址/前缀租约。
  • 地址/前缀租借时间到达时间T1(推荐值为首选生命期Preferred Lifetime的一半)时,DHCPv6客户端会向为它分配地址/前缀的DHCPv6服务器单播发送Renew报文,以进行地址/前缀租约的更新。
  • 如果客户端可以继续使用该地址/前缀,则DHCPv6服务器回应续约成功的Reply报文。
  • 如果该地址/前缀不可以再分配给该客户端,则DHCPv6服务器回应续约失败的Reply报文。

(3) 地址/前缀租约更新(rebind多播报文)过程如下:

在这里插入图片描述

  • 如果在T1时发送Renew请求更新租约,但是没有收到DHCPv6服务器的回应报文,则DHCPv6客户端会在T2(推荐值为首选生命期的0.8倍)时,向所有DHCPv6服务器组播发送Rebind报文请求更新租约
  • 如果客户端可以继续使用该地址/前缀,则DHCPv6服务器回应续约成功的Reply报文。
  • 如果该地址/前缀不可以再分配给该客户端,则DHCPv6服务器回应续约失败的Reply报文。
  • 如果DHCPv6客户端没有收到服务器的应答报文,则到达有效生命期后,客户端停止使用该地址/前缀。

(4) DHCPv6无状态配置过程如下

在这里插入图片描述

  • 地址无状态自动配置是指节点根据路由器发现/前缀发现所获取的信息,自动配置IPv6地址
  • 客户端以组播的方式向DHCPv6服务器发送Information-request报文,该报文中携带Option Request选项,指定客户端需要从服务器获取的配置参数。
  • 服务器收到Information-request报文后,为客户端分配网络配置参数,并单播发送Reply报文将网络配置参数返回给客户端。
  • 客户端检查Reply报文中提供的信息,如果与Information-request报文中请求的配置参数相符,则按照Reply报文中提供的参数进行网络配置。
  • 如果接收到多个Reply报文,客户端将选择最先收到的Reply报文,并根据该报文中提供的参数完成客户端无状态配置。

(5) DHCPv6中继工作过程

在这里插入图片描述

  • DHCPv6客户端向所有DHCPv6服务器和中继的组播地址FF02::1:2发送请求。
  • DHCPv6中继接收到请求后,将其封装在Relay-forward报文的中继消息选项(Relay Message Option)中,并将Relay-forward报文发送给DHCPv6服务器。
  • DHCPv6服务器从Relay-forward报文中解析出客户端的请求,为客户端选取IPv6地址和其他参数,构造应答消息,将应答消息封装在Relay-reply报文的中继消息选项中,并将Relay-reply报文发送给DHCPv6中继。
  • DHCPv6中继从Relay-reply报文中解析出服务器的应答,转发给DHCPv6客户端。
3.3 IPv6重复地址检测

IPv6地址重复检测(Duplicate Address Detection, DAD)是IPv6中的一个重要机制,用于确保在链路上分配或配置的IPv6地址是唯一的,不会与其他节点的地址冲突:

  • 地址分配,当一个IPv6节点通过无状态地址自动配置(SLAAC)、DHCPv6或手动配置获得一个IPv6地址时,该地址初始状态为"暂定(Tentative)"。

  • 发送邻居请求(NS),节点将其暂定地址作为目标地址,发送一个邻居请求(Neighbor Solicitation, NS)消息。

    这个NS消息的目的地址是被检测地址的请求节点多播地址,即FF02::1:FF00:0/104与被检测地址的最后24位相结合得到的地址。这个特殊的多播地址将NS消息传递给链路上可能使用同一地址的所有节点,NS消息的源地址字段使用未指定地址(:😃

  • 等待邻居通告(NA),发送NS消息后,节点进入DAD检测状态,等待一段时间(通常为1秒)。

    如果在此期间内没有收到对应的邻居通告(Neighbor Advertisement, NA)消息,则认为该地址没有冲突,可以安全使用。节点将地址状态标记为"首选(Preferred)",并开始正常使用该地址进行通信。

  • 处理地址冲突,如果节点在等待期间收到了一个或多个对应的NA消息,则表明该地址已经被其他节点使用,存在地址冲突。

    此时,节点不能使用这个地址,需要采取以下措施之一:

    • 如果地址是通过SLAAC或DHCPv6获得的,将停止使用该地址,并可能需要重新启动地址分配过程以获取新的地址。
    • 如果地址是手动配置的,节点将停止使用该地址,并需要管理员手动intervene以解决冲突。
  • 地址状态转换,一旦地址通过DAD检测并被标记为"首选",它将在其有效生存期内保持此状态。

    • 当地址的首选生存期到期后,其状态将转换为"弃用(Deprecated)",此时仍可以继续使用该地址进行现有通信,但不应再用于新的通信。
    • 当地址的有效生存期也到期后,其状态将转换为"无效(Invalid)",此时地址将被完全删除。不能再使用。

DAD利用IPv6的多播和邻居发现协议,在地址分配后自动执行检测过程,可以避免了地址冲突带来的通信问题。

4. 总结

DHCPv6协议目前主流路由器和网关设备都以支持,很多家庭网络都有分配IPv6地址,适当了解是非常有必要的。

相比于DHCPv4,报文格式和相关的字段简洁很多,但是在IPv6地址分配和IA、DUID、无状态配置和本地链路地址方面,会复杂许多,这是因为IPv6地址协议比IPv4实现要更加复杂,考虑了诸如隐私和网络自动化配置等因素。

随着时间发展,IPv4会慢慢向IPv6过滤,那些IPv6中晦涩难懂,十分罕见的概念,也许以后也会习以为常。







Alt

Once Day

也信美人终作土,不堪幽梦太匆匆......

如果这篇文章为您带来了帮助或启发,不妨点个赞👍和关注,再加上一个小小的收藏⭐!

(。◕‿◕。)感谢您的阅读与支持~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1698145.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20240526怎样将windows的屏幕复制到第二屏

百度:WIN10 第二显示器 COPY https://zhidao.baidu.com/question/761454546683111004.html 20240526怎样将windows的屏幕复制到第二屏  我来答 分享 举报 2个回答#热议# 海关有哪些禁运商品?查到后怎么办? 华硕服务 2022-07-05 百度认证:…

【找出第 K 大的异或坐标值】python

4层循环暴力超时 class Solution:def kthLargestValue(self, matrix: List[List[int]], k: int) -> int:nums[]for a in range(len(matrix)):for b in range(len(matrix[0])):num0for i in range(a1):for j in range(b1):num^matrix[i][j]nums.append(num)nums.sort()retu…

python web自动化(分布式测试Grid)

Grid介绍 Selenium Grid 是 Selenium 提供的⼀个⼯具,⽤于⽀持在多台计算机上并⾏运⾏测试。 它允许将测试分发到不同的机器和浏览器组合上,同时收集结果。 1.并⾏执⾏测试⽤例:在不同的机器上并⾏执⾏测试⽤例,从⽽加速整个测试过…

安卓自定义控件(视图、改造控件、通知Notification、界面绘制)

视图的构建过程 此节介绍一个视图的构建过程,包括:如何编写视图的构造方法,4个构造方法之间有什么区别;如何测量实体的实际尺寸,包含文本、图像、线性视图的测量方法;如何利用画笔绘制视图的界面&#xff…

千帆【API接入】自定义组件简明教程

千帆【API接入】自定义组件简明教程 大家好,我是 JavaRoom,今天来给大家做一个自定义API接入来是心啊遣返组件创建案例简明教学。 1.准备工作 1.1 一个不欠费的千帆账号 财务总览地址:https://console.bce.baidu.com/billing/#/account/i…

ionic关于@angular版本报错解决方案(有效)

最近学校要求使用ionicangular学习,但是出现下面问题,这里我就分享一个我亲测有效的解决方案,提供学习(在VScode中) npm error code ERESOLVE npm error ERESOLVE could not resolve npm error npm error While resol…

【调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cpolar】

调试笔记-系列文章目录 调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cpolar 文章目录 调试笔记-系列文章目录调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cpolar 前言一、调试环境操作系统:Windows 10 专业版调试环境调试目标 二、调试步骤…

1107 老鼠爱大米

solution 记录每组的最大值&#xff0c;并比较组间的最大值胖胖鼠~ #include<iostream> using namespace std; int main(){int n, m, ans, fat -1, x;scanf("%d%d", &n, &m);for(int i 0; i < n; i){ans -1;for(int j 0; j < m; j){scanf(…

Spring:面向切面(AOP)

1. 代理模式 二十三种设计模式中的一种&#xff0c;属于结构型模式。它的作用就是通过提供一个代理类&#xff0c;让我们在调用目标方法的时候&#xff0c;不再是直接对目标方法进行调用&#xff0c;而是通过代理类**间接**调用。让不属于目标方法核心逻辑的代码从目标方法中剥…

书生·浦语第二期-笔记2

课程链接&#xff1a;https://github.com/InternLM/Tutorial/tree/camp2 视频地址&#xff1a;轻松玩转书生浦语大模型趣味Demo_哔哩哔哩_bilibili 大模型及InternLM介绍 大模型&#xff1a;人工智能领域中参数数量巨大、拥有庞大计算能力和参数规模的模型 特点&#xff1a…

Three.js——二维平面、二维圆、自定义二维图形、立方体、球体、圆柱体、圆环、扭结、多面体、文字

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

【C++ —— 哈希】学习笔记 | 模拟实现封装unordered_map和unordered_set

文章目录 前言一、unordered系列关联式容器1.1 unordered_map1.2 unordered_set 二、底层结构2.1哈希概念&#xff08;哈希是一种算法思想&#xff09;2.2哈希冲突2.3 解决哈希冲突方法&#xff1a;1.直接定址法&#xff08;值和位置关系是唯一关系&#xff0c;每个人都有唯一位…

站在ESG“20+”新起点上,看中国ESG先锋探索力量

全链减碳、建设绿色工厂、打造零碳产品、守护生物多样性、向受灾群众捐助……不知你是否察觉&#xff0c;自“双碳”目标提出以来&#xff0c;一股“可持续发展热潮”正覆盖各行各业&#xff0c;并且渗透到我们衣食住行的方方面面。在资本市场&#xff0c;ESG投资热潮更是席卷全…

VMware虚拟机-设置系统网络IP、快照、克隆

1.设置网络IP 1.点击右上角开关按钮-》有线 已连接-》有线设置 2.手动修改ip 3.重启或者把开关重新关闭开启 2.快照设置 快照介绍&#xff1a; 通过快照可快速保存虚拟机当前的状态&#xff0c;后续可以使用虚拟机还原到某个快照的状态。 1.添加快照(需要先关闭虚拟机) 2.在…

数据结构(六)图

2024年5月26日一稿(王道P220) 6.1 图的基本概念 6.1.1 图的定义 6.2 图的存储及基本操作 6.2.1邻接矩阵法 6.2.2 邻接表

【开源】大学生竞赛管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、系统介绍 学生管理模块 教师管理模块 竞赛信息模块 竞赛报名模块 二、系统截图 三、核心代码 一、系统介绍 基于Vue.js和SpringBoot的大学生竞赛管理系统&#xff0c;分为管理后台和用户网页端&#xff0c;可以给管理员、学生和教师角色使用&#xff0c;包括学…

基于双差分值和RR间隔处理的心电信号R峰检测算法(MATLAB R2018A)

心电信号中的R峰是确定心率和节律、以及检测其它波形特征点&#xff08;图1A&#xff09;的基础。R峰的准确检测是心率变异性分析、心拍分割和心律失常识别重要的处理步骤。 现有的心电信号R峰检测方法主要为基于规则的决策法和基于深度学习的检测方法。基于规则的决策法通常对…

Liunx学习随笔

Linux学习随笔 一.前期准备1.安装Vmware Workstation软件2.下载linux镜像3.安装操作系统 夕阳无限好&#xff0c;只是近黄昏&#xff0c;时隔一年&#xff0c;重新提笔 没有比脚更远的路&#xff0c;没有比人更高的山 一.前期准备 1.安装Vmware Workstation软件 下载地址&am…

香橙派AIpro(OrangePi AIPro)开发板初测评

开发板简介 最近&#xff0c;我拿到手一款Orange Pi AI Pro 开发板&#xff0c;它是香橙派联合华为精心打造的高性能AI 开发板&#xff0c;最早发布于2023年12月&#xff0c;其搭载了昇腾AI 处理器&#xff0c;可提供8TOPS INT8 的计算能力&#xff0c;内存提供了8GB 和16GB两…

vue数据持久化仓库

本文章是一篇记录实用性vue数据持久化仓的使用&#xff01; 首先在src中创建store文件夹&#xff0c;并创建一个根据本页面相关的名称&#xff0c; 在终端导入&#xff1a;npm i pinia 和 npm i pinia-plugin-persistedstate 接下来引入代码&#xff1a; import { defineSt…