` ipv6(一) | 听云轩

ipv6(一)

    ipv6动态主机配置协议DHCPv6是针对ipv6编制方案设计,为主机分配ipv6地址/前缀和其他网络配置参数。

三种角色

DHCPV6 CLIENT

    通过dhcpv6服务器进行交互,获取ipv6地址/前缀和网络配置信息,完成自身的地址配置功能。

DHCPV6 RELAY

    dhcpv6的中继代理,负责转发来自客户端或服务器方向的dhcpv6报文,协助dhcpv6客户端和dhcpv6服务器完成地址配置功能。一般情况下,dhcpv6客户端通过本地链路范围的组播地址与dhcpv6服务器通信,以获取ipv6地址/前缀和其他网络配置参数。如果服务器和客户端不在同一个链路范围内,则需要通过dhcpv6中继代理来转发报文,这样可以避免每个链路范围内都部署dhcpv6服务器,实现了集中管理。另外就是,这个中继代理不是必须的,如果dhcpv6的client和server位于同一个链路内,或者直接通过单播地址交互完成地址分配,那么这个时候就可以不需要它了。

DHCPV6 SERVER

    负责处理来自客户端或中继代理的地址分配,地址续租,地址释放等请求,为客户端分配ipv6地址/前缀和其他网络配置信息。

相关概念

1、组播地址

    在dhcpv6协议中,客户端不用配置dhcpv6 server的ipv6地址,而是发送目的地址为组播地址的solicit报文来定位dhcpv6服务器。所用到的组播地址有两个:

• ff02::1:2:所有dhcpv6服务器和中继代理的组播地址,这个地址是链路范围的,用于客户端和相邻服务器及中继之间通信。所有的dhcpv6和中继代理都是该组的成员

• ff02::1:3:所有dhcpv6服务器组播地址,这个地址是站点范围的,用于中继代理和服务器支架你的通信,站点内的所有dhcpv6服务器都是成员。

2、端口号

    dhcpv6报文承载在UDPv6上,客户端监听的UDP目的端口号是546,服务器、中继代理监听的UDP端口号是547。

3、DUID

    每个服务器或者客户端有且只有一个唯一标识符,服务器使用DUID来识别不同的客户端,客户端则使用DUID来识别服务器。客户端和服务器的DUID的内容分别通过dhcpv6报文中的client identifier和server identifier选项来携带,两种选项的格式一样,通过option-code字段的取值来区分。

4、M/O标记(RA报文中)

    ipv6自动执行无状态自动配置,并在相邻路由器发送的路由器公告消息中使用基于以下标记的配置协议:托管地址配置标记,也称为M标记,路由器通告的RA报文中的管理标记,当M标记为1时,表示链路上的iPv6主机采用dhcpv6方式获取ipv6地址/前缀。其他有状态配置标记,也称为O标记,路由器通告的RA报文中的其他配置标记,当O标志位为1时,表示链路上的ipv6主机采用dhcpv6方式获取ipv6地址/前缀以外的其他网络配置参数。

• 当M和O标记均设置为0 的时候,此时不具有dhcpv6基础结构的网络,主机使用非链接本地地址的路由器公告以及其他方法(手动配置)来配置其他设置。

• M和O均设置为1,dhcpv6用于这两种地址(链接本地地址和其他非链接本地地址)和其他配置设置。该组合成为dhcpv6有状态,其中dhcpv6将有状态地址分配分配给ipv6主机。

• M设置为0,O设置为1,dhcpv6不用于分配地址,仅用来分配其他配置设置。相邻路由器配置为通告非链路本地地址前缀,ipv6主机从中生成无状态地址。此组合叫做dhcpv6无状态;只分配无状态配置设置。

• M标记设置为1,O设置为0,这时dhcpv6用于地址配置,但不用于其他设置。

5、dhcpv6报文

报文类型 dhcpv6报文 dhcpv4报文 说明
1 SOLICIT DHCP DISCOVER 客户端使用solicit报文来确定dhcpv6服务器的位置
2 ADVERTISE DHCP OFFER 服务器通过发送advertise报文来对solicit报文进行回应,宣告自己的存在
3 REQUEST DHCP REQUEST 客户端发送request报文来向dhcpv6服务器请求ipv6地址和其他配置信息
4 CONFIRM - dhcpv6客户端向任意可达的dhcpv6服务器发送confirm报文检查自己目前获得的ipv6地址是否适用于它所连接的链路
5 RENEW DHCP REQUEST dhcpv6客户端向其提供地址和配置信息的DHCPv6服务器发送renew报文来延长地址的生存期并更新配置信息
6 REBIND DHCP REQUEST 如果renew报文没有得到应答,dhcpv6客户端向任意可达的dhcpv6服务器发送rebind报文来续租
7 REPLY DHCP ACK/NAK dhcpv6服务器发送携带了地址和配置信息的reply消息来回应从dhcpv6客户端收到的solicit、request,renew,rebind报文。dhcpv6服务器发送携带配置信息的reply消息来回应收到的information-request报文。用来回应dhcpv6客户端发来的confirm、release、decline报文。
8 RELEASE DHCP RELEASE DHCPv6客户端为其分配地址的dhcpv6服务器发送release报文,表明自己不再使用地址
9 DECLIEN DHCP DECLIEN DHCPv6的客户端向服务器发送decline报文,声明dhcpv6服务器分配的地址已被使用了
10 RECONFIGURE - 服务器向客户端发送reconfigure报文,用于提示dhcpv6客户端有新的网络配置在dhcpv6服务器上
11 INFORATION-REQUEST DHCP INFORM 客户端向服务器发送报文来请求除ipv6地址以外的网络配置信息
12 RELAY-FORWARD - 中继代理通过relay-forward报文向dhcpv6服务器转发dhcpv6客户端请求报文
13 RELAY-REPLY - dhcpv6服务器向中继代理发送relay-reply报文,携带转发给客户端的报文

6、工作方式

• dhcpv6有状态自动分配(stateful)。DHCPv6服务器自动配置ipv6地址/前缀,同时分配DNS、NIS、SNTP服务器等网络配置参数

• dhcpv6无状态自动分配(SLAAC)。iPv6地址仍然通过路由通告方式自动生成,dhcp服务器只分配除ipv6地址以外的配置。

有状态自动分配(stateful)

dhcpv6服务器为客户端分配地址/前缀的过程分为两类:

• 四步交互分配过程

    四步交互常用于网络中有多个dhcpv6服务器的情况,dhcpv6客户端首先通过组播发送solicit报文来定位可以为其提供服务dhcpv6服务器,在收到多个服务器的advertise报文后,根据dhcpv6服务器的优先级选择一个为其分配地址和配置信息的服务器,接着通过request/reply报文交互完成地址申请和分配过程。

    dhcpv6服务器端如果没有配置使能两步交互,无论客户端报文中是否包含rapid commit选项,服务器都采用四步交互方式为客户端分配地址和配置信息。

8pHLdJ.png

    (1) 服务器首先发送solicit报文,请求dhcpv6服务器为其分配ipv6地址和网络配置参数

    (2) 如果solicit报文中,没有携带rapid commit选项,或者服务器不支持快速分配的选项,则服务器回复advertise报文,通过客户端我可以给你分配地址和配置参数

    (3) 如果客户端收到多个服务器回复的advertise报文,则根据advertise报文中的服务器优先级等参数,选择优先级最高的一台服务器并向所有的服务器发送request组播报文,其中携带了已选择服务器的DUID。

    (4) 服务器收到后,回复reply报文,将地址和网络配置信息分配给客户端使用。

• 两步交互

    一般用在只有一个dhcpv6服务器的情况,dhcpv6客户端首先通过组播发送solicit报文来定位可以为其提供服务的dhcpv6服务器,服务器收到客户端的solicit报文后,为其分配地址和配置信息,直接回应reply报文,完成地址申请和分配过程。

8pbUyT.png

无状态自动分配(SLAAC)

8pL32q.png

    客户端以组播方式向dhcpv6服务器发送information-request报文,该报文中携带option request选项,指定客户端想要从服务器获取的配置参数。

    服务器收到报文后,为客户端分配网络配置参数,并单播发送reply报文,将网络配置参数返回给客户端。

IPv6地址/前缀分配

1、选择IPv6地址池

    DHCPv6服务器的接口可以绑定IPv6地址池,DHCPv6服务器将选择该IPv6地址池为接口下的DHCPv6客户端分配地址/前缀。对于存在中继的场景,DHCPv6服务器的接口可以不绑定IPv6地址池,而是根据报文中第一个不为0的“link-address”字段(标识DHCPv6客户端所在链路范围),选择与地址池中已配置的网络前缀或IPv6地址前缀属于同一链路范围的地址池。

2、选择IPv6地址/前缀

    确定地址池后,DHCPv6服务器将按照下面步骤为DHCPv6客户端分配IPV6地址/前缀:

  • 如果地址池中为客户端指定了地址/前缀,优先从地址池中选择与客户端DUID匹配的地址/前缀分配给客户端。

  • 如果客户端报文中的IA选项携带了有效的地址/前缀,优先从地址池中选择该地址/前缀分配给客户端。如果该地址/前缀在地址池中不可用,则另外分配一个空闲地址/前缀给客户端。如果IPV6前缀长度比指定分配长度大,则按指定分配长度来分配。

  • 从地址池中选择空闲地址/前缀分配给客户端,保留地址(例如RFC 2526中定义的任播地址)、冲突地址、已被分配的地址不能再分配给客户端。

  • 如果没有合适的IPv6地址/前缀可以分配,则分配失败。

DAD机制

  1. 简介

地址重复检测(DAD: Duplicate Address Detection)背景要求:

  • 节点在发送路由器公告(RA)之前要获得唯一的本地链路地址。
  • IPv6自动配置要求在使用地址之前进行地址重复检测(DAD)。
  1. 标准DAD过程

(1) 在发送邻居请求(NS)前,接口必须加入全节点组播地址(FF02::1)和生成IPv6地址的请求节点组播地址(solicited-node multicast address),即接收目的地址为这些IPv6地址的分组。

(2)生成IPv6地址后随机延时一段时间后开始发送用于DAD的邻居请求(NS)消息。邻居请求(NS)消息的源地址为::,目的地址为临时单播地址的请求节点组播地址。在规定时间内没有收到应答的NA报文,则认为该单播地址在链路上是唯一的,可以分配给接口,如果收到应答NA报文,则表明该地址已被其它节点使用,不能配置给接口。

(3) 在DAD过程中地址处于Tentative状态(“暂时的”)(IFA_F_TENTATIVE)。在完成DAD过程后,tenativeAddr将会被作为“首选的”地址(PreferedAddr)。若发现了重复地址,则该地址变为"废弃的"地址(deprecatedAddr)。

    总得来说就是:未确定唯一性的地址不能使用,即不能接收目的地址或者发送源地址为此地址的分组,但是与DAD相关的邻居公告(NA)消息除外。每次系统默认一个主机在应用新的IP地址之前会发送3次DAD,如果三次以后均没有收到任何回应,那么该地址被认为是可以配置在接口上的。

------ 本文结束 ------
您的支持将鼓励我继续创作