一、ICMPV6
ICMPv6(Internet Control Message Protocol version 6),即互联网控制信息协议版本六,是为了与IPv6配套使用而开发的互联网控制信息协议。以下是关于ICMPv6的详细介绍:
一、基本功能
ICMPv6向源节点报告关于目的地址传输IPv6包的错误和信息,具有差错报告、网络诊断、邻节点发现和多播实现等功能。在IPv6中,ICMPv6实现了IPv4中ICMP、ARP和IGMP的功能。
二、报文类型
ICMPv6报文总体上被分为两种类型:差错报文和信息报文。
- 差错报文:用于报告在转发IPv6数据包过程中出现的错误。差错报文的识别是通过在消息类型字段值的高比特位中设置0,因此差错报文的报文类型从0到127。常见的差错报文包括目的不可达错误报文、数据包过大错误报文、超时报文和参数错误报文。
- 信息报文:用于实现同一链路上节点间的通信和子网内的组播成员管理等。信息报文的类型从128到255。常见的信息报文包括回送请求报文(Echo Request)和回送应答报文(Echo Reply),这两种报文通常用于PING功能中,以测试网络连通性。
三、报文格式
ICMPv6报文的基本格式包括类型(Type)字段、代码(Code)字段、校验和(Checksum)字段和报文体(Message Body)字段。
- 类型(Type):标识ICMPv6报文类型,它的值根据报文的内容来确定。
- 代码(Code):用于确定ICMPv6进一步的信息,对同一类型的报文进行了更详细的分类。
- 校验和(Checksum):用于检测ICMPv6的报文是否正确传送。
- 报文体(Message Body):用于返回出错的参数和记录出错报文的片段,帮助源节点判断错误的原因或是其它参数。
四、重要应用
- 路径MTU发现(Path MTU Discovery):ICMPv6通过发送长度越来越大的数据包到达目的节点,当一个给定的数据包长度超过到达目的节点路径上最小的MTU时,该数据包将被丢弃,并发送一个数据包太大的消息给源点。这样,源地址节点就知道了这条路径上最小的MTU为多少,从而可以调整数据包的大小以避免分片。
- 邻居发现协议(Neighbor Discovery Protocol, NDP):NDP是IPv6中非常核心的组件,它实现了IPv6中的地址解析协议(ARP)、ICMPv6路由器发现协议以及ICMPv6重定向消息的功能。通过NDP,IPv6节点可以发现链路上的路由器、获取路由器通告的信息、进行地址解析等。
- 组播收听发现协议(Multicast Listener Discovery, MLD):MLD用于子网内的组播成员管理。组播路由器向子网内的组播收听者发送组播收听查询消息,以获取组播收听者的状态。组播收听者则向组播路由器汇报当前状态,包括离开某个组播组等。
五、报文处理规则
- 当接收到ICMPv6差错报告报文时,如果无法识别具体的类型,必须将它交给上层协议模块进行处理。
- 当接收到ICMPv6信息报文时,如果无法识别具体的类型,必须将它丢弃。
- 所有的ICMPv6差错报告报文,都应该在IPv6所要求的最小MTU允许范围内,尽可能多地包括引发该ICMPv6差错报文的IPv6分组片段,以便给IPv6分组的源节点提供尽可能多的诊断信息。
RS和RA
全球单播地址的配置步骤如下:
1)客户端在配置好链路本地地址后,发送 RS 报文,请求路由器的前缀信息。
2)路由器收到 RS 报文后,发送 RA 报文,其中携带 M、O flag 用于指示进行何种类型配 置,A flag 用于无状态地址自动配置的前缀信息。同时路由器也会周期性地发送组播 RA 报文。
3)客户端根据 RA 报文携带 A flag,获取网关信息。如果是自动配置或者是无状态,则根据 M、O flag,选择 IPv6 地址及 DNS 的获取方式
路由器请求 RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送 RS 报文,网络上的设备将回应 RA 报文。RS 报文的 Tpye 字段值为 133。
路由器通告 RA(Router Advertisement)报文:每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送 RA 报文,RA 报文中会带有网络前缀信息,及其他一些标志位信息。RA 报文的 Type 字段值为 134
M flag:为 1 通过 DHCPv6 获取 IP 地址,为 0 则是通过 RA 报文获取地址。
O flag:为 1 通过 DHCPv6 获取 DNS 等其他配置,为 0 通过 RA 报文获取其他配置。
A flag:表示是否可以使用 RA 报文前缀信息配置无状态地址
个人理解:就是说路由器的wan选择有状态还是无状态,是由服务器决定的,如果服务器存在该服务,就通过RA报文进行告知
但是标准协议规定的是下挂设备通过RA的消息,自动进行有状态或者无状态的适配,现实情况则不是这样
二、DHCPV6
DHCPv6(Dynamic Host Configuration Protocol for IPv6)报文流程是指DHCPv6客户端和服务器之间的通信过程,它用于IPv6网络中动态分配IP地址和其他网络配置信息。
以下是DHCPv6报文流程的详细解释:
一、基本报文流程
-
Solicit(请求)报文:
- DHCPv6客户端启动时,首先发送Solicit报文以寻找可用的DHCPv6服务器。
- 该报文包含客户端的标识符和可能的配置选项,例如请求的IA_PD(用于分配给CPE LAN口的前缀)或IA_NA(请求分配一个完整的非临时的IPv6地址)。
- 客户端发送Solicit报文时,源端口为UDP的546,目的端口为547。
-
Advertise(广播)报文:
- DHCPv6服务器收到Solicit报文后,将向客户端发送Advertise报文。
- 该报文包含服务器提供给客户端的可用配置选项,例如可以分配的IPv6前缀或完整的IPv6地址。
- 服务器发送Advertise报文时,源端口为UDP的547,目的端口为546。
-
Request(请求)报文:
- 客户端收到Advertise报文后,将选择其中一个服务器并向其发送Request报文,请求使用特定配置选项。
- 如果客户端认可服务器提供的前缀或完整IPv6地址,则发出Request报文来要求服务器将这个地址分配给客户端。
-
Reply(回复)报文:
- 所选的DHCPv6服务器收到Request报文后,将向客户端发送Reply报文。
- 该报文确认分配给客户端的配置选项,并在地址池中将这个地址使用状态标记为已使用,不再分配给其他用户。
- 客户端收到Reply报文后,将使用其中的配置选项进行网络配置,并将其配置应用于IPv6接口。
- 示例报文
二、其他可能的报文交互
-
Confirm(确认)报文:
- 客户端在获得IPv6地址后,可能会发送Confirm报文以确认该地址是否仍然有效或适用于它所连接的链路。
-
Renew(续约)报文:
- 当客户端的IPv6地址租约即将到期时,它可以发送Renew报文来请求延长租约。
- 如果服务器同意延长租约,它将回复一个Reply报文。
-
Rebind(重新绑定)报文:
- 如果客户端在尝试续约时没有得到服务器的响应,它可能会发送Rebind报文来向其他可用的DHCPv6服务器请求延长此地址的租约。
-
Release(释放)报文:
- 客户端不再需要其IPv6地址时,可以发送Release报文来主动释放该地址。
-
Decline(拒绝)报文:
- 如果客户端发现服务器分配的地址与其他设备冲突,它将发送Decline报文来重新申请地址。
-
Information-Request(信息请求)报文:
- 客户端可以使用Information-Request报文来获取除IPv6地址之外的其他网络配置信息,如DNS服务器地址等。
-
Reconfigure(重新配置)报文:
- 服务器可以使用Reconfigure报文来通知客户端存在新的网络配置信息。
三、报文结构和组成
DHCPv6报文一般由四部分组成:消息头、选项(Options)、客户端标识(Client ID)和服务器标识(Server ID)。
- 消息头:包含消息类型及事务ID等信息。
- 选项:包含与配置相关的信息,例如IP地址、DNS服务器、路由等。
- 客户端标识:标识客户端发送者。
- 服务器标识:标识服务器发送者。
四、报文交互的注意事项
- 组播地址:DHCPv6使用组播地址来实现客户端和服务器之间的通信。常用的组播地址包括FF02::1:2(所有DHCPv6服务器和中继代理的组播地址)和FF05::1:3(所有DHCPv6服务器组播地址)。
- 端口号:DHCPv6报文承载在UDPv6上,客户端侦听的UDP目的端口号是546,服务器、中继代理侦听的UDP端口号是547。
- 快速分配过程:如果DHCPv6服务器支持快速分配地址,则可以在收到Solicit报文后直接返回Reply报文,为客户端分配IPv6地址和其他网络配置参数。这种过程省略了Advertise和Request报文,从而加快了地址分配的速度。
四、报文字段解释
DHCPv6唯一标识符(DUID)
DHCPv6引入了DUID(DHCP Unique Identifier)作为设备的唯一标识符,用于识别DHCPv6客户端和服务器。DUID在DHCPv6会话中保持不变,即使设备的接口硬件地址(如MAC地址)发生变化,DUID也不会改变。这提高了DHCPv6的稳定性和可靠性。
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位)和链路层地址,适用于具有稳定硬件地址,但无法获取时间信息的设备。
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前缀。
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端口作为目的地址和端口
三、SLAAC
无状态地址自动配置(SLAAC,StateLess Address AutoConfiguration)基于IPv6的邻居发现协议实现,工作过程为:
路由器通过RA通告前缀信息,有两种情况会进行RA通告:
路由器周期性向所有节点的多播地址(FF02::1)发送RA(Router Advertisement)消息,告知IPv6的前缀及其生命期、跳数限制等信息。
路由器收到节点启动时向所有路由器的多播地址(FF02::2)发送的RS(Router Solicitation)消息,回复RA消息。
节点将路由器的RA消息中的地址前缀与本地接口ID组合,生成IPv6单播地址。同时会自动配置节点(如将RA消息中的跳数限制设为本地发送IPv6报文的最大跳数)。
节点对生成的IPv6单播地址进行重复地址检测,检测方法为:
节点在本地链路上发送NS(Neighbor Solicitation,邻居请求)消息,目的地址为生成地址的被请求节点多播地址。如果没有收到NA(Neighbor Advertisement,邻居通告)消息,则认为地址不存在冲突,可以使用
【接口ID生成】
节点生成接口ID的方式,有系统生成(如Windows自动生成的LLA)和IEEE EUI-64方法(常用)等。IEEE EUI-64是通过MAC地址生成的接口ID,方法如下:
将MAC地址(48bit)第7bit取反,并在中间插入FFFE生成64bit的接口标识。
由于该方法生成接口ID始终不变,容易受到攻击,还有一种通过MD5算法生成不断变化的接口ID,与RA通告获取的前缀组合形成一个临时地址。
四、dhcpv6 和 SLAAC的区别和联系
DHCPv6(Dynamic Host Configuration Protocol for IPv6)和SLAAC(Stateless Address Autoconfiguration)是IPv6网络中用于地址自动配置的两种主要协议。以下是它们的区别和联系:
区别
-
工作原理:
- DHCPv6:基于客户端-服务器模型,需要DHCPv6服务器来管理地址池和其他配置信息。客户端通过发送请求报文(如Solicit报文)来获取IPv6地址、前缀和其他网络配置参数。服务器根据请求分配相应的资源,并通过回复报文(如Reply报文)将配置信息发送给客户端。
- SLAAC:无需服务器参与,基于IPv6邻居发现协议(NDP)实现。主机通过收听路由器发送的路由器通告(RA)报文来获取网络前缀,然后结合自身的接口ID生成IPv6地址。这是一个无状态的过程,因为服务器不需要保存和管理每个节点的状态信息。
-
配置复杂度:
- DHCPv6:配置相对复杂,需要设置DHCPv6服务器、客户端以及相关的网络参数。适用于大型网络或需要集中管理配置信息的场景。
- SLAAC:配置简单,无需额外的服务器设备。主机只需根据路由器通告的信息自动配置IPv6地址。适用于小型网络或物联网等应用场景。
-
可扩展性和灵活性:
- DHCPv6:支持有状态和无状态两种配置方式,能够满足不同场景的使用需求。同时,DHCPv6还提供了丰富的配置选项,如DNS服务器、默认网关等,增加了网络的灵活性和可扩展性。
- SLAAC:主要提供无状态地址自动配置功能,配置选项相对较少。但SLAAC可以与DHCPv6结合使用,通过DHCPv6获取除IPv6地址以外的其他配置信息。
联系
- 目标一致:DHCPv6和SLAAC都旨在实现IPv6地址的自动配置,简化网络管理过程,提高网络配置的效率。
- 互补性:在实际应用中,DHCPv6和SLAAC可以相互补充。例如,在大型网络中,可以使用DHCPv6进行集中管理;而在小型网络或物联网中,可以使用SLAAC进行无状态地址自动配置。同时,SLAAC还可以与DHCPv6结合使用,以满足更复杂的网络配置需求。
- 基于相同协议栈:DHCPv6和SLAAC都基于IPv6协议栈实现,遵循IPv6的相关标准和规范。
相关文章:
网络应用层之(1)DHCPv6协议_solicit报文可以为广播报文吗-CSDN博客
IPv6 邻居发现协议 --NDP 详解_ndp协议-CSDN博客