精华内容
下载资源
问答
  • DHCPv6-RFC3315(中文)

    2018-12-24 16:03:37
    本文件介绍 DHCPv6, 一个客户端/服务器协议,该协议提供设备管理配置。 DHCP 能够为设备提供 DHCP 服务器分配地址和其他配置信息,所提供内容均由 选项携带。通过定义携带本文件中没有规定配置信息新选项...
  • rfc3315-DHCPv6

    2018-01-23 14:40:39
    (IPv4)全球互联网面临网络地址消耗殆尽、服务质量难以保证等制约性问题,IPv6能够提供充足网络地址和广阔创新空间,是全球公认下一代互联网商业应用解决方案。大力发展基于IPv6下一代互联网,有助于显著...
  • rfc1035label : dhcpv6和dhcpv4使用的RFC1035标签的简单实现 interfaces ,围绕网络接口的薄薄包装 您可能只需要显式地使用dhcpv6和/或dhcpv4 。 其余部分将在必要时自动拉入。 因此,只需运行dhcpv6和dhpv4即可...
  • DHCP DHCPv6

    2019-09-23 15:06:58
    为了给网络客户机自动分配IP地址以及生成所需配置参数,IETF分别给IPV4和IPV6网络定义了相关协议标准,即DHCP(RFC2131)和DHCPV6(RFC3315),以及扩充选项标准。本文主要阐述两个协议产生背景、功能并比较...

    为了给网络客户机自动分配IP地址以及生成所需的配置参数,IETF分别给IPV4和IPV6网络定义了相关的协议标准,即DHCP(RFC2131)和DHCPV6(RFC3315),以及扩充的选项标准。本文主要阐述两个协议产生的背景、功能并比较二者之间的异同点。

    一、背景

          DHCP协议的出现可以回推到无盘工作站的出现,人们希望工作站能够通过网络通信的方式从服务器中获得自己的IP地址、服务器的IP地址、启动映像名等信息,此时Bootstrap协议(简写为BOOTP)应运而生,它主要应用于相对静态的环境,每台主机都有一个永久的网络连接,管理人员只需要建立一个BOOTP配置文件,该文件定义了每台主机的一组BOOTP参数,由于配置通常保持不变,因此该文件也不会经常改变,但是随着网络规模的不断扩大,网络配置也变得越来越复杂,原来针对静态主机配置的BOOTP协议明显不能满足实际的需要,由此,为了用户能快速地接入和退出网络,提高IP地址资源的利用率,IETF在BOOTP的基础上制定了一种自动分配IP地址的机制,即DHCP协议,因此,我们DHCP协议可以看成是对BOOTP协议的升级(所以要想抓DHCP包,必须输入bootp才行)。为了BOOTP协议的兼容,DHCP协议允许三种分配地址的方式,即手工配置,自动配置以及完全动态分配,除此之外,DHCP在原来的基础上增加了对选项的支持,通过这种方式,可以获得更多来自于服务器的配置信息。后来,随着IPV6网络的出现,以及IPV6地址所表现出来的巨大差异,IETF在2003年重新制定了针对IPV6的DHCP协议,即DHCPV6,对比V4,它增加了一些特有的功能,如支持有状态和无状态地址分配服务,支持临时地址,非临时地址以及前缀地址的分配等,后面小节将会更加具体比较二者在选项、客户端与服务器行为、消息类型的差异。

    二、DHCP VS DHCP6

       要比较两个协议,最直观的方式无非是通过比较二者有关的数据报,图1与图2分别对应的是正常情况下二者获取IP地址的过程示意图,从图1中可以看出,客户端首先利用0.0.0.0地址发送一个一个广播discover消息,接着多个服务器响应并发回了可供客户机使用的地址(参照offer消息),然后客户机从中选择某台服务器并向其发送request消息,最后被选中的服务器返回ACK确认消息,这样就完成了对客户机的地址分配。对于图2,客户机利用本地链路地址发送一个solicit广播消息(广播地址是ff02::1:2), 之后一台服务器提供了advertise消息,并将IP地址以及客户机所需要的配置参数信息返回,然后客户机发送一个request消息,主要从服务器端索取自己所需要的请求参数信息,最后服务器响应请求。

     

     

                                                                                                                图1 DHCP获取IP地址过程

     

     

                                                                                                              图2 DHCP6获取IPV6地址过程

    从上面这两个简单地过程,大体上了解了DHCP与DHCP6在获取IP地址时的一般过程,也明白了其中的一些差异,下面将从各个方面更加深入地介绍二者之间的差异。

    1.   DHCP消息VS DHCP6消息

          附A显示了消息报的格式差异,DHCP消息报组成字段的长度及功能如表1所示,对比表2的DHCP6数据报,DHCP消息报字段显得十分庞大,但是这并不代表,DHCP所支持的功能更多,因为DHCP6的选项十分丰富,如DHCP中的ciaddr字段所表达的含义在DHCP6中的IA-NA或者IA-TA选项是对应的,类似的还有chaddr字段对应于Client Identifier,这些在后面的选项比较中都会讲到。

    表1 DHCP数据报字段的长度与功能

    字段

    长度(字节为单位)

    功能

    op

    1

    定义DHCP消息类型,1为BOOTREQUEST,2为BOOTREPLY

    htype

    1

    定义硬件类型,1代表ethernet

    hlen

    1

    硬件地址长度,6代表10mb以太网

    hops

    1

    路由条数,通常用于中继代理,

    xid

    4

    由客户机生成的随机数,通常用于客户机和服务器之间同步消息

    secs

    2

    由client填充,表示客户机经历地址获取或续约所经历的时间

    flags

    2

    定义广播标志

    ciaddr

    4

    客户机的IP地址

    yiaddr

    4

    客户机的IP地址

    siaddr

    4

    返回下一个使用BOOTP协议的服务器地址

    giaddr

    4

    中继代理的IP地址

    chaddr

    16

    客户机的硬件地址

    sname

    64

    服务器的hostname

    file

    128

    boot文件名

    options

    var

    支持的选项

    表2 DHCP6数据报字段长度及功能

    字段

    长度(字节为单位)

    功能

    msg-type

    1

    定义DHCP消息类型

    transaction-id

    3

    由客户机生成的随机数,通常用于客户机和服务器之间同步消息

    options

    var

    支持的选项


              另外,需要指出的是,DHCP6将许多参数信息存放在选项中,这样能够减少数据报的净长度,提高存储利用率。这是因为DHCP6的消息报头仅占4个字节,而将需要发送或者接收参数信息附在选项上,而DHCP消息报则是将大量的字段包含在报头中,而实际情况是在某些消息报中,许多字段未得到充分运用而导致存储浪费,如hops仅仅在支持中继代理时才使用,file字段则几乎被舍弃。

             前面已经从消息报字段的长度以及功能两个方面对DHCP与DHCP6做了比较,下面将着重阐述DHCP与DHCP6各自所包含的消息类型,以及消息的发方以及收方,消息产生的时间,client和server各自表现出怎样的行为等内容。

            值得注意的是,DHCP消息报利用”op”字段来表示消息的类型,即BOOTREQUEST和BOOTREPLY,前者表示消息报是从客户机发往服务器,而后者刚好相反,由此可以看到,op字段仅仅只是定义了该消息报的发送方向,而对该消息报的其他信息一无所知,基于此,RFC2131规定在DHCP消息报中一定要包含DHCP Messae Type选项,另外,还规定了常见的几种消息类型:DHCPDISCOVER,DHCPOFFER,DHCPREQUEST ,DHCPACK,DHCPNAK,DHCPDECLINE,DHCPRELEASE和DHCPINFORM。在DHCP6消息报中,消息类型是由字段msg-type指定的,同样定义了常见的几种消息类型:SOLICIT,ADVERTISE,REQUEST,CONFIRM,RENEW,REBIND,REPLY,RELEASE,DECLINE,RECONFIGURE,INFORMATION-REQUEST,RELAY-FORW和RELAY-REPL,另外还定义了对应的数字编码。下面将通过表格的形式对数据包内容做更详细的解释。

    表3 DHCP消息报详细信息

    Type

    From

    To

    How and when to use

    Client behavior

    Server behavior

    Relay agent

    DHCPDISCOVER

    客户机

    本地服务器/中继代理

    客户机向本地可得到的服务器发送广播消息,可能会包含选项内容(网络地址和租约时间),

    注意:若目的地是中继代理,应该填充’giaddr’字段消息

     

    发送广播消息,广播地址为255.255.255.255,自身地址为0.0.0.0

     

     

    1.返回客户机DHCPOFFER消息,并在里面填充“yiaddr”字段

    2.若没有可用的地址,则向管理员报告问题

     

    给不与客户机在同一子网内的DHCP服务器传递消息报

     

    DHCPOFFER

    服务器/中继代理

    客户机

    回应来自于客户机发送的DHCPDISCOVER消息报

     

    如果没收到OFFER消息报,则重传DISCOVER消息,否则选择一个REQUEST消息报给选中的服务器,注意要填充'server identifier' 字段

     

    在OFFER消息中返回客户机DISCOVER消息中所需的参数信息

    将来自于DHCP服务器的OFFER消息报转发给客户机

    DHCPREQUEST

    客户机

    本地服务器/中继代理               

    满足以下情形时,客户端才发送请求包:

    1.向选中的服务器发送请求需要的参数列表,同时拒绝未选中的服务器;

    2.在客户机状态发生变化,如重启,链路改变等,向服务器确认之前分配的地址是否还能使用;

    3.  请求延长租约

    向服务器或中继代理发送请求消息报,广播地址依然为255.255.255.255,自身地址为0.0.0.0

    1.   根据返回的’server identifier’字内容,服务器能判断自己是否选中;

    2.被选中的服务器将客户机信息进行保存,并发送DHCPACK消息给客户机,注意,此时所提ACK消息中的内容应该与之前的OFFER消息一致。这与客户端第一种情形对应。

    3.  若服务器不能满足客户机的请求(如地址已经被分配),此时发送DHCPNAK消息给客户机,与第二、三种情形对应。

    4. 对应租约到期的客户机,服务器没有收到它的续约请求,则将所分配地址标记为available

    将客户机发送的请求包转发给DHCP 服务器

    DHCPACK

    服务器/中继代理

    客户机

    服务器收到来自于客户机的DHCPREQUEST消息。消息报中应该携带客户机所需要的配置信息。

    1.若客户机接收到ACK消息报,则利用ARP协议判断报中的地址是否内使用,若不能使用,则发送DECLINE消息给服务器并重启配置过程,发送请求报;

    2. 若客户机没收到ACK消息,或者NAK消息,首先客户机启动重传算法,若重传之后依然没有获得,则则客户机重启配置过程,发送请求报。

    发送ACK消息给客户端

    将来自于DHCP服务器的ACK消息报转发给客户机

    DHCPNAK

    服务器/中继代理

    客户机

    当服务器判断之前给客户机发送的地址已被使用或者租约期已到

    重启配置过程并发送请求报

    服务器发送NAK消息,并在`mseeage`选项中报告此问题

    将来自于DHCP服务器的NAK消息报转发给客户机

    DHCPDECLINE

    客户机

    服务器/中继代理

    客户机通过ARP协议探测到服务器所分配的IP地址已经被本网络中其它主机占用

    发送DECLINE消息报,并重启配置过程

    服务器将该地址标记为`unavailable`,并向管理员通报

    将客户机发送的DECLINE消息报转发给DHCP 服务器

    DHCPRELEASE

    客户机

    服务器/中继代理

    客户机向释放掉之前分配的IP地址

    客户机在RELEASE消息报中填充`client identifier`, `chaddr`和网络地址,并将其发给服务器或者中继代理

    服务器首先将客户机释放的地址标记为`available`,并将客户机的配置信息进行保存,已被后来重新使用

    将客户机发送的RELEASE消息报转发给DHCP 服务器

    DHCPINFORM

    客户机

    服务器/中继代理

    客户机已经通过其他方式获得IP地址(如手动),但是需要从服务器处获得本地配置信息

    发送INFORM给服务器

    构造出一个不包含“分配的IP地址,`yiaddr`字段和租约”信息的ACK消息报,但是包含客户机所要求的配置信息

    将客户机发送的INFORM消息报转发给DHCP 服务器

    上表详细描述了DHCP消息报的属性以及行为内容,有几个需要特别说明的地方是:

           ◆ 客户机所采取的重传机制是随机指数退避算法,具体思想可参考RFC2131文档;

           ◆ 客户机在发送DHCPDISCOVER消息报与DHCPREQUEST消息报时,广播地址与自身地址分别为:255.255.255.255,0.0.0.0.

           ◆ DHCP协议所运用的端口分别是:客户机-68,服务器-67.

           ◆ 在客户机释放掉IP地址后,服务器还将保存之前对客户机的配置信息,这样有助于相对稳定地分配IP地址,只要下次这个IP地址没有分给其它客户机,当前客户机在下           次发出配置地址请求时,服务器会将先前的配置信息赋给它。

           ◆ 注意发送DHCPREQUEST消息报的几种情形的区别(将状态的改变视为参考点):第一种情况出现在Client收到DHCPOFFER并进入SELECTING状态    之后,Client向感兴趣的Server发送DHCPREQUEST报,此时的消息报需要填充Server identifier, Request ip address等选项内容,结合后面马上要讲到的DHCP选项内容,一定要注意Server identifier填充的是server的标识符,Request ip address填充的是服务器在发送的DHCP OFFER消息报中附带的IP地址信息;第二种情况是当客户机发生状态 改变,如重启时需要跟服务器确认之前分配的IP地址是否依然可用,此时Client    处于INIT-REBOOTING状态并发送DHCPREQUEST消息报,注意此时消息报中依然 需要填充Request ip address选项,但是填充的内容则是0.0.0.0(known network address), 并且此时也不需填充Server identifier选项;第三种情况则出现在Client正处于BOUND状态并需要延长租 约时,向Server发送DHCPREQUEST消息报,不过此时不应该含有Server identifier以及Request ip address选项内容信息,增加的则是client  ip address(ciaddr)信息。

         表3只是列出了DHCP消息报的属性及行为内容,但是对消息报中应该包括的字段或者选项内容却涉及很少,下面将按照消息报的类型,列出各自应该包括的内容。

    表4 DHCP消息报填充字段与选项

    Type

    Client

    Server

    DHCPDISCOVER

    必须包含的字段有:`xid`,`secs`,`flags`,`ciaddr`,`chaddr`,,其它字段可选;对于选项内容,不能包括的是`server identifer`,其它可选。

    N/A

    DHCPOFFER

    N/A

    必须包含的字段有:`xid`, `yiaddr`, `siaddr`, `flags`, `giaddr`, `chaddr`,其它可选;对于选项,必须包括:`ip address lease`, `server identifier`,不能包含的是`request ip address`, `parameter request list`以及`client identifier`,其他可选

    DHCPREQUEST

    必须包含`xid`,`secs`,`flags`,`ciaddr`,`chaddr`,`chadrr`等字段,而对于`sname`,`file`,`options`等字段是可选的。至于选项内容,`request ip address`必须包含,`server identifer`在仅仅当客户机请求处于第一种情形,必须包含。其他选项均是可选的。

    N/A

    DHCPACK

    N/A

    必须设置同之前发送给客户机OFFER消息报中相同的字段和选项内容,另外再加上客户机REQUEST消息报中所请求的参数内容消息

    DHCPNAK

    N/A

    必须包含’client identifer’选项,或者错误报告选项

    DHCPDECLINE

    必须填充`xid`,`ciaddr`(0), ‘chaddr’等字段,同时必须包含`request ip address`选项,可能包含`client identifer`选项,不能包含的有:`IP address lease time`, `vendor classidentifer`, `parameter request list`等选项

    N/A

    DHCPRELEASE

    同DHCPDECLINE,但是此时不能包括`request ip address`

    N/A

    DHCPINFORM

    同DHCPDISCOVER,但是`request ip address` 和`ip address lease`布恩那个包含

    N/A

    上表详细列出了DHCP的消息报填充字段与选项信息,但有几点值得注意的是:

    ◆     各种消息报的`msg type`字段是一定包括的,在上表没有写出。

    ◆     DHCPREQUEST消息报中能否包含`server identifier`,主要跟客户机何时发出这种请求消息报有关,若是从初始状态开始发出请求报,则必须包含,  若是基于状态改变或者申请延长租约等因素发出请求报,则不能包含。

    ◆    在各种消息报中,若客户机与DHCP服务器不在同一网段,此时必须加上`giaddr`字段信息。

     下面主要阐述在DHCP6中各种消息报的属性、行为内容以及需要填充的字段与选项。

    表5  DHCP6消息报详细信息

    Type(registry code)

    From

    To

    How and when to use

    Client behavior

    Server behavior

    Solicit (1)

    客户机

    服务器/中继代理

    客户机给服务器发送solicit消息,以便得到Ipv6地址,以及选项中所附带的配置参数

    创建solicit消息报并将其发送给服务器

    1. 首先验证solicit消息的有效性,若消息报中没有包含`client identifier`或者包含有`server identifier`选项,则该报无效并舍弃;

    2. 根据管理策略来验证服务器是否允许接收该报;

    3.若服务器拥有可以分配的地址,则回发Advertise消息报(状态码为成功),否则回发状态码为` NoAddrsAvail `的Advertise消息报。

    4. 若socilit消息报中包含有`rapid commit`选项,则返回一个Reply消息报.

    Advertise (2)

    服务器/中继代理

    客户机

    回应客户机发送的solicit消息报

    1. 验证Advertise消息报的有效性: 若出现消息报中不含有`server identifier`字段和`client identifier`字段, `client identifier`字段中的DUID不匹配或者` transaction-id ``字段不匹配等情形,则该报无效并舍弃; 若包含状态码选项值为` NoAddrsAvail `,同样丢弃该报;

    2. 基于某种策略(后面将有详细介绍)选取Advertise消息报;

    给客户机发送advertise消息报,报中包含一些设置的字段与选项

    Request (3)

    客户机

    服务器/中继代理                                   

    客户机请求更多的配置参数

    创建并发送request消息报给服务器

    1. 首先验证request消息的有效性:若消息中不包含`client identifier`选项`和server identifier`选项,,或者选项中的DUID内容与服务器不匹配,则该报无效并舍弃;

    2.若无可用的地址分配,则返回一个状态码为` NoAddrsAvail `的Reply消息;

    3.  若服务器发现在IA选项中的地址前缀与自身不匹配,则返回一个状态码为`NotOnLink`的Reply消息报;

    4.创建一个Reply消息报,其中包括客户机所需要的地址以及其他参数配置信息。

    Confirm (4)

    客户机

    服务器/中继代理

    由于客户机的状态发生变化,发送confirm消息报去确认是否之前的配置是否还适合

     

    当客户机出现以下情形时:重启,客户机改为有线连接,客户机改变了无线接入点。此时客户机需要发送confirm消息进行确认

     

    1.        舍弃掉任何没有包含`server identifier`和`client identifier`选项的消息报;

    2.        判断消息报中的IA选项中的地址是否与自己同属一个链路,若是,返回一个状态码表示为为成功的Reply消息报; 否则返回一个状态码为NotOnLink的消息报;

    Renew (5)

    客户机

    服务器/中继代理

    要求服务器延长之前分配的租约以及升级其它的参数

    创建并发送Renew消息报

    1.  舍弃掉任何没有包含`server identifier`和`client identifier`选项,或者`server identifier`选项中的DUID与服务器不匹配的消息报;

    2.  验证消息保证中`IA`选项中地址是否与服务器中的存储信息吻合,若没找到对应信息,则返回状态码为`NoBinding`的Reply消息报;

    3. 返回包含新的lifetime, T1/T2值的Reply消息报给客户机

     

    Rebind (6)

    客户机

    服务器/中继代理

    要求服务器延长之前分配的租约以及升级其它的参数,注意这个消息报只有在之前客户机发送的Renew消息报没得到服务器响应后才产生

    创建并发送Rebind消息报

    1.舍弃掉任何没有包括`server identifier`和`client identifier`选项的Rebind消息报;

    2.若在服务器中没有找到与Rebind消息报中的IA选项中吻合的地址,或者发现地址但不再适合本链路,则服务器发回一个ilifetime置为0的Reply消息;

    3. 若找到吻合的地址信息,服务器发回一个包含新的lifetime以及T1/T2值的Reply消息报。

    Reply (7)

    服务器/中继代理

    客户机

    当服务器收到客户机发送的Solicit(含rapid commit选项),Request, Renew以及Rebind消息时,产生Reply消息报回应

     

     

     

     

     

     

     

     

     

     

    Release (8)

    客户机

    服务器/中继代理

    客户机发送Release消息报告知服务器自己所分配的一个或者多个地址不再使用时产生Release消息报

    创建并发送Release消息报,值得注意的是,释放掉的地址不能再使用,若没有收到Reply反馈消息报,则实现重传。

    1. 舍弃掉任何没有包含`server identifier`和`client identifier`选项,或者`server identifier`选项中的DUID与服务器不匹配的消息报;

    2. 服务器从Release消息报IA选项中的地址列表中找出有效的地址(即是由本服务器之前分配的),并将这些地址标记为available;

    3. 返回一个Reply反馈消息报;

    4.  服务器保留分配信息,以备下次直接将配置信息赋给这台客户机.

     

    Decline (9)

    客户机

    服务器/中继代理

    客户机发送Decline消息告知服务器自己所分配的地址已经被本链路的其它主机占用

    创建并发送Decline消息报,注意Decline消息报的`IA`选项中一定含有被占用的地址信息

    1. 舍弃掉任何没有包含`server identifier`和`client identifier`选项,或者`server identifier`选项中的DUID与服务器不匹配的消息报;

    2. 服务器检测Decline消息报中IA选项报告的地址,并将其删除,然后在本地做标记,下次将不再分配给其它客户机

    3. 处理完地址后,返回带有状态码的Reply消息

     

    Reconfigure (10)

    服务器/中继代理

    客户机

    服务器通过发送Reconfigure消息去告知客户机,服务器端出现新的配置参数或者某些参数已经更新,并触发客户机同服务器共同去完成Renew/Reply和Information-request/Reply

    1. 首先验证消息报的有效性:若消息报不是单播传给客户机;没有包含`server identifier`和`client identifier`,消息中没有包含`Reconfigure message`选项,消息中包含`IA`选项并且`Reconfigure meaasge`选项的消息类型是` INFORMATION-REQUEST `,则将该消息报舍弃;

    2.客户机返回一个Renew或者Information-request消息报

    创建并发送Reconfigure消息报,若在某个时间范围内,没有收到来自于客户机的Renew或者Information-request消息,则服务器重传该消息报

    Information-request (11)

    客户机

    服务器/中继代理

    客户机发送该消息报给服务器,仅仅为了得到配置参数,而不需要分配地址

    创建并发送Information-request消息报,若没收到Reply反馈消息,则重传消息报

    1. 验证消息报的有效性,若消息报中包含`server identifier`并且选项中的DUID与本地服务器不匹配,或者包含IA选项,则将该报舍弃;

    2.构造一个包含配置信息的Reply消息报并发送给客户机

    Relay-forward (12)

     

     

     

     

     

    Relay-reply (13)

     

     

     

     

     

    上表详细列出了DHCP6消息报的属性以及行为内容,有几个特别需要说明的地方是:

    ◆     对比,DHCP消息报,DHCP6在中继代理方面增加了消息报,以及其它一些机制,这方面的知识将在后面还会比较到。

    ◆     在`IA_NA`选项中,定义了多种状态码,分别为:

    Name

    Code

    description

    Success

    0

    表示成功

    UnspecFail

    1

    表示出现不知原因的失败

    NoAddrsAvail

    2

    表示服务器没有可用的地址去分配客户机

    NoBinding

    3

    表示服务器没有绑定客户机信息

    NotOnLink

    4

    表示服务器与客户机的地址前缀不匹配,即二者不在同一链路上

    UseMulticast

    5

    表示服务器强制客户机使用 All_DHCP_Relay_Agents_and_Servers多播地址去发送消息

     

     

     

     

     

     

     

     

     

    ◆     在DHCP6中,客户机去选取连接DHCP6服务器是基于某种策略的,具体跟服务器所返回消息报中的`prefere option`有关,在这个选项中定义了服务器参考值(server                   prefere value),它的最大值为255, 客户机正是根据服务器中的参考值不同选取目标服务器的,具体策略如下:

            ●     若某个服务器中的参考值为255,则它拥有最高优先级;

            ●     若服务器中的参考值正好相等,则根据对服务器返回的配置参数的兴趣而定;

           ●     客户机甚至会选取某些尽管参考值较低但返回更匹配的配置参数的服务器。 值得注意的是,在DHCP中,一般会选取最先返回配置参数的服务器!

    表6列出了DHCP6消息报的填充字段以及选项。

    表6  DHCP6消息报填充字段与选项

    Type

    Client

    Server

    Solicit (1)

    填充`msg-type`, ` transaction-id `字段,必须包含的选项有:` Client Identifier`,`IA-NA/TA`,可选的有:` Option Request`,` Reconfigure Accept `和`rapid commit`.

    另外还有注意,客户机发送solicit消息时采用的是本地链路地址,而目的地址是” All_DHCP_Relay_Agents_and_Servers address”多播地址,即ff02::1:2

    N/A

    Advertise (2)

    N/A

    填充`msg-type`字段,` transaction-id `字段来自于客户机发送的solicit消息报中的相应字段值。必须包含的选项有:`server identifier`, `client identifier`, `IA`选项(注意IA选项的数量由silicit消息报中的`IA`选项而定)以及客户机中的`optional request`选项中含有的一些选项。可选的有:` Preference `, ` Reconfigure Accept `, ``

    Request (3)

    填充`msg-type`, ` transaction-id `字段,必须包含的选项有:`server identifier`, `client identifier`, ` Option Request `,`IA-NA/TA`,可选的有:` Reconfigure Accept `以及其它选项,注意请求时的目的地址以及多播地址同solicit消息报。

    N/A

    Confirm (4)

    填充`msg-type`字段,并产生` transaction-id `字段内容,必须包含的选项有:`client identifier`, `IA`(对于IA_NA选项,应该设置T1,T2域,以及preferred-lifetime and valid-lifetime域)

    N/A

    Renew (5)

    填充`msg-type`字段,并产生` transaction-id `字段内容,必须包含的选项有:`client identifier`, `server identifier`, `IA`, ` Option Request `以及其他可选项

    N/A

    Rebind (6)

    填充`msg-type`字段,并产生` transaction-id `字段内容,必须包含的选项内容有:`client identifier`, `IA`, `option request`

    N/A

    Reply (7)

    N/A

    1.   若是对solicit消息报(包含`rapid commit`选项)的回复:必须填充字段`msg-type`和` transaction-id `字段(来自于solicit消息报),必须包含的选项有:server identifier`, `client identifier`, `IA`以及request消息报中所请求的参数选项, `rapid commit`。

    2.   若是对Request消息报的回复:必须填充字段`msg-type`和` transaction-id `字段(来自于request消息报),必须包含的选项有:`server identifier`, `client identifier`, `IA`以及request消息报中所请求的参数选项;

    3.   若是对Confirm消息的回复:填充`msg-type`字段,` transaction-id `字段来自于客户机发送的solicit消息报中的相应字段值。必须包含的选项有:`server identifier`, `client identifier`, `status code`

    4.   若是对Renew消息的回复:填充`msg-type`字段,` transaction-id `字段来自于客户机发送的solicit消息报中的相应字段值。必须填充的选项有:`server identifier`, `client identifier`,,`IA`

    5.   若是对Rebind消息的回复:填充`msg-type`字段,` transaction-id `字段来自于客户机发送的solicit消息报中的相应字段值。必须填充的选项有:`server identifier`, `client identifier`,,`IA`

    6.   若是对Release消息的回复:填充`msg-type`字段,` transaction-id `字段来自于客户机发送的solicit消息报中的相应字段值。必须填充的选项有:`server identifier`, `client identifier`, `IA`(包含状态码选项)

    7.   若是对Decline消息的回复:填充`msg-type`字段,` transaction-id `字段来自于客户机发送的solicit消息报中的相应字段值。必须填充的选项是:`server identifier`, `client identifier`, `IA`(包含状态码选项)

    Release (8)

    填充`msg-type`字段,并产生` transaction-id `字段内容,必须包含的选项有:`client identifier`, `server identifier`, `IA`

    N/A

    Decline (9)

    填充`msg-type`字段,并产生` transaction-id `字段内容,,必须包含的选项有: `client identifier`, `server identifier`, `IA`

    N/A

    Reconfigure (10)

    N/A

    填充`msg-type`字段,并将` transaction-id `设置成0;必须包含的选项有:`server identifier`, `Reconfigure message`, `IA`, `Option request`则是可选的,其他的选项则都不能使用

    Information-request (11)

    填充`msg-type`字段,并产生` transaction-id `字段内容,必须包含的选项有:`option request`, `client identifier`

    N/A

    Relay-forward (12)

     

     

    Relay-reply (13)

     

     

          

     

    2. 两种版本的选项格式比较:

    DHCP:

           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

          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

          |   option-code  | option-len    |                              |

          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-                             +

          |                          option-data                          |

          |                      (option-len octets)                      |

          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    Fix-length options: option 0 and option 255 are considered as without data, so it only includes option-code filed.

    Variable-length options(except fix-length option): must follow a option-len field and the field value only specifies the size of option-data field, not include the size of option-code and option-len fields.

    These options are encoded as a one-byte type code, a one-byte length, and a buffer consisting of the number of bytes specified in the length, from zero to 255. In RFC 3396, provides a rule how to concatenate(decode) and split(encode) option field when the option-len excedes 255 octets in size.

    【注意】这个地方与DHCPV6存在着不同的处理方式,RFC 3396定义了如何处理当同code的选项数据被split并出现在不同的域内(field,主要有option, file和sname)时如何将它们连成一个单独的选项的规则;而在RFC 3315中则规定(section 22.1),当出现多个同code的选项时,它的选项数据是不能够联合在一起的,这也是跟二者所定义的选项内容结构差异密切相关的。

    DHCPv6:

           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

          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

          |          option-code          |           option-len          |

          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

          |                          option-data                          |

          |                      (option-len octets)                      |

          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     

    DHCP与DHCPV6常见的支持选项:

     

    DHCP常见支持选项 (Public-defined options in DHCP)

    Option Name

    Code

    Len (octet)

    MAY, Must or Must not include

    Function

    pad

    0

    1

    All MAY

     

    align a subsequent field on a word (two-byte) boundary

     

    end

    255

    1

    All MUST

     

    Placed after all other options to mark the end of the option list

     

    Subnet Mask

    1

    4

     

     

    Specific the client's subnet mask

     

    Router

    2

    variable( multiply of 4)

     

     

    Specifies a list of router addresses for the client to use

     on the local network

     

    Domain name server

    6

    variable( multiply of 4)

     

    Specifies a list of domain name servers available to client

    Host name

    12

    variable( multiply of 4)

     

     

    Specifies a list of DNS name server addresses for the client to use on the local network

     

    Network Time Protocol Servers

    42

    variable( multiply of 4)

     

    Specifies a list of IP addresses indicating NTP servers available to the client.

    Requested IP Address

    50

    4

     

    Must:  DHCPREQUEST(when in SELECTING or INIT-REBOOT state), DHCPDECLINE, DHCPNAK

    MUST NOT: DHCPREQUEST(when in BOUND or RENEWING state), DHCPRELEASE, DHCPINFORM

     

     

    Allow the client to request that a particular IP address be assigned

     

     

    IP Address Lease Time

    51

    4

    Must: DHCPOFFER, DHCPACK

    MUST NOT: DHCPINFORM, DHCPDECLINE, DHCPRELEASE

     

     

    Allow the client to request a lease time for the IP address.

     

    DHCP Message Type

    53

    1

    All MUST

     

    Specifies the type of the DHCP message

     

    Server Identifier

    54

    4

     

    MUST: DHCPREQUEST(when in SELECTING state), DHCPDECLINE, DHCPRELEASE, DHCPACK, DHCPNAK, DHCPOFFER

    MUST NOT: DHCPDISCOVER, DHCPINFORM

     

     

    Specifies the ip address for the selected server to client

     

    Parameter request list

    55

    variable

    MAY: DHCPDISCOVER, DHCPREQUEST

     

    Used by a DHCP client to request values for

    specified configuration parameters

     

    Message

    56

    variable

    MAY: DHCPNAK

     

    Used by a DHCP server to provide an error message to a DHCP client in a DHCPNAK message in the event of a failure

     

    Maximum DHCP message size

    57

    2

    ALL MAY

     

    Specifies the maximum length DHCP message that

     it is willing to accept

     

    Renewal Time Value (T1)

    58

    4

     

     

    Specifies the time interval from address assignment until the client transitions to the RENEWING state.

     

    RebindingTime Value (T2)

    59

    4

     

     

    Specifies the time interval from address assignment until the client transitions to the REBINDING state.

     

    Vendorclassidentifier

    60

    variable

     

     

    Used by DHCP clients to optionally identify the vendor type and configuration of a DHCP client. such as “udhcpc 1.21.1”

     

    Client identifier

    61

    variable

    MUST: DHCPOFFER, DHCPACK, DHCPNAK

     

    Used by DHCP clients to specify their unique identifier, usually consist of a hardware type (htype) and hardware address (chaddr).

     

     

     

    DHCPV6 常见支持选项

    Option Name

    Code

    Len (octet)

    MAY, Must or Must not include

    Function

    Client identifier(RFC 3315)

    1

     

    Variable(equal to DUID)

     

    Must:

    Used to carry a DUID identifying a client between

     a client and a server

    Server identifier(RFC 3315)

    2

     

    Variable(equal to DUID)

     

     

    Used to carry a DUID identifying a server between

    a client and a server

    IA_NA(RFC 3315)

    3

    12(IAID+T1+T2) + length of IA_NA options

     

     

    Used to carry an IA_NA, the parameters associated with the IA_NA, and the non-temporary addresses associated

     with the IA_NA.

     

    IA_TA(RFC 3315)

    4

    4(IAID) + length of IA_TA options

     

     

    Used to carry an IA_TA, the parameters associated with the IA_TA and the addresses associated with the IA_TA.

     

    IA address(RFC 3315)

    5

    16(IPV6 address) + 4(prefered-lifetime) +4(valid-lifetime) + length of Iaaddr-options

     

     

    Used to specify IPv6 addresses associated with an

     IA_NA or an IA_TA.

     

    Option request(RFC 3315)

    6

    2 * number of request options (each option needs two octets )

     

     

    Used to identify a list of options in a message

    between a client and a server

     

    Preference(RFC 3315)

    7

    1(pref-value)

     

     

    Sent by a server to a client to affect the selection of

    a server by the client.

     

    Elapsed time(RFC 3315)

    8

    2

     

     

    Sent by client to indicate how long the client has been trying to complete a DHCP message exchange

     

    Status code(RFC 3315)

    13

    2(status code) + length of status-message

     

     

    Returns a status indication related to the DHCP message or option in which it appears

     

    Rapid commit(RFC 3315)

    14

    0

     

    Used to signal the use of the two message exchange for

     address assignment

    Vendor class(RFC 3315)

    16

    4(enterprise-number)

    + length of vendor-class-data

     

     

    Used by a client to identify the vendor that manufactured the hardware on which the client is running

     

    Reconfigure message

    (RFC 3315)

    19

    1(msg-type)

     

    Included in server and to indicate to the client whether

    the client responds with a Renew message or an

    Information-request message

    Reconfigure accept

     (RFC 3315)

    20

    0

     

     

    Announce to the server  whether the client is willing to accept Reconfigure messages, and a server uses this option to tell the client whether or not to accept Reconfigure messages.

     

    IA_PD(RFC 3315)

    25

    12(IAID + T1 + T2) + length of IA_PD options

     

    Used to carry a prefix delegation identity association

    IA_PD prefix

    (RFC 3633)

    26

    4(prefered-lifetime) + 4(valid-lifetime) + 1(prefix-length) + 16(IPV6 prefix)

     

    Used to specify IPv6 address prefixes associated with an IA_PD

    DNS Recursive Name Server

    (RFC 3646)

    23

    A multiply of 16 octets

    (each IPV6 address)

     

    Provides a list of one or more IPv6 addresses of DNS recursive name servers to which a client's DNS resolver

    MAY send DNS queries

    Information Refresh Time

    (RFC 4242)

    32

    4

     

     

    Used from server to client to inform the client when it should refresh the other configuration data

     


    原文:https://blog.csdn.net/dragon_li_chen/article/details/7057289

    转载于:https://www.cnblogs.com/GodZhe/p/10922274.html

    展开全文
  • DHCPV4 VS DHCPV6

    万次阅读 2011-12-09 15:41:42
    为了给网络客户机自动分配IP地址以及生成所需配置参数,IETF分别给IPV4和IPV6网络定义了相关协议标准,即DHCP(RFC2131)和DHCPV6(RFC3315),以及扩充选项标准。本文主要阐述两个协议产生背景、功能并比较...

         为了给网络客户机自动分配IP地址以及生成所需的配置参数,IETF分别给IPV4和IPV6网络定义了相关的协议标准,即DHCP(RFC2131)和DHCPV6(RFC3315),以及扩充的选项标准。本文主要阐述两个协议产生的背景、功能并比较二者之间的异同点。

    一、背景

          DHCP协议的出现可以回推到无盘工作站的出现,人们希望工作站能够通过网络通信的方式从服务器中获得自己的IP地址、服务器的IP地址、启动映像名等信息,此时Bootstrap协议(简写为BOOTP)应运而生,它主要应用于相对静态的环境,每台主机都有一个永久的网络连接,管理人员只需要建立一个BOOTP配置文件,该文件定义了每台主机的一组BOOTP参数,由于配置通常保持不变,因此该文件也不会经常改变,但是随着网络规模的不断扩大,网络配置也变得越来越复杂,原来针对静态主机配置的BOOTP协议明显不能满足实际的需要,由此,为了用户能快速地接入和退出网络,提高IP地址资源的利用率,IETF在BOOTP的基础上制定了一种自动分配IP地址的机制,即DHCP协议,因此,我们DHCP协议可以看成是对BOOTP协议的升级(所以要想抓DHCP包,必须输入bootp才行)。为了BOOTP协议的兼容,DHCP协议允许三种分配地址的方式,即手工配置,自动配置以及完全动态分配,除此之外,DHCP在原来的基础上增加了对选项的支持,通过这种方式,可以获得更多来自于服务器的配置信息。后来,随着IPV6网络的出现,以及IPV6地址所表现出来的巨大差异,IETF在2003年重新制定了针对IPV6的DHCP协议,即DHCPV6,对比V4,它增加了一些特有的功能,如支持有状态和无状态地址分配服务,支持临时地址,非临时地址以及前缀地址的分配等,后面小节将会更加具体比较二者在选项、客户端与服务器行为、消息类型的差异。

    二、DHCP VS DHCP6

       要比较两个协议,最直观的方式无非是通过比较二者有关的数据报,图1与图2分别对应的是正常情况下二者获取IP地址的过程示意图,从图1中可以看出,客户端首先利用0.0.0.0地址发送一个一个广播discover消息,接着多个服务器响应并发回了可供客户机使用的地址(参照offer消息),然后客户机从中选择某台服务器并向其发送request消息,最后被选中的服务器返回ACK确认消息,这样就完成了对客户机的地址分配。对于图2,客户机利用本地链路地址发送一个solicit广播消息(广播地址是ff02::1:2), 之后一台服务器提供了advertise消息,并将IP地址以及客户机所需要的配置参数信息返回,然后客户机发送一个request消息,主要从服务器端索取自己所需要的请求参数信息,最后服务器响应请求。


                                                                                                                图1 DHCP获取IP地址过程


                                                                                                              图2 DHCP6获取IPV6地址过程

    从上面这两个简单地过程,大体上了解了DHCP与DHCP6在获取IP地址时的一般过程,也明白了其中的一些差异,下面将从各个方面更加深入地介绍二者之间的差异。

    1.   DHCP消息VS DHCP6消息

          附A显示了消息报的格式差异,DHCP消息报组成字段的长度及功能如表1所示,对比表2的DHCP6数据报,DHCP消息报字段显得十分庞大,但是这并不代表,DHCP所支持的功能更多,因为DHCP6的选项十分丰富,如DHCP中的ciaddr字段所表达的含义在DHCP6中的IA-NA或者IA-TA选项是对应的,类似的还有chaddr字段对应于Client Identifier,这些在后面的选项比较中都会讲到。

    表1 DHCP数据报字段的长度与功能

    字段

    长度(字节为单位)

    功能

    op

    1

    定义DHCP消息类型,1为BOOTREQUEST,2为BOOTREPLY

    htype

    1

    定义硬件类型,1代表ethernet

    hlen

    1

    硬件地址长度,6代表10mb以太网

    hops

    1

    路由条数,通常用于中继代理,

    xid

    4

    由客户机生成的随机数,通常用于客户机和服务器之间同步消息

    secs

    2

    由client填充,表示客户机经历地址获取或续约所经历的时间

    flags

    2

    定义广播标志

    ciaddr

    4

    客户机的IP地址

    yiaddr

    4

    客户机的IP地址

    siaddr

    4

    返回下一个使用BOOTP协议的服务器地址

    giaddr

    4

    中继代理的IP地址

    chaddr

    16

    客户机的硬件地址

    sname

    64

    服务器的hostname

    file

    128

    boot文件名

    options

    var

    支持的选项

    表2 DHCP6数据报字段长度及功能

    字段

    长度(字节为单位)

    功能

    msg-type

    1

    定义DHCP消息类型

    transaction-id

    3

    由客户机生成的随机数,通常用于客户机和服务器之间同步消息

    options

    var

    支持的选项


              另外,需要指出的是,DHCP6将许多参数信息存放在选项中,这样能够减少数据报的净长度,提高存储利用率。这是因为DHCP6的消息报头仅占4个字节,而将需要发送或者接收参数信息附在选项上,而DHCP消息报则是将大量的字段包含在报头中,而实际情况是在某些消息报中,许多字段未得到充分运用而导致存储浪费,如hops仅仅在支持中继代理时才使用,file字段则几乎被舍弃。

             前面已经从消息报字段的长度以及功能两个方面对DHCP与DHCP6做了比较,下面将着重阐述DHCP与DHCP6各自所包含的消息类型,以及消息的发方以及收方,消息产生的时间,client和server各自表现出怎样的行为等内容。

            值得注意的是,DHCP消息报利用”op”字段来表示消息的类型,即BOOTREQUEST和BOOTREPLY,前者表示消息报是从客户机发往服务器,而后者刚好相反,由此可以看到,op字段仅仅只是定义了该消息报的发送方向,而对该消息报的其他信息一无所知,基于此,RFC2131规定在DHCP消息报中一定要包含DHCP Messae Type选项,另外,还规定了常见的几种消息类型:DHCPDISCOVER,DHCPOFFER,DHCPREQUEST ,DHCPACK,DHCPNAK,DHCPDECLINE,DHCPRELEASE和DHCPINFORM。在DHCP6消息报中,消息类型是由字段msg-type指定的,同样定义了常见的几种消息类型:SOLICIT,ADVERTISE,REQUEST,CONFIRM,RENEW,REBIND,REPLY,RELEASE,DECLINE,RECONFIGURE,INFORMATION-REQUEST,RELAY-FORW和RELAY-REPL,另外还定义了对应的数字编码。下面将通过表格的形式对数据包内容做更详细的解释。

    表3 DHCP消息报详细信息

    Type

    From

    To

    How and when to use

    Client behavior

    Server behavior

    Relay agent

    DHCPDISCOVER

    客户机

    本地服务器/中继代理

    客户机向本地可得到的服务器发送广播消息,可能会包含选项内容(网络地址和租约时间),

    注意:若目的地是中继代理,应该填充’giaddr’字段消息

     

    发送广播消息,广播地址为255.255.255.255,自身地址为0.0.0.0

     

     

    1.返回客户机DHCPOFFER消息,并在里面填充“yiaddr”字段

    2.若没有可用的地址,则向管理员报告问题

     

    给不与客户机在同一子网内的DHCP服务器传递消息报

     

    DHCPOFFER

    服务器/中继代理

    客户机

    回应来自于客户机发送的DHCPDISCOVER消息报

     

    如果没收到OFFER消息报,则重传DISCOVER消息,否则选择一个REQUEST消息报给选中的服务器,注意要填充'server identifier' 字段

     

    在OFFER消息中返回客户机DISCOVER消息中所需的参数信息

    将来自于DHCP服务器的OFFER消息报转发给客户机

    DHCPREQUEST

    客户机

    本地服务器/中继代理               

    满足以下情形时,客户端才发送请求包:

    1.向选中的服务器发送请求需要的参数列表,同时拒绝未选中的服务器;

    2.在客户机状态发生变化,如重启,链路改变等,向服务器确认之前分配的地址是否还能使用;

    3.  请求延长租约

    向服务器或中继代理发送请求消息报,广播地址依然为255.255.255.255,自身地址为0.0.0.0

    1.   根据返回的’server identifier’字内容,服务器能判断自己是否选中;

    2.被选中的服务器将客户机信息进行保存,并发送DHCPACK消息给客户机,注意,此时所提ACK消息中的内容应该与之前的OFFER消息一致。这与客户端第一种情形对应。

    3.  若服务器不能满足客户机的请求(如地址已经被分配),此时发送DHCPNAK消息给客户机,与第二、三种情形对应。

    4. 对应租约到期的客户机,服务器没有收到它的续约请求,则将所分配地址标记为available

    将客户机发送的请求包转发给DHCP 服务器

    DHCPACK

    服务器/中继代理

    客户机

    服务器收到来自于客户机的DHCPREQUEST消息。消息报中应该携带客户机所需要的配置信息。

    1.若客户机接收到ACK消息报,则利用ARP协议判断报中的地址是否内使用,若不能使用,则发送DECLINE消息给服务器并重启配置过程,发送请求报;

    2. 若客户机没收到ACK消息,或者NAK消息,首先客户机启动重传算法,若重传之后依然没有获得,则则客户机重启配置过程,发送请求报。

    发送ACK消息给客户端

    将来自于DHCP服务器的ACK消息报转发给客户机

    DHCPNAK

    服务器/中继代理

    客户机

    当服务器判断之前给客户机发送的地址已被使用或者租约期已到

    重启配置过程并发送请求报

    服务器发送NAK消息,并在`mseeage`选项中报告此问题

    将来自于DHCP服务器的NAK消息报转发给客户机

    DHCPDECLINE

    客户机

    服务器/中继代理

    客户机通过ARP协议探测到服务器所分配的IP地址已经被本网络中其它主机占用

    发送DECLINE消息报,并重启配置过程

    服务器将该地址标记为`unavailable`,并向管理员通报

    将客户机发送的DECLINE消息报转发给DHCP 服务器

    DHCPRELEASE

    客户机

    服务器/中继代理

    客户机向释放掉之前分配的IP地址

    客户机在RELEASE消息报中填充`client identifier`, `chaddr`和网络地址,并将其发给服务器或者中继代理

    服务器首先将客户机释放的地址标记为`available`,并将客户机的配置信息进行保存,已被后来重新使用

    将客户机发送的RELEASE消息报转发给DHCP 服务器

    DHCPINFORM

    客户机

    服务器/中继代理

    客户机已经通过其他方式获得IP地址(如手动),但是需要从服务器处获得本地配置信息

    发送INFORM给服务器

    构造出一个不包含“分配的IP地址,`yiaddr`字段和租约”信息的ACK消息报,但是包含客户机所要求的配置信息

    将客户机发送的INFORM消息报转发给DHCP 服务器

    上表详细描述了DHCP消息报的属性以及行为内容,有几个需要特别说明的地方是:

           ◆ 客户机所采取的重传机制是随机指数退避算法,具体思想可参考RFC2131文档;

           ◆ 客户机在发送DHCPDISCOVER消息报与DHCPREQUEST消息报时,广播地址与自身地址分别为:255.255.255.255,0.0.0.0.

           ◆ DHCP协议所运用的端口分别是:客户机-68,服务器-67.

           ◆ 在客户机释放掉IP地址后,服务器还将保存之前对客户机的配置信息,这样有助于相对稳定地分配IP地址,只要下次这个IP地址没有分给其它客户机,当前客户机在下           次发出配置地址请求时,服务器会将先前的配置信息赋给它。

           ◆ 注意发送DHCPREQUEST消息报的几种情形的区别(将状态的改变视为参考点):第一种情况出现在Client收到DHCPOFFER并进入SELECTING状态    之后,Client向感兴趣的Server发送DHCPREQUEST报,此时的消息报需要填充Server identifier, Request ip address等选项内容,结合后面马上要讲到的DHCP选项内容,一定要注意Server identifier填充的是server的标识符,Request ip address填充的是服务器在发送的DHCP OFFER消息报中附带的IP地址信息;第二种情况是当客户机发生状态 改变,如重启时需要跟服务器确认之前分配的IP地址是否依然可用,此时Client    处于INIT-REBOOTING状态并发送DHCPREQUEST消息报,注意此时消息报中依然 需要填充Request ip address选项,但是填充的内容则是0.0.0.0(known network address), 并且此时也不需填充Server identifier选项;第三种情况则出现在Client正处于BOUND状态并需要延长租 约时,向Server发送DHCPREQUEST消息报,不过此时不应该含有Server identifier以及Request ip address选项内容信息,增加的则是client  ip address(ciaddr)信息。

         表3只是列出了DHCP消息报的属性及行为内容,但是对消息报中应该包括的字段或者选项内容却涉及很少,下面将按照消息报的类型,列出各自应该包括的内容。

    表4 DHCP消息报填充字段与选项

    Type

    Client

    Server

    DHCPDISCOVER

    必须包含的字段有:`xid`,`secs`,`flags`,`ciaddr`,`chaddr`,,其它字段可选;对于选项内容,不能包括的是`server identifer`,其它可选。

    N/A

    DHCPOFFER

    N/A

    必须包含的字段有:`xid`, `yiaddr`, `siaddr`, `flags`, `giaddr`, `chaddr`,其它可选;对于选项,必须包括:`ip address lease`, `server identifier`,不能包含的是`request ip address`, `parameter request list`以及`client identifier`,其他可选

    DHCPREQUEST

    必须包含`xid`,`secs`,`flags`,`ciaddr`,`chaddr`,`chadrr`等字段,而对于`sname`,`file`,`options`等字段是可选的。至于选项内容,`request ip address`必须包含,`server identifer`在仅仅当客户机请求处于第一种情形,必须包含。其他选项均是可选的。

    N/A

    DHCPACK

    N/A

    必须设置同之前发送给客户机OFFER消息报中相同的字段和选项内容,另外再加上客户机REQUEST消息报中所请求的参数内容消息

    DHCPNAK

    N/A

    必须包含’client identifer’选项,或者错误报告选项

    DHCPDECLINE

    必须填充`xid`,`ciaddr`(0), ‘chaddr’等字段,同时必须包含`request ip address`选项,可能包含`client identifer`选项,不能包含的有:`IP address lease time`, `vendor classidentifer`, `parameter request list`等选项

    N/A

    DHCPRELEASE

    同DHCPDECLINE,但是此时不能包括`request ip address`

    N/A

    DHCPINFORM

    同DHCPDISCOVER,但是`request ip address` 和`ip address lease`布恩那个包含

    N/A

    上表详细列出了DHCP的消息报填充字段与选项信息,但有几点值得注意的是:

    ◆     各种消息报的`msg type`字段是一定包括的,在上表没有写出。

    ◆     DHCPREQUEST消息报中能否包含`server identifier`,主要跟客户机何时发出这种请求消息报有关,若是从初始状态开始发出请求报,则必须包含,  若是基于状态改变或者申请延长租约等因素发出请求报,则不能包含。

    ◆    在各种消息报中,若客户机与DHCP服务器不在同一网段,此时必须加上`giaddr`字段信息。

     下面主要阐述在DHCP6中各种消息报的属性、行为内容以及需要填充的字段与选项。

    表5  DHCP6消息报详细信息

    Type(registry code)

    From

    To

    How and when to use

    Client behavior

    Server behavior

    Solicit (1)

    客户机

    服务器/中继代理

    客户机给服务器发送solicit消息,以便得到Ipv6地址,以及选项中所附带的配置参数

    创建solicit消息报并将其发送给服务器

    1. 首先验证solicit消息的有效性,若消息报中没有包含`client identifier`或者包含有`server identifier`选项,则该报无效并舍弃;

    2. 根据管理策略来验证服务器是否允许接收该报;

    3.若服务器拥有可以分配的地址,则回发Advertise消息报(状态码为成功),否则回发状态码为` NoAddrsAvail `的Advertise消息报。

    4. 若socilit消息报中包含有`rapid commit`选项,则返回一个Reply消息报.

    Advertise (2)

    服务器/中继代理

    客户机

    回应客户机发送的solicit消息报

    1. 验证Advertise消息报的有效性: 若出现消息报中不含有`server identifier`字段和`client identifier`字段, `client identifier`字段中的DUID不匹配或者` transaction-id ``字段不匹配等情形,则该报无效并舍弃; 若包含状态码选项值为` NoAddrsAvail `,同样丢弃该报;

    2. 基于某种策略(后面将有详细介绍)选取Advertise消息报;

    给客户机发送advertise消息报,报中包含一些设置的字段与选项

    Request (3)

    客户机

    服务器/中继代理                                   

    客户机请求更多的配置参数

    创建并发送request消息报给服务器

    1. 首先验证request消息的有效性:若消息中不包含`client identifier`选项`和server identifier`选项,,或者选项中的DUID内容与服务器不匹配,则该报无效并舍弃;

    2.若无可用的地址分配,则返回一个状态码为` NoAddrsAvail `的Reply消息;

    3.  若服务器发现在IA选项中的地址前缀与自身不匹配,则返回一个状态码为`NotOnLink`的Reply消息报;

    4.创建一个Reply消息报,其中包括客户机所需要的地址以及其他参数配置信息。

    Confirm (4)

    客户机

    服务器/中继代理

    由于客户机的状态发生变化,发送confirm消息报去确认是否之前的配置是否还适合

     

    当客户机出现以下情形时:重启,客户机改为有线连接,客户机改变了无线接入点。此时客户机需要发送confirm消息进行确认

     

    1.        舍弃掉任何没有包含`server identifier`和`client identifier`选项的消息报;

    2.        判断消息报中的IA选项中的地址是否与自己同属一个链路,若是,返回一个状态码表示为为成功的Reply消息报; 否则返回一个状态码为NotOnLink的消息报;

    Renew (5)

    客户机

    服务器/中继代理

    要求服务器延长之前分配的租约以及升级其它的参数

    创建并发送Renew消息报

    1.  舍弃掉任何没有包含`server identifier`和`client identifier`选项,或者`server identifier`选项中的DUID与服务器不匹配的消息报;

    2.  验证消息保证中`IA`选项中地址是否与服务器中的存储信息吻合,若没找到对应信息,则返回状态码为`NoBinding`的Reply消息报;

    3. 返回包含新的lifetime, T1/T2值的Reply消息报给客户机

     

    Rebind (6)

    客户机

    服务器/中继代理

    要求服务器延长之前分配的租约以及升级其它的参数,注意这个消息报只有在之前客户机发送的Renew消息报没得到服务器响应后才产生

    创建并发送Rebind消息报

    1.舍弃掉任何没有包括`server identifier`和`client identifier`选项的Rebind消息报;

    2.若在服务器中没有找到与Rebind消息报中的IA选项中吻合的地址,或者发现地址但不再适合本链路,则服务器发回一个ilifetime置为0的Reply消息;

    3. 若找到吻合的地址信息,服务器发回一个包含新的lifetime以及T1/T2值的Reply消息报。

    Reply (7)

    服务器/中继代理

    客户机

    当服务器收到客户机发送的Solicit(含rapid commit选项),Request, Renew以及Rebind消息时,产生Reply消息报回应

     

     

     

     

     

     

     

     

     

     

    Release (8)

    客户机

    服务器/中继代理

    客户机发送Release消息报告知服务器自己所分配的一个或者多个地址不再使用时产生Release消息报

    创建并发送Release消息报,值得注意的是,释放掉的地址不能再使用,若没有收到Reply反馈消息报,则实现重传。

    1. 舍弃掉任何没有包含`server identifier`和`client identifier`选项,或者`server identifier`选项中的DUID与服务器不匹配的消息报;

    2. 服务器从Release消息报IA选项中的地址列表中找出有效的地址(即是由本服务器之前分配的),并将这些地址标记为available;

    3. 返回一个Reply反馈消息报;

    4.  服务器保留分配信息,以备下次直接将配置信息赋给这台客户机.

     

    Decline (9)

    客户机

    服务器/中继代理

    客户机发送Decline消息告知服务器自己所分配的地址已经被本链路的其它主机占用

    创建并发送Decline消息报,注意Decline消息报的`IA`选项中一定含有被占用的地址信息

    1. 舍弃掉任何没有包含`server identifier`和`client identifier`选项,或者`server identifier`选项中的DUID与服务器不匹配的消息报;

    2. 服务器检测Decline消息报中IA选项报告的地址,并将其删除,然后在本地做标记,下次将不再分配给其它客户机

    3. 处理完地址后,返回带有状态码的Reply消息

     

    Reconfigure (10)

    服务器/中继代理

    客户机

    服务器通过发送Reconfigure消息去告知客户机,服务器端出现新的配置参数或者某些参数已经更新,并触发客户机同服务器共同去完成Renew/Reply和Information-request/Reply

    1. 首先验证消息报的有效性:若消息报不是单播传给客户机;没有包含`server identifier`和`client identifier`,消息中没有包含`Reconfigure message`选项,消息中包含`IA`选项并且`Reconfigure meaasge`选项的消息类型是` INFORMATION-REQUEST `,则将该消息报舍弃;

    2.客户机返回一个Renew或者Information-request消息报

    创建并发送Reconfigure消息报,若在某个时间范围内,没有收到来自于客户机的Renew或者Information-request消息,则服务器重传该消息报

    Information-request (11)

    客户机

    服务器/中继代理

    客户机发送该消息报给服务器,仅仅为了得到配置参数,而不需要分配地址

    创建并发送Information-request消息报,若没收到Reply反馈消息,则重传消息报

    1. 验证消息报的有效性,若消息报中包含`server identifier`并且选项中的DUID与本地服务器不匹配,或者包含IA选项,则将该报舍弃;

    2.构造一个包含配置信息的Reply消息报并发送给客户机

    Relay-forward (12)

     

     

     

     

     

    Relay-reply (13)

     

     

     

     

     

    上表详细列出了DHCP6消息报的属性以及行为内容,有几个特别需要说明的地方是:

    ◆     对比,DHCP消息报,DHCP6在中继代理方面增加了消息报,以及其它一些机制,这方面的知识将在后面还会比较到。

    ◆     在`IA_NA`选项中,定义了多种状态码,分别为:

    Name

    Code

    description

    Success

    0

    表示成功

    UnspecFail

    1

    表示出现不知原因的失败

    NoAddrsAvail

    2

    表示服务器没有可用的地址去分配客户机

    NoBinding

    3

    表示服务器没有绑定客户机信息

    NotOnLink

    4

    表示服务器与客户机的地址前缀不匹配,即二者不在同一链路上

    UseMulticast

    5

    表示服务器强制客户机使用 All_DHCP_Relay_Agents_and_Servers多播地址去发送消息

     

     

     

     

     

     

     

     

     

    ◆     在DHCP6中,客户机去选取连接DHCP6服务器是基于某种策略的,具体跟服务器所返回消息报中的`prefere option`有关,在这个选项中定义了服务器参考值(server                   prefere value),它的最大值为255, 客户机正是根据服务器中的参考值不同选取目标服务器的,具体策略如下:

            ●     若某个服务器中的参考值为255,则它拥有最高优先级;

            ●     若服务器中的参考值正好相等,则根据对服务器返回的配置参数的兴趣而定;

           ●     客户机甚至会选取某些尽管参考值较低但返回更匹配的配置参数的服务器。 值得注意的是,在DHCP中,一般会选取最先返回配置参数的服务器!

    表6列出了DHCP6消息报的填充字段以及选项。

    表6  DHCP6消息报填充字段与选项

    Type

    Client

    Server

    Solicit (1)

    填充`msg-type`, ` transaction-id `字段,必须包含的选项有:` Client Identifier`,`IA-NA/TA`,可选的有:` Option Request`,` Reconfigure Accept ``rapid commit`.

    另外还有注意,客户机发送solicit消息时采用的是本地链路地址,而目的地址是” All_DHCP_Relay_Agents_and_Servers address”多播地址,即ff02::1:2

    N/A

    Advertise (2)

    N/A

    填充`msg-type`字段,` transaction-id `字段来自于客户机发送的solicit消息报中的相应字段值。必须包含的选项有:`server identifier`, `client identifier`, `IA`选项(注意IA选项的数量由silicit消息报中的`IA`选项而定)以及客户机中的`optional request`选项中含有的一些选项。可选的有:` Preference `, ` Reconfigure Accept `, ``

    Request (3)

    填充`msg-type`, ` transaction-id `字段,必须包含的选项有:`server identifier`, `client identifier`, ` Option Request `,`IA-NA/TA`,可选的有:` Reconfigure Accept `以及其它选项,注意请求时的目的地址以及多播地址同solicit消息报。

    N/A

    Confirm (4)

    填充`msg-type`字段,并产生` transaction-id `字段内容,必须包含的选项有:`client identifier`, `IA`(对于IA_NA选项,应该设置T1,T2域,以及preferred-lifetime and valid-lifetime域)

    N/A

    Renew (5)

    填充`msg-type`字段,并产生` transaction-id `字段内容,必须包含的选项有:`client identifier`, `server identifier`, `IA`, ` Option Request `以及其他可选项

    N/A

    Rebind (6)

    填充`msg-type`字段,并产生` transaction-id `字段内容,必须包含的选项内容有:`client identifier`, `IA`, `option request`

    N/A

    Reply (7)

    N/A

    1.   若是对solicit消息报(包含`rapid commit`选项)的回复:必须填充字段`msg-type`和` transaction-id `字段(来自于solicit消息报),必须包含的选项有:server identifier`, `client identifier`, `IA`以及request消息报中所请求的参数选项, `rapid commit`。

    2.   若是对Request消息报的回复:必须填充字段`msg-type`和` transaction-id `字段(来自于request消息报),必须包含的选项有:`server identifier`, `client identifier`, `IA`以及request消息报中所请求的参数选项;

    3.   若是对Confirm消息的回复:填充`msg-type`字段,` transaction-id `字段来自于客户机发送的solicit消息报中的相应字段值。必须包含的选项有:`server identifier`, `client identifier`, `status code`

    4.   若是对Renew消息的回复:填充`msg-type`字段,` transaction-id `字段来自于客户机发送的solicit消息报中的相应字段值。必须填充的选项有:`server identifier`, `client identifier`,,`IA`

    5.   若是对Rebind消息的回复:填充`msg-type`字段,` transaction-id `字段来自于客户机发送的solicit消息报中的相应字段值。必须填充的选项有:`server identifier`, `client identifier`,,`IA`

    6.   若是对Release消息的回复:填充`msg-type`字段,` transaction-id `字段来自于客户机发送的solicit消息报中的相应字段值。必须填充的选项有:`server identifier`, `client identifier`, `IA`(包含状态码选项)

    7.   若是对Decline消息的回复:填充`msg-type`字段,` transaction-id `字段来自于客户机发送的solicit消息报中的相应字段值。必须填充的选项是:`server identifier`, `client identifier`, `IA`(包含状态码选项)

    Release (8)

    填充`msg-type`字段,并产生` transaction-id `字段内容,必须包含的选项有:`client identifier`, `server identifier`, `IA`

    N/A

    Decline (9)

    填充`msg-type`字段,并产生` transaction-id `字段内容,,必须包含的选项有: `client identifier`, `server identifier`, `IA`

    N/A

    Reconfigure (10)

    N/A

    填充`msg-type`字段,并将` transaction-id `设置成0;必须包含的选项有:`server identifier`, `Reconfigure message`, `IA`, `Option request`则是可选的,其他的选项则都不能使用

    Information-request (11)

    填充`msg-type`字段,并产生` transaction-id `字段内容,必须包含的选项有:`option request`, `client identifier`

    N/A

    Relay-forward (12)

     

     

    Relay-reply (13)

     

     

          

     

    2. 两种版本的选项格式比较:

    DHCP:

           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

          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

          |   option-code  | option-len    |                              |

          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-                             +

          |                          option-data                          |

          |                      (option-len octets)                      |

          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    Fix-length options: option 0 and option 255 are considered as without data, so it only includes option-code filed.

    Variable-length options(except fix-length option): must follow a option-len field and the field value only specifies the size of option-data field, not include the size of option-code and option-len fields.

    These options are encoded as a one-byte type code, a one-byte length, and a buffer consisting of the number of bytes specified in the length, from zero to 255. In RFC 3396, provides a rule how to concatenate(decode) and split(encode) option field when the option-len excedes 255 octets in size.

    【注意】这个地方与DHCPV6存在着不同的处理方式,RFC 3396定义了如何处理当同code的选项数据被split并出现在不同的域内(field,主要有option, file和sname)时如何将它们连成一个单独的选项的规则;而在RFC 3315中则规定(section 22.1),当出现多个同code的选项时,它的选项数据是不能够联合在一起的,这也是跟二者所定义的选项内容结构差异密切相关的。

    DHCPv6

           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

          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

          |          option-code          |           option-len          |

          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

          |                          option-data                          |

          |                      (option-len octets)                      |

          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     

    DHCP与DHCPV6常见的支持选项:

     

    DHCP常见支持选项 (Public-defined options in DHCP)

    Option Name

    Code

    Len (octet)

    MAY, Must or Must not include

    Function

    pad

    0

    1

    All MAY

     

    align a subsequent field on a word (two-byte) boundary

     

    end

    255

    1

    All MUST

     

    Placed after all other options to mark the end of the option list

     

    Subnet Mask

    1

    4

     

     

    Specific the client's subnet mask

     

    Router

    2

    variable( multiply of 4)

     

     

    Specifies a list of router addresses for the client to use

     on the local network

     

    Domain name server

    6

    variable( multiply of 4)

     

    Specifies a list of domain name servers available to client

    Host name

    12

    variable( multiply of 4)

     

     

    Specifies a list of DNS name server addresses for the client to use on the local network

     

    Network Time Protocol Servers

    42

    variable( multiply of 4)

     

    Specifies a list of IP addresses indicating NTP servers available to the client.

    Requested IP Address

    50

    4

     

    Must:  DHCPREQUEST(when in SELECTING or INIT-REBOOT state), DHCPDECLINE, DHCPNAK

    MUST NOT: DHCPREQUEST(when in BOUND or RENEWING state), DHCPRELEASE, DHCPINFORM

     

     

    Allow the client to request that a particular IP address be assigned

     

     

    IP Address Lease Time

    51

    4

    Must: DHCPOFFER, DHCPACK

    MUST NOT: DHCPINFORM, DHCPDECLINE, DHCPRELEASE

     

     

    Allow the client to request a lease time for the IP address.

     

    DHCP Message Type

    53

    1

    All MUST

     

    Specifies the type of the DHCP message

     

    Server Identifier

    54

    4

     

    MUST: DHCPREQUEST(when in SELECTING state), DHCPDECLINE, DHCPRELEASE, DHCPACK, DHCPNAK, DHCPOFFER

    MUST NOT: DHCPDISCOVER, DHCPINFORM

     

     

    Specifies the ip address for the selected server to client

     

    Parameter request list

    55

    variable

    MAY: DHCPDISCOVER, DHCPREQUEST

     

    Used by a DHCP client to request values for

    specified configuration parameters

     

    Message

    56

    variable

    MAY: DHCPNAK

     

    Used by a DHCP server to provide an error message to a DHCP client in a DHCPNAK message in the event of a failure

     

    Maximum DHCP message size

    57

    2

    ALL MAY

     

    Specifies the maximum length DHCP message that

     it is willing to accept

     

    Renewal Time Value (T1)

    58

    4

     

     

    Specifies the time interval from address assignment until the client transitions to the RENEWING state.

     

    RebindingTime Value (T2)

    59

    4

     

     

    Specifies the time interval from address assignment until the client transitions to the REBINDING state.

     

    Vendorclassidentifier

    60

    variable

     

     

    Used by DHCP clients to optionally identify the vendor type and configuration of a DHCP client. such as “udhcpc 1.21.1”

     

    Client identifier

    61

    variable

    MUST: DHCPOFFER, DHCPACK, DHCPNAK

     

    Used by DHCP clients to specify their unique identifier, usually consist of a hardware type (htype) and hardware address (chaddr).

     

     

     

    DHCPV6 常见支持选项

    Option Name

    Code

    Len (octet)

    MAY, Must or Must not include

    Function

    Client identifier(RFC 3315)

    1

     

    Variable(equal to DUID)

     

    Must:

    Used to carry a DUID identifying a client between

     a client and a server

    Server identifier(RFC 3315)

    2

     

    Variable(equal to DUID)

     

     

    Used to carry a DUID identifying a server between

    a client and a server

    IA_NA(RFC 3315)

    3

    12(IAID+T1+T2) + length of IA_NA options

     

     

    Used to carry an IA_NA, the parameters associated with the IA_NA, and the non-temporary addresses associated

     with the IA_NA.

     

    IA_TA(RFC 3315)

    4

    4(IAID) + length of IA_TA options

     

     

    Used to carry an IA_TA, the parameters associated with the IA_TA and the addresses associated with the IA_TA.

     

    IA address(RFC 3315)

    5

    16(IPV6 address) + 4(prefered-lifetime) +4(valid-lifetime) + length of Iaaddr-options

     

     

    Used to specify IPv6 addresses associated with an

     IA_NA or an IA_TA.

     

    Option request(RFC 3315)

    6

    2 * number of request options (each option needs two octets )

     

     

    Used to identify a list of options in a message

    between a client and a server

     

    Preference(RFC 3315)

    7

    1(pref-value)

     

     

    Sent by a server to a client to affect the selection of

    a server by the client.

     

    Elapsed time(RFC 3315)

    8

    2

     

     

    Sent by client to indicate how long the client has been trying to complete a DHCP message exchange

     

    Status code(RFC 3315)

    13

    2(status code) + length of status-message

     

     

    Returns a status indication related to the DHCP message or option in which it appears

     

    Rapid commit(RFC 3315)

    14

    0

     

    Used to signal the use of the two message exchange for

     address assignment

    Vendor class(RFC 3315)

    16

    4(enterprise-number)

    + length of vendor-class-data

     

     

    Used by a client to identify the vendor that manufactured the hardware on which the client is running

     

    Reconfigure message

    (RFC 3315)

    19

    1(msg-type)

     

    Included in server and to indicate to the client whether

    the client responds with a Renew message or an

    Information-request message

    Reconfigure accept

     (RFC 3315)

    20

    0

     

     

    Announce to the server  whether the client is willing to accept Reconfigure messages, and a server uses this option to tell the client whether or not to accept Reconfigure messages.

     

    IA_PD(RFC 3315)

    25

    12(IAID + T1 + T2) + length of IA_PD options

     

    Used to carry a prefix delegation identity association

    IA_PD prefix

    (RFC 3633)

    26

    4(prefered-lifetime) + 4(valid-lifetime) + 1(prefix-length) + 16(IPV6 prefix)

     

    Used to specify IPv6 address prefixes associated with an IA_PD

    DNS Recursive Name Server

    (RFC 3646)

    23

    A multiply of 16 octets

    (each IPV6 address)

     

    Provides a list of one or more IPv6 addresses of DNS recursive name servers to which a client's DNS resolver

    MAY send DNS queries

    Information Refresh Time

    (RFC 4242)

    32

    4

     

     

    Used from server to client to inform the client when it should refresh the other configuration data

     

     

     

     

    展开全文
  • DHCPv6基础

    万次阅读 多人点赞 2018-05-27 08:08:43
    DHCPv6简介 IPv6动态主机配置协议DHCPv6(Dynamic Host Configuration Protocol for IPv6)是针对IPv6编址方案设计,为主机分配IPv6地址/前缀和其他网络配置参数。 目的: IPv6协议具有地址空间巨大特点,但...

    DHCPv6简介

    IPv6动态主机配置协议DHCPv6(Dynamic Host Configuration Protocol for IPv6)是针对IPv6编址方案设计,为主机分配IPv6地址/前缀和其他网络配置参数。

    目的:

    IPv6协议具有地址空间巨大的特点,但同时长达128比特的IPv6地址又要求高效合理的地址自动分配和管理策略。IPv6无状态地址配置方式(参看协议RFC2462)是目前广泛采用的IPv6地址自动配置方式。配置了该协议的主机只需相邻设备开启IPv6路由通告功能,即可以根据通告报文包含的前缀信息自动配置本机地址。

    无状态地址配置方案中设备并不记录所连接的IPv6主机的具体地址信息,可管理性差。而且当前无状态地址配置方式不能使IPv6主机获取DNS服务器的IPv6地址等配置信息,在可用性上有一定缺陷。对于互联网服务提供商来说,也没有相关的规范指明如何向设备自动分配IPv6前缀,所以在部署IPv6网络时,只能采用手动配置的方法为设备配置IPv6地址。

    DHCPv6技术解决了这一问题。DHCPv6属于一种有状态地址自动配置协议。

    与其他IPv6地址分配方式(手工配置、通过路由器通告消息中的网络前缀无状态自动配置等)相比,DHCPv6具有以下优点:

    • 更好地控制IPv6地址的分配。DHCPv6方式不仅可以记录为IPv6主机分配的地址,还可以为特定的IPv6主机分配特定的地址,以便于网络管理。
    • DHCPv6支持为网络设备分配IPv6前缀,便于全网络的自动配置和网络层次性管理。
    • 除了为IPv6主机分配IPv6地址/前缀外,还可以分配DNS服务器IPv6地址等网络配置参数。

    DHCPv6原理描述

    DHCPv6概述:

    DHCPv6是一种运行在客户端和服务器之间的协议,与IPv4中的DHCP一样,所有的协议报文都是基于UDP的。但是由于在IPv6中没有广播报文,因此DHCPv6使用组播报文,客户端也无需配置服务器的IPv6地址。

    IPv6地址分配类型:

    IPv6协议具有地址空间巨大的特点,但同时长达128比特的IPv6地址又要求高效合理的地址自动分配和管理策略。

    • 手动配置。手动配置IPv6地址/前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)。
    • 无状态自动地址分配。由接口ID生成链路本地地址,再根据路由通告报文RA(Router Advertisement)包含的前缀信息自动配置本机地址。
    • 有状态自动地址分配,即DHCPv6方式。DHCPv6又分为如下两种:
      • DHCPv6有状态自动分配。DHCPv6服务器自动分配IPv6地址/PD前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)。
      • DHCPv6无状态自动分配。主机IPv6地址仍然通过路由通告方式自动生成,DHCPv6服务器只分配除IPv6地址以外的配置参数,包括DNS、NIS、SNTP服务器等参数。

    DHCPv6基本架构:

    这里写图片描述

    图:DHCPv6基本架构

    DHCPv6基本协议架构中,主要包括以下三种角色:

    • DHCPv6 Client:

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

    • DHCPv6 Relay:

      DHCPv6中继代理,负责转发来自客户端方向或服务器方向的DHCPv6报文,协助DHCPv6客户端和DHCPv6服务器完成地址配置功能。一般情况下,DHCPv6客户端通过本地链路范围的组播地址与DHCPv6服务器通信,以获取IPv6地址/前缀和其他网络配置参数。如果服务器和客户端不在同一个链路范围内,则需要通过DHCPv6中继代理来转发报文,这样可以避免在每个链路范围内都部署DHCPv6服务器,既节省了成本,又便于进行集中管理。

      DHCPv6基本协议架构中,DHCPv6中继代理不是必须的角色。如果DHCPv6客户端和DHCPv6服务器位于同一链路范围内,或DHCPv6客户端和DHCPv6服务器直接通过单播交互完成地址分配或信息配置的情况下,是不需要DHCPv6中继代理参与的。只有当DHCPv6客户端和DHCPv6服务器不在同一链路范围内,或DHCPv6客户端和DHCPv6服务器无法单播交互的情况下,才需要DHCPv6中继代理的参与。

    • DHCPv6 Server:

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

    DHCPv6基本概念:

    组播地址

    • 在DHCPv6协议中,客户端不用配置DHCPv6 Server的IPv6地址,而是发送目的地址为组播地址的Solicit报文来定位DHCPv6服务器。
    • 在DHCPv4协议中,客户端发送广播报文来定位服务器。为避免广播风暴,在IPv6中,已经没有了广播类型的报文,而是采用组播报文。DHCPv6用到的组播地址有两个:
      • FF02::1:2(All DHCP Relay Agents and Servers):所有DHCPv6服务器和中继代理的组播地址,这个地址是链路范围的,用于客户端和相邻的服务器及中继代理之间通信。所有DHCPv6服务器和中继代理都是该组的成员。
      • FF05::1:3(All DHCP Servers):所有DHCPv6服务器组播地址,这个地址是站点范围的,用于中继代理和服务器之间的通信,站点内的所有DHCPv6服务器都是此组的成员。

    UDP端口号

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

    DHCP唯一标识符(DUID)

    DHCP设备唯一标识符DUID(DHCPv6 Unique Identifier),每个服务器或客户端有且只有一个唯一标识符,服务器使用DUID来识别不同的客户端,客户端则使用DUID来识别服务器。

    客户端和服务器DUID的内容分别通过DHCPv6报文中的Client Identifier和Server Identifier选项来携带。两种选项的格式一样,通过option-code字段的取值来区分是Client Identifier还是Server Identifier选项。

    身份联盟(IA)

    • 身份联盟IA(Identity Association)是使得服务器和客户端能够识别、分组和管理一系列相关IPv6地址的结构。每个IA包括一个IAID和相关联的配置信息。
    • 客户端必须为它的每一个要通过服务器获取IPv6地址的接口关联至少一个IA。客户端用给接口关联的IA来从服务器获取配置信息。每个IA必须明确关联到一个接口。
    • IA的身份由IAID唯一确定,同一个客户端的IAID不能出现重复。IAID不应因为设备的重启等因素发生丢失或改变。
    • IA中的配置信息由一个或多个IPv6地址以及T1和T2生存期组成。IA中的每个地址都有首选生存期和有效生存期。
    • 一个接口至少关联一个IA,一个IA可以包含一个或多个地址信息。

    DHCPv6报文类型

    DHCPv6报文格式:

    这里写图片描述

    图:DHCPv6的报文格式
    字段 长度 含义
    msg-type 1字节 表示报文的类型,取值为1~13,具体请参见DHCPv6报文类型
    transaction-ID 3字节 DHCPv6交互ID,也叫事务ID,用来标识一个来回的DHCPv6报文交互。例如Solicit/Advertise报文为一个交互。Request/Reply报文为另外一个交互,两者有不同的事务ID。交互ID特点如下:交互ID是DHCPv6客户端生成的一个随机值,DHCPv6客户端应当保证交互ID具有一定的随机性。对于DHCPv6服务器响应报文和相应的请求报文,两者交互ID保持一致。如果是DHCPv6服务器主动发起的会话报文,则交互ID为0。
    Options 可变 表示DHCPv6的选项字段。此字段包含了DHCPv6服务器分配给IPv6主机的配置信息,如DNS服务器的IPv6地址等信息。

    DHCPv6报文类型:

    目前DHCPv6定义了如下十三种类型报文,DHCPv6服务器和DHCPv6客户端之间通过这十三种类型的报文进行通信。

    DHCPv6和DHCPv4报文对比:

    报文类型 DHCPv6报文 DHCPv4报文 说明
    1 SOLICIT DHCP DISCOVER DHCPv6客户端使用Solicit报文来确定DHCPv6服务器的位置。
    2 ADVERTISE DHCP OFFER DHCPv6服务器发送Advertise报文来对Solicit报文进行回应,宣告自己能够提供DHCPv6服务。
    3 REQUEST DHCP REQUEST DHCPv6客户端发送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服务器发送携带了地址和配置信息的Reply消息来回应从DHCPv6客户端收到的Solicit、Request、Renew、Rebind报文。DHCPv6服务器发送携带配置信息的Reply消息来回应收到的Information-Request报文。用来回应DHCPv6客户端发来的Confirm、Release、Decline报文。
    8 RELEASE DHCP RELEASE DHCPv6客户端向为其分配地址的DHCPv6服务器发送Release报文,表明自己不再使用一个或多个获取的地址。
    9 DECLINE DHCP DECLINE DHCPv6客户端向DHCPv6服务器发送Decline报文,声明DHCPv6服务器分配的一个或多个地址在DHCPv6客户端所在链路上已经被使用了。
    10 RECONFIGURE - DHCPv6服务器向DHCPv6客户端发送Reconfigure报文,用于提示DHCPv6客户端,在DHCPv6服务器上存在新的网络配置信息。
    11 INFORMATION-REQUEST DHCP INFORM DHCPv6客户端向DHCPv6服务器发送Information-Request报文来请求除IPv6地址以外的网络配置信息。
    12 RELAY-FORW - 中继代理通过Relay-Forward报文来向DHCPv6服务器转发DHCPv6客户端请求报文。
    13 RELAY-REPL - DHCPv6服务器向中继代理发送Relay-Reply报文,其中携带了转发给DHCPv6客户端的报文。

    DHCPv6报文抓包:


    Solicit报文(类型1):

    DHCPv6客户端使用Solicit报文来确定DHCPv6服务器的位置。

    这里写图片描述

    图:Solicit报文抓包示例

    Advertise报文(类型2):

    DHCPv6服务器发送Advertise报文来对Solicit报文进行回应,宣告自己能够提供DHCPv6服务。

    这里写图片描述

    图:Advertise报文抓包示例

    Request报文(类型3):

    DHCPv6客户端发送Request报文来向DHCPv6服务器请求IPv6地址和其它配置信息。

    这里写图片描述

    图:Request报文抓包示例

    Renew报文(类型5):

    DHCPv6客户端向给其提供地址和配置信息的DHCPv6服务器发送Renew报文来延长地址的生存期并更新配置信息。

    这里写图片描述

    图:Renew报文抓包示例

    Rebind报文(类型6):

    如果Renew报文没有得到应答,DHCPv6客户端向任意可达的DHCPv6服务器发送Rebind报文来延长地址的生存期并更新配置信息。

    这里写图片描述

    图:Rebind报文抓包示例

    Reply报文(类型7):

    DHCPv6服务器在以下场合发送Reply报文:DHCPv6服务器发送携带了地址和配置信息的Reply消息来回应从DHCPv6客户端收到的Solicit、Request、Renew、Rebind报文。DHCPv6服务器发送携带配置信息的Reply消息来回应收到的Information-Request报文。用来回应DHCPv6客户端发来的Confirm、Release、Decline报文。

    这里写图片描述

    图:Reply报文抓包示例

    Release(类型8);

    DHCPv6客户端向为其分配地址的DHCPv6服务器发送Release报文,表明自己不再使用一个或多个获取的地址。

    这里写图片描述

    图:Release报文抓包示例

    Reply-forw报文(类型12):

    中继代理通过Relay-Forward报文来向DHCPv6服务器转发DHCPv6客户端请求报文。
    这里写图片描述

    图:Relay-Forw报文抓包示例

    Relay-reply报文(类型13):

    DHCPv6服务器向中继代理发送Relay-Reply报文,其中携带了转发给DHCPv6客户端的报文。

    这里写图片描述

    图:Relay-Reply报文抓包示例

    DHCPv6工作原理::

    DHCPv6自动分配分为DHCPv6有状态自动分配和DHCPv6无状态自动分配。

    • DHCPv6有状态自动分配。DHCPv6服务器自动配置IPv6地址/前缀,同时分配DNS、NIS、SNTP服务器等网络配置参数。
    • DHCPv6无状态自动分配。主机IPv6地址仍然通过路由通告方式自动生成,DHCP服务器只分配除IPv6地址以外的配置参数,包括DNS、NIS、SNTP服务器地址等参数。

    DHVPv6有状态自动分配:

    IPv6主机通过有状态DHCPv6方式获取IPv6地址和其他配置参数(例如DNS服务器的IPv6地址等)。

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

    • DHCPv6四步交互分配过程
    • DHCPv6两步交互快速分配过程

    DHCPv6四步交互

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

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

    DHCPv6四步交互地址分配过程如下:

    这里写图片描述

    图:DHCPv6四步交互地址分配过程

    DHCPv6四步交互地址分配过程如下:

    1. DHCPv6客户端发送Solicit报文,请求DHCPv6服务器为其分配IPv6地址和网络配置参数。
    2. 如果Solicit报文中没有携带Rapid Commit选项,或Solicit报文中携带Rapid Commit选项,但服务器不支持快速分配过程,则DHCPv6服务器回复Advertise报文,通知客户端可以为其分配的地址和网络配置参数。
    3. 如果DHCPv6客户端接收到多个服务器回复的Advertise报文,则根据Advertise报文中的服务器优先级等参数,选择优先级最高的一台服务器,并向所有的服务器发送Request组播报文,该报文中携带已选择的DHCPv6服务器的DUID。
    4. DHCPv6服务器回复Reply报文,确认将地址和网络配置参数分配给客户端使用。

    DHCPv6两步交互

    两步交互常用于网络中只有一个DHCPv6服务器的情况。DHCPv6客户端首先通过组播发送Solicit报文来定位可以为其提供服务的DHCPv6服务器,DHCPv6服务器收到客户端的Solicit报文后,为其分配地址和配置信息,直接回应Reply报文,完成地址申请和分配过程。

    两步交换可以提高DHCPv6过程的效率,但在有多个DHCPv6服务器的网络中,多个DHCPv6服务器都可以为DHCPv6客户端分配IPv6地址,回应Reply报文,但是客户端实际只可能使用其中一个服务器为其分配的IPv6地址和配置信息。为了防止这种情况的发生,管理员可以配置DHCPv6服务器是否支持两步交互地址分配方式。

    • DHCPv6服务器端如果配置使能了两步交互,并且客户端报文中也包含Rapid Commit选项,服务器采用两步交互方式为客户端分配地址和配置信息。
    • 如果DHCPv6服务器不支持快速分配地址,则采用四步交互方式为客户端分配IPv6地址和其他网络配置参数。

    DHCPv6两步交互地址分配过程如下图:

    这里写图片描述

    图:DHCPv6两步交互地址分配过程

    DHCPv6两步交互地址分配过程如下:

    1. DHCPv6客户端在发送的Solicit报文中携带Rapid Commit选项,标识客户端希望服务器能够快速为其分配地址和网络配置参数。
    2. DHCPv6服务器接收到Solicit报文后,将进行如下处理:
      • 如果DHCPv6服务器支持快速分配地址,则直接返回Reply报文,为客户端分配IPv6地址和其他网络配置参数,Replay报文中也携带Rapid Commit选项。
      • 如果DHCPv6服务器不支持快速分配过程,则采用四步交互方式为客户端分配IPv6地址/前缀和其他网络配置参数。

    DHCPv6无状态自动分配:

    IPv6节点可以通过DHCPv6无状态方式获取配置参数(包括DNS、SIP、SNTP等服务器配置信息,不包括IPv6地址)。

    DHCPv6无状态工作过程如下图所示:

    这里写图片描述

    图:DHCPv6无状态工作过程

    DHCPv6无状态工作过程如下:

    1. DHCPv6客户端以组播方式向DHCPv6服务器发送Information-Request报文,该报文中携带Option Request选项,指定DHCPv6客户端需要从DHCPv6服务器获取的配置参数。
    2. DHCPv6服务器收到Information-Request报文后,为DHCPv6客户端分配网络配置参数,并单播发送Reply报文,将网络配置参数返回给DHCPv6客户端。DHCPv6客户端根据收到Reply报文提供的参数完成DHCPv6客户端无状态配置。

    DHCPv6 PD工作原理:

    DHCPv6前缀代理DHCPv6 PD(Prefix Delegation)是由Cisco公司提出的一种前缀分配机制,并在RFC3633中得以标准化。在一个层次化的网络拓扑结构中,不同层次的IPv6地址分配一般是手工指定的。手工配置IPv6地址扩展性不好,不利于IPv6地址的统一规划管理。

    通过DHCPv6前缀代理机制,下游网络设备不需要再手工指定用户侧链路的IPv6地址前缀,它只需要向上游网络设备提出前缀分配申请,上游网络设备便可以分配合适的地址前缀给下游设备,下游设备把获得的前缀(一般前缀长度小于64)进一步自动细分成64前缀长度的子网网段,把细分的地址前缀再通过路由通告(RA)至与IPv6主机直连的用户链路上,实现IPv6主机的地址自动配置,完成整个系统层次的地址布局。

    DHCPv6 PD工作过程下图所示:

    这里写图片描述

    图:DHCPv6 PD工作原理

    DHCPv6 PD四步交互地址分配过程如下:

    1. DHCPv6 PD客户端发送Solicit报文,请求DHCPv6 PD服务器为其分配IPv6地址前缀。
    2. 如果Solicit报文中没有携带Rapid Commit选项,或Solicit报文中携带Rapid Commit选项,但服务器不支持快速分配过程,则DHCPv6服务器回复Advertise报文,通知客户端可以为其分配的IPv6地址前缀。
    3. 如果DHCPv6客户端接收到多个服务器回复的Advertise报文,则根据Advertise报文中的服务器优先级等参数,选择优先级最高的一台服务器,并向该服务器发送Request报文,请求服务器确认为其分配地址前缀。
    4. DHCPv6 PD服务器回复Reply报文,确认将IPv6地址前缀分配给DHCPv6 PD客户端使用。

    DHCPv6中继工作原理:

    DHCPv6客户端通过DHCPv6中继转发报文,获取IPv6地址/前缀和其他网络配置参数(例如DNS服务器的IPv6地址等)。

    DHCPv6中继工作过程如下图所示:

    这里写图片描述

    图:DHCPv6中继工作原理

    DHCPv6中继工作交互过程如下:

    1. DHCPv6客户端向所有DHCPv6服务器和DHCPv6中继发送目的地址为FF02::1:2(组播地址)的请求报文。
    2. 根据DHCPv6中继转发报文有如下两种情况:
      • 如果DHCPv6中继和DHCPv6客户端位于同一个链路上,即DHCPv6中继为DHCPv6客户端的第一跳中继,中继转发直接来自客户端的报文,此时DHCPv6中继实质上也是客户端的IPv6网关设备。DHCPv6中继收到客户端的报文后,将其封装在Relay-Forward报文的中继消息选项(Relay Message Option)中,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继。
      • 如果DHCPv6中继和DHCPv6客户端不在同一个链路上,中继收到的报文是来自其他中继的Relay-Forward报文。中继构造一个新的Relay-Forward报文,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继。
    3. DHCPv6服务器从Relay-Forward报文中解析出DHCPv6客户端的请求,为DHCPv6客户端选取IPv6地址和其他配置参数,构造应答消息,将应答消息封装在Relay-Reply报文的中继消息选项中,并将Relay-Reply报文发送给DHCPv6中继。
    4. DHCPv6中继从Relay-Reply报文中解析出DHCPv6服务器的应答,转发给DHCPv6客户端。如果DHCPv6客户端接收到多个DHCPv6服务器的应答,则根据报文中的服务器优先级选择一个DHCPv6服务器,后续从该DHCPv6服务器获取IPv6地址和其他网络配置参数。

    IPv6地址/前缀的分配与更新原则:

    IPv6地址分配的优先次序:

    DHCPv6服务器按照如下次序为DHCPv6客户端选择IPv6地址/前缀。

    1. 选择IPv6地址池

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

    2. 选择IPv6地址/前缀

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

      1. 如果地址池中为客户端指定了地址/前缀,优先从地址池中选择与客户端DUID匹配的地址/前缀分配给客户端。
      2. 如果客户端报文中的IA选项携带了有效的地址/前缀,优先从地址池中选择该地址/前缀分配给客户端。如果该地址/前缀在地址池中不可用,则另外分配一个空闲地址/前缀给客户端。如果IPV6前缀长度比指定分配长度大,则按指定分配长度来分配。
      3. 从地址池中选择空闲地址/前缀分配给客户端,保留地址(例如RFC 2526中定义的任播地址)、冲突地址、已被分配的地址不能再分配给客户端。
      4. 如果没有合适的IPv6地址/前缀可以分配,则分配失败。

    DHCPv6地址租约更新:

    DHCPv6服务器为DHCPv6客户端分配的地址是有租约的,租约由生命期(包括地址的首选生命期和有效生命期构成)和续租时间点(IA的T1、T2)构成。地址有效生命期结束后,DHCPv6客户端不能再使用该地址。在有效生命期到达之前,如果DHCPv6客户端希望继续使用该地址,则需要更新地址租约。

    DHCPv6客户端为了延长其与IA关联的地址的有效生命期和首选生命期,在T1时刻,发送包含IA选项的Renew报文给服务器,其中IA选项中携带需要续租的IA地址选项。如果DHCPv6客户端一直没有收到T1时刻续租报文的回应报文,那么在T2时刻,DHCPv6客户端通过Rebind报文向DHCPv6服务器继续续租地址。

    T1时刻地址租约更新过程如下:

    1. DHCPv6客户端在T1时刻(推荐值为优先生命期的0.5倍)发送Renew报文进行地址租约更新请求。
    2. DHCPv6服务器回应Reply报文。
      • 如果DHCPv6客户端可以继续使用该地址,则DHCPv6服务器回应续约成功的Reply报文,通知DHCPv6客户端已经成功更新地址租约。
      • 如果该地址不可以再分配给该DHCPv6客户端,则DHCPv6服务器回应续约失败的Reply报文,通知DHCPv6客户端不能获得新的租约。

    T2时刻地址租约更新过程如下:

    1. DHCPv6客户端在T1时刻发送Renew请求更新租约,但是没有收到DHCPv6服务器的回应报文。

    2. DHCPv6客户端在T2时刻(推荐值为优先生命期的0.8倍),向所有DHCPv6服务器组播发送Rebind报文请求更新租约。

    3. DHCPv6服务器回应Reply报文。

      • 如果DHCPv6客户端可以继续使用该地址,则DHCPv6服务器回应续约成功的Reply报文,通知DHCPv6客户端已经成功更新地址/前缀租约。
      • 如果该地址不可以再分配给该DHCPv6客户端,则DHCPv6服务器回应续约失败的Reply报文,通知DHCPv6客户端不能获得新的租约。

      如果DHCPv6客户端没有收到DHCPv6服务器的应答报文,则到达有效生命期后,DHCPv6客户端停止使用该地址。

    IP地址预留:

    DHCPv6服务器支持预留IPv6地址,即保留部分IPv6地址不参与动态分配。比如预留的IPv6地址可作为DNS服务器的IPv6地址。

    DHCPv6基础配置命令

    address prefix 
    //IPv6地址池视图下配置网络前缀和生命周期。
    //infinite:指定生命周期为无穷大。
    //生命周期默认值为86400,即1天。
    capwap-ac ipv6-address
    //在IPv6地址池视图下配置AC的IPv6地址。
    conflict-address expire-time expire-time
    //配置IPv6地址池下冲突地址老化时间。
    //缺省情况下,地址池下的冲突地址老化时间是172800秒,即2天。
    dhcpv6 client information-request
    //使能接口以DHCPv6无状态自动分配方式获取网络配置参数
    //(不包括IPv6地址)的功能。
    dhcpv6 client pd
    //配置DHCPv6 PD客户端功能。
    //hint ipv6-address:指定期望申请的IPv6地址
    //hint ipv6-prefix/ipv6-prefix-length:
    //      指定期望申请的IPv6地址前缀和前缀长度。
    //rapid-commit:指定客户端以两步交互申请IPv6地址前缀。
    //unicast-option:指定客户端以单播方式申请IPv6地址前缀。
    //union-mode:指定客户端使用一个报文同时获取IPv6地址和前缀。
    dhcpv6 duid { ll | llt | duid }
    //配置DHCPv6设备的唯一标识符DUID。
    //缺省情况下,设备以ll的方式生成DUID。
    //ll:指定设备采用链路层地址(即MAC地址)方式生成DUID。
    //llt:指定设备采用链路层地址(即MAC地址)加时间的方式生成DUID。
    dhcpv6 client renew
    //手动更新DHCPv6客户端申请到的IPv6地址/前缀。
    renew-time-percent rebind-time-percent
    //配置IPv6地址池的续租时间和重绑定时间占优先生命周期的百分比。
    //缺省情况下,IPv6地址池的续租时间占优先生命周期的50%
    //重绑定时间占优先生命周期的80%。
    dhcpv6 interface-id format { default | user-defined text }
    //配置DHCPv6报文中Interface-ID选项的格式。
    dhcpv6 packet-rate
    //使能DHCPv6报文限速功能,并配置速率抑制值。
    //缺省情况下,DHCPv6报文限速功能处于未使能状态。
    dhcpv6 packet-rate drop-alarm enable
    //使能DHCPv6报文限速丢弃告警功能。
    dhcpv6 packet-rate drop-alarm threshold 100
      //配置DHCPv6报文限速丢弃告警阈值.缺省值为100包
    dhcpv6 pool pool-name
    //创建IPv6/IPv6 PD地址池或进入IPv6/IPv6 PD地址池视图
    dhcpv6 relay destination
    //使能接口的DHCPv6中继代理功能
    //并配置DHCPv6服务器或下一跳中继代理的IPv6地址。
    dhcpv6 relay server-select group-name 
    //来配置DHCPv6中继所对应的DHCPv6服务器组。 
    dhcpv6 relay source-interface
    //配置接口地址作为报文源IPv6地址。
    dhcpv6 remote-id format
    //配置DHCPv6报文中Remote-ID选项的格式。
    dhcpv6 remote-id insert enable
    //使能在DHCPv6中继报文中插入remote-id选项的功能。
    dhcpv6 server
    //使能DHCPv6服务器或DHCPv6 PD服务器功能。
    dhcpv6-server ipv6-address
    //配置在DHCPv6服务器组中添加DHCPv6服务器或下一跳中继的成员。
    dhcpv6 server database
    //使能DHCPv6数据保存功能。
    //write-delay :指定DHCPv6数据保存的时间间隔。
    dhcpv6 server group group-name 
    //创建一个DHCPv6服务器组并进入DHCPv6服务器组视图
    dns-domain-name
    //配置DHCPv6服务器为DHCPv6客户端分配的域名后缀。
    dns-server ipv6-address 
    //配置DNS服务器IPv6地址。
    excluded-address
    //配置IPv6地址池中不参与自动分配的IPv6地址范围。
    information-refresh time
    //设置无状态DHCPv6方式分配给客户端的配置信息刷新时间。
    //缺省情况下,IPv6地址池配置信息刷新时间86400秒,即24小时。
    ipv6 address auto dhcp命
    //使能接口通过DHCPv6协议自动获取IPv6地址及其他网络配置参数。
    link-address
    //在IPv6地址池视图下配置网络前缀。
    lock
    //锁定IPv6地址池。
    nis-domain-name
    //配置DHCPv6服务器为DHCPv6客户端分配的NIS域名后缀
    nisp-domain-name
    //配置DHCPv6服务器为DHCPv6客户端分配的NISP域名后缀。
    prefix-delegation
    //配置地址池视图下的代理前缀。
    static-bind prefix
    //在DHCPv6地址池下静态绑定地址前缀与DHCPv6 PD客户端。
    import all
    //使能设备向DHCPv6客户端动态分配DNS服务器和SNTP服务器配置信息的功能。
    

    DHCPv6服务器、中继配置示例

    实验拓扑:

    这里写图片描述

    图:DHCPv6实验拓扑

    实验要求:

    在AR1为DHCPv6服务器,AR2为DHCP中继。通过配置,为主机分配IPv6地址。

    配置文件:

    AR1:

    <DHCPv6>dis current-configuration 
    #
     sysname DHCPv6
    #
    ipv6 
    #
    dhcp enable
    #
    dhcpv6 pool pool1
     address prefix 2000::/64
      //配置IPv6地址前缀
     excluded-address 2000::1
    #
    interface GigabitEthernet0/0/0
     ipv6 enable 
     ipv6 address 3000::1/64 
     dhcpv6 server pool1
    #
    ipv6 route-static :: 0 3000::2 
    #
    return
    

    AR2:

    <Realy>dis current-configuration 
    #
     sysname Realy
    #
    ipv6 
    #
    dhcp enable
    #
    interface GigabitEthernet0/0/0
     ipv6 enable 
     ipv6 address 3000::2/64 
    #
    interface GigabitEthernet0/0/1
     ipv6 enable 
     ipv6 address 2000::1/64 
     undo ipv6 nd ra halt
     //使能路由器向主机发送路由通告信息
     ipv6 nd autoconfig managed-address-flag
     //使M和O标志位置位。实现主机通过DHCPv6方式获取地址
     ipv6 nd autoconfig other-flag
     dhcpv6 relay destination 3000::1
     //指明DHCP服务器的地址
    #
    return
    

    这里写图片描述

    图:DHCPv6服务器地址分配状况


    参考文档:华为HedEx文档


    展开全文
  • RFC3315(中文) 动态主机配置协议-DHCPv6

    热门讨论 2012-02-15 14:24:05
    DHCPv6使DHCP服务器能够传递配置参数(如IPv6网络地址)给IPv6节点。它提供(可重复使用)网络地址自动分配能力,增加了配置灵活性。本协议是“IPv6无状态地址自动配置”(RFC2462)有状态等价物,能够用于独立获得...
  • DHCPv6解析

    千次阅读 2019-02-15 17:03:55
    DHCPv6简介 IPv6动态主机配置协议DHCPv6(Dynamic Host Configuration Protocol for IPv6)是针对IPv6编址方案设计,为主机分配IPv6地址/前缀和其他网络配置参数。 目的: IPv6协议具有地址空间巨大特点,但同时长达...

    DHCPv6简介

    IPv6动态主机配置协议DHCPv6(Dynamic Host Configuration Protocol for IPv6)是针对IPv6编址方案设计,为主机分配IPv6地址/前缀和其他网络配置参数。

    目的:

    IPv6协议具有地址空间巨大的特点,但同时长达128比特的IPv6地址又要求高效合理的地址自动分配和管理策略。IPv6无状态地址配置方式(参看协议RFC2462)是目前广泛采用的IPv6地址自动配置方式。配置了该协议的主机只需相邻设备开启IPv6路由通告功能,即可以根据通告报文包含的前缀信息自动配置本机地址。

    无状态地址配置方案中设备并不记录所连接的IPv6主机的具体地址信息,可管理性差。而且当前无状态地址配置方式不能使IPv6主机获取DNS服务器的IPv6地址等配置信息,在可用性上有一定缺陷。对于互联网服务提供商来说,也没有相关的规范指明如何向设备自动分配IPv6前缀,所以在部署IPv6网络时,只能采用手动配置的方法为设备配置IPv6地址。

    DHCPv6技术解决了这一问题。DHCPv6属于一种有状态地址自动配置协议。

    与其他IPv6地址分配方式(手工配置、通过路由器通告消息中的网络前缀无状态自动配置等)相比,DHCPv6具有以下优点:

    • 更好地控制IPv6地址的分配。DHCPv6方式不仅可以记录为IPv6主机分配的地址,还可以为特定的IPv6主机分配特定的地址,以便于网络管理。
    • DHCPv6支持为网络设备分配IPv6前缀,便于全网络的自动配置和网络层次性管理。
    • 除了为IPv6主机分配IPv6地址/前缀外,还可以分配DNS服务器IPv6地址等网络配置参数。

    DHCPv6原理描述

    DHCPv6概述:

    DHCPv6是一种运行在客户端和服务器之间的协议,与IPv4中的DHCP一样,所有的协议报文都是基于UDP的。但是由于在IPv6中没有广播报文,因此DHCPv6使用组播报文,客户端也无需配置服务器的IPv6地址。

    IPv6地址分配类型:

    IPv6协议具有地址空间巨大的特点,但同时长达128比特的IPv6地址又要求高效合理的地址自动分配和管理策略。

    • 手动配置。手动配置IPv6地址/前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)。
    • 无状态自动地址分配。由接口ID生成链路本地地址,再根据路由通告报文RA(Router Advertisement)包含的前缀信息自动配置本机地址。
    • 有状态自动地址分配,即DHCPv6方式。DHCPv6又分为如下两种:
      • DHCPv6有状态自动分配。DHCPv6服务器自动分配IPv6地址/PD前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)。
      • DHCPv6无状态自动分配。主机IPv6地址仍然通过路由通告方式自动生成,DHCPv6服务器只分配除IPv6地址以外的配置参数,包括DNS、NIS、SNTP服务器等参数。

    DHCPv6基本架构:

    这里写图片描述

    图:DHCPv6基本架构

    DHCPv6基本协议架构中,主要包括以下三种角色:

    • DHCPv6 Client:

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

  • DHCPv6 Relay:

  • DHCPv6中继代理,负责转发来自客户端方向或服务器方向的DHCPv6报文,协助DHCPv6客户端和DHCPv6服务器完成地址配置功能。一般情况下,DHCPv6客户端通过本地链路范围的组播地址与DHCPv6服务器通信,以获取IPv6地址/前缀和其他网络配置参数。如果服务器和客户端不在同一个链路范围内,则需要通过DHCPv6中继代理来转发报文,这样可以避免在每个链路范围内都部署DHCPv6服务器,既节省了成本,又便于进行集中管理。

    DHCPv6基本协议架构中,DHCPv6中继代理不是必须的角色。如果DHCPv6客户端和DHCPv6服务器位于同一链路范围内,或DHCPv6客户端和DHCPv6服务器直接通过单播交互完成地址分配或信息配置的情况下,是不需要DHCPv6中继代理参与的。只有当DHCPv6客户端和DHCPv6服务器不在同一链路范围内,或DHCPv6客户端和DHCPv6服务器无法单播交互的情况下,才需要DHCPv6中继代理的参与。

  • DHCPv6 Server:

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

    DHCPv6基本概念:

    组播地址

    • 在DHCPv6协议中,客户端不用配置DHCPv6 Server的IPv6地址,而是发送目的地址为组播地址的Solicit报文来定位DHCPv6服务器。
    • 在DHCPv4协议中,客户端发送广播报文来定位服务器。为避免广播风暴,在IPv6中,已经没有了广播类型的报文,而是采用组播报文。DHCPv6用到的组播地址有两个:
      • FF02::1:2(All DHCP Relay Agents and Servers):所有DHCPv6服务器和中继代理的组播地址,这个地址是链路范围的,用于客户端和相邻的服务器及中继代理之间通信。所有DHCPv6服务器和中继代理都是该组的成员。
      • FF05::1:3(All DHCP Servers):所有DHCPv6服务器组播地址,这个地址是站点范围的,用于中继代理和服务器之间的通信,站点内的所有DHCPv6服务器都是此组的成员。

    UDP端口号

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

    DHCP唯一标识符(DUID)

    DHCP设备唯一标识符DUID(DHCPv6 Unique Identifier),每个服务器或客户端有且只有一个唯一标识符,服务器使用DUID来识别不同的客户端,客户端则使用DUID来识别服务器。

    客户端和服务器DUID的内容分别通过DHCPv6报文中的Client Identifier和Server Identifier选项来携带。两种选项的格式一样,通过option-code字段的取值来区分是Client Identifier还是Server Identifier选项。

    身份联盟(IA)

    • 身份联盟IA(Identity Association)是使得服务器和客户端能够识别、分组和管理一系列相关IPv6地址的结构。每个IA包括一个IAID和相关联的配置信息。
    • 客户端必须为它的每一个要通过服务器获取IPv6地址的接口关联至少一个IA。客户端用给接口关联的IA来从服务器获取配置信息。每个IA必须明确关联到一个接口。
    • IA的身份由IAID唯一确定,同一个客户端的IAID不能出现重复。IAID不应因为设备的重启等因素发生丢失或改变。
    • IA中的配置信息由一个或多个IPv6地址以及T1和T2生存期组成。IA中的每个地址都有首选生存期和有效生存期。
    • 一个接口至少关联一个IA,一个IA可以包含一个或多个地址信息。

    DHCPv6报文类型

    DHCPv6报文格式:

    这里写图片描述

    图:DHCPv6的报文格式

    字段 长度 含义
    msg-type 1字节 表示报文的类型,取值为1~13,具体请参见DHCPv6报文类型
    transaction-ID 3字节 DHCPv6交互ID,也叫事务ID,用来标识一个来回的DHCPv6报文交互。例如Solicit/Advertise报文为一个交互。Request/Reply报文为另外一个交互,两者有不同的事务ID。交互ID特点如下:交互ID是DHCPv6客户端生成的一个随机值,DHCPv6客户端应当保证交互ID具有一定的随机性。对于DHCPv6服务器响应报文和相应的请求报文,两者交互ID保持一致。如果是DHCPv6服务器主动发起的会话报文,则交互ID为0。
    Options 可变 表示DHCPv6的选项字段。此字段包含了DHCPv6服务器分配给IPv6主机的配置信息,如DNS服务器的IPv6地址等信息。

    DHCPv6报文类型:

    目前DHCPv6定义了如下十三种类型报文,DHCPv6服务器和DHCPv6客户端之间通过这十三种类型的报文进行通信。

    DHCPv6和DHCPv4报文对比:

    报文类型 DHCPv6报文 DHCPv4报文 说明
    1 SOLICIT DHCP DISCOVER DHCPv6客户端使用Solicit报文来确定DHCPv6服务器的位置。
    2 ADVERTISE DHCP OFFER DHCPv6服务器发送Advertise报文来对Solicit报文进行回应,宣告自己能够提供DHCPv6服务。
    3 REQUEST DHCP REQUEST DHCPv6客户端发送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服务器发送携带了地址和配置信息的Reply消息来回应从DHCPv6客户端收到的Solicit、Request、Renew、Rebind报文。DHCPv6服务器发送携带配置信息的Reply消息来回应收到的Information-Request报文。用来回应DHCPv6客户端发来的Confirm、Release、Decline报文。
    8 RELEASE DHCP RELEASE DHCPv6客户端向为其分配地址的DHCPv6服务器发送Release报文,表明自己不再使用一个或多个获取的地址。
    9 DECLINE DHCP DECLINE DHCPv6客户端向DHCPv6服务器发送Decline报文,声明DHCPv6服务器分配的一个或多个地址在DHCPv6客户端所在链路上已经被使用了。
    10 RECONFIGURE - DHCPv6服务器向DHCPv6客户端发送Reconfigure报文,用于提示DHCPv6客户端,在DHCPv6服务器上存在新的网络配置信息。
    11 INFORMATION-REQUEST DHCP INFORM DHCPv6客户端向DHCPv6服务器发送Information-Request报文来请求除IPv6地址以外的网络配置信息。
    12 RELAY-FORW - 中继代理通过Relay-Forward报文来向DHCPv6服务器转发DHCPv6客户端请求报文。
    13 RELAY-REPL - DHCPv6服务器向中继代理发送Relay-Reply报文,其中携带了转发给DHCPv6客户端的报文。

    DHCPv6报文抓包:


    Solicit报文(类型1):

    DHCPv6客户端使用Solicit报文来确定DHCPv6服务器的位置。

    这里写图片描述

    图:Solicit报文抓包示例


    Advertise报文(类型2):

    DHCPv6服务器发送Advertise报文来对Solicit报文进行回应,宣告自己能够提供DHCPv6服务。

    这里写图片描述

    图:Advertise报文抓包示例


    Request报文(类型3):

    DHCPv6客户端发送Request报文来向DHCPv6服务器请求IPv6地址和其它配置信息。

    这里写图片描述

    图:Request报文抓包示例


    Renew报文(类型5):

    DHCPv6客户端向给其提供地址和配置信息的DHCPv6服务器发送Renew报文来延长地址的生存期并更新配置信息。

    这里写图片描述

    图:Renew报文抓包示例


    Rebind报文(类型6):

    如果Renew报文没有得到应答,DHCPv6客户端向任意可达的DHCPv6服务器发送Rebind报文来延长地址的生存期并更新配置信息。

    这里写图片描述

    图:Rebind报文抓包示例


    Reply报文(类型7):

    DHCPv6服务器在以下场合发送Reply报文:DHCPv6服务器发送携带了地址和配置信息的Reply消息来回应从DHCPv6客户端收到的Solicit、Request、Renew、Rebind报文。DHCPv6服务器发送携带配置信息的Reply消息来回应收到的Information-Request报文。用来回应DHCPv6客户端发来的Confirm、Release、Decline报文。

    这里写图片描述

    图:Reply报文抓包示例


    Release(类型8);

    DHCPv6客户端向为其分配地址的DHCPv6服务器发送Release报文,表明自己不再使用一个或多个获取的地址。

    这里写图片描述

    图:Release报文抓包示例


    Reply-forw报文(类型12):

    中继代理通过Relay-Forward报文来向DHCPv6服务器转发DHCPv6客户端请求报文。

    这里写图片描述

    图:Relay-Forw报文抓包示例


    Relay-reply报文(类型13):

    DHCPv6服务器向中继代理发送Relay-Reply报文,其中携带了转发给DHCPv6客户端的报文。

    这里写图片描述

    图:Relay-Reply报文抓包示例


    DHCPv6工作原理::

    DHCPv6自动分配分为DHCPv6有状态自动分配和DHCPv6无状态自动分配。

    • DHCPv6有状态自动分配。DHCPv6服务器自动配置IPv6地址/前缀,同时分配DNS、NIS、SNTP服务器等网络配置参数。
    • DHCPv6无状态自动分配。主机IPv6地址仍然通过路由通告方式自动生成,DHCP服务器只分配除IPv6地址以外的配置参数,包括DNS、NIS、SNTP服务器地址等参数。

    DHVPv6有状态自动分配:

    IPv6主机通过有状态DHCPv6方式获取IPv6地址和其他配置参数(例如DNS服务器的IPv6地址等)。

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

    • DHCPv6四步交互分配过程
    • DHCPv6两步交互快速分配过程

    DHCPv6四步交互

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

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

    DHCPv6四步交互地址分配过程如下:

    这里写图片描述

    图:DHCPv6四步交互地址分配过程

    DHCPv6四步交互地址分配过程如下:

    1. DHCPv6客户端发送Solicit报文,请求DHCPv6服务器为其分配IPv6地址和网络配置参数。
    2. 如果Solicit报文中没有携带Rapid Commit选项,或Solicit报文中携带Rapid Commit选项,但服务器不支持快速分配过程,则DHCPv6服务器回复Advertise报文,通知客户端可以为其分配的地址和网络配置参数。
    3. 如果DHCPv6客户端接收到多个服务器回复的Advertise报文,则根据Advertise报文中的服务器优先级等参数,选择优先级最高的一台服务器,并向所有的服务器发送Request组播报文,该报文中携带已选择的DHCPv6服务器的DUID。
    4. DHCPv6服务器回复Reply报文,确认将地址和网络配置参数分配给客户端使用。

    DHCPv6两步交互

    两步交互常用于网络中只有一个DHCPv6服务器的情况。DHCPv6客户端首先通过组播发送Solicit报文来定位可以为其提供服务的DHCPv6服务器,DHCPv6服务器收到客户端的Solicit报文后,为其分配地址和配置信息,直接回应Reply报文,完成地址申请和分配过程。

    两步交换可以提高DHCPv6过程的效率,但在有多个DHCPv6服务器的网络中,多个DHCPv6服务器都可以为DHCPv6客户端分配IPv6地址,回应Reply报文,但是客户端实际只可能使用其中一个服务器为其分配的IPv6地址和配置信息。为了防止这种情况的发生,管理员可以配置DHCPv6服务器是否支持两步交互地址分配方式。

    • DHCPv6服务器端如果配置使能了两步交互,并且客户端报文中也包含Rapid Commit选项,服务器采用两步交互方式为客户端分配地址和配置信息。
    • 如果DHCPv6服务器不支持快速分配地址,则采用四步交互方式为客户端分配IPv6地址和其他网络配置参数。

    DHCPv6两步交互地址分配过程如下图:

    这里写图片描述

    图:DHCPv6两步交互地址分配过程

    DHCPv6两步交互地址分配过程如下:

    1. DHCPv6客户端在发送的Solicit报文中携带Rapid Commit选项,标识客户端希望服务器能够快速为其分配地址和网络配置参数。
    2. DHCPv6服务器接收到Solicit报文后,将进行如下处理:
      • 如果DHCPv6服务器支持快速分配地址,则直接返回Reply报文,为客户端分配IPv6地址和其他网络配置参数,Replay报文中也携带Rapid Commit选项。
      • 如果DHCPv6服务器不支持快速分配过程,则采用四步交互方式为客户端分配IPv6地址/前缀和其他网络配置参数。

    DHCPv6无状态自动分配:

    IPv6节点可以通过DHCPv6无状态方式获取配置参数(包括DNS、SIP、SNTP等服务器配置信息,不包括IPv6地址)。

    DHCPv6无状态工作过程如下图所示:

    这里写图片描述

    图:DHCPv6无状态工作过程

    DHCPv6无状态工作过程如下:

    1. DHCPv6客户端以组播方式向DHCPv6服务器发送Information-Request报文,该报文中携带Option Request选项,指定DHCPv6客户端需要从DHCPv6服务器获取的配置参数。
    2. DHCPv6服务器收到Information-Request报文后,为DHCPv6客户端分配网络配置参数,并单播发送Reply报文,将网络配置参数返回给DHCPv6客户端。DHCPv6客户端根据收到Reply报文提供的参数完成DHCPv6客户端无状态配置。

    DHCPv6 PD工作原理:

    DHCPv6前缀代理DHCPv6 PD(Prefix Delegation)是由Cisco公司提出的一种前缀分配机制,并在RFC3633中得以标准化。在一个层次化的网络拓扑结构中,不同层次的IPv6地址分配一般是手工指定的。手工配置IPv6地址扩展性不好,不利于IPv6地址的统一规划管理。

    通过DHCPv6前缀代理机制,下游网络设备不需要再手工指定用户侧链路的IPv6地址前缀,它只需要向上游网络设备提出前缀分配申请,上游网络设备便可以分配合适的地址前缀给下游设备,下游设备把获得的前缀(一般前缀长度小于64)进一步自动细分成64前缀长度的子网网段,把细分的地址前缀再通过路由通告(RA)至与IPv6主机直连的用户链路上,实现IPv6主机的地址自动配置,完成整个系统层次的地址布局。

    DHCPv6 PD工作过程下图所示:

    这里写图片描述

    图:DHCPv6 PD工作原理

    DHCPv6 PD四步交互地址分配过程如下:

    1. DHCPv6 PD客户端发送Solicit报文,请求DHCPv6 PD服务器为其分配IPv6地址前缀。
    2. 如果Solicit报文中没有携带Rapid Commit选项,或Solicit报文中携带Rapid Commit选项,但服务器不支持快速分配过程,则DHCPv6服务器回复Advertise报文,通知客户端可以为其分配的IPv6地址前缀。
    3. 如果DHCPv6客户端接收到多个服务器回复的Advertise报文,则根据Advertise报文中的服务器优先级等参数,选择优先级最高的一台服务器,并向该服务器发送Request报文,请求服务器确认为其分配地址前缀。
    4. DHCPv6 PD服务器回复Reply报文,确认将IPv6地址前缀分配给DHCPv6 PD客户端使用。

    DHCPv6中继工作原理:

    DHCPv6客户端通过DHCPv6中继转发报文,获取IPv6地址/前缀和其他网络配置参数(例如DNS服务器的IPv6地址等)。

    DHCPv6中继工作过程如下图所示:

    这里写图片描述

    图:DHCPv6中继工作原理

    DHCPv6中继工作交互过程如下:

    1. DHCPv6客户端向所有DHCPv6服务器和DHCPv6中继发送目的地址为FF02::1:2(组播地址)的请求报文。
    2. 根据DHCPv6中继转发报文有如下两种情况:
      • 如果DHCPv6中继和DHCPv6客户端位于同一个链路上,即DHCPv6中继为DHCPv6客户端的第一跳中继,中继转发直接来自客户端的报文,此时DHCPv6中继实质上也是客户端的IPv6网关设备。DHCPv6中继收到客户端的报文后,将其封装在Relay-Forward报文的中继消息选项(Relay Message Option)中,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继。
      • 如果DHCPv6中继和DHCPv6客户端不在同一个链路上,中继收到的报文是来自其他中继的Relay-Forward报文。中继构造一个新的Relay-Forward报文,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继。
    3. DHCPv6服务器从Relay-Forward报文中解析出DHCPv6客户端的请求,为DHCPv6客户端选取IPv6地址和其他配置参数,构造应答消息,将应答消息封装在Relay-Reply报文的中继消息选项中,并将Relay-Reply报文发送给DHCPv6中继。
    4. DHCPv6中继从Relay-Reply报文中解析出DHCPv6服务器的应答,转发给DHCPv6客户端。如果DHCPv6客户端接收到多个DHCPv6服务器的应答,则根据报文中的服务器优先级选择一个DHCPv6服务器,后续从该DHCPv6服务器获取IPv6地址和其他网络配置参数。

    IPv6地址/前缀的分配与更新原则:

    IPv6地址分配的优先次序:

    DHCPv6服务器按照如下次序为DHCPv6客户端选择IPv6地址/前缀。

    1. 选择IPv6地址池

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

  • 选择IPv6地址/前缀

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

    1. 如果地址池中为客户端指定了地址/前缀,优先从地址池中选择与客户端DUID匹配的地址/前缀分配给客户端。
    2. 如果客户端报文中的IA选项携带了有效的地址/前缀,优先从地址池中选择该地址/前缀分配给客户端。如果该地址/前缀在地址池中不可用,则另外分配一个空闲地址/前缀给客户端。如果IPV6前缀长度比指定分配长度大,则按指定分配长度来分配。
    3. 从地址池中选择空闲地址/前缀分配给客户端,保留地址(例如RFC 2526中定义的任播地址)、冲突地址、已被分配的地址不能再分配给客户端。
    4. 如果没有合适的IPv6地址/前缀可以分配,则分配失败。

    DHCPv6地址租约更新:

    DHCPv6服务器为DHCPv6客户端分配的地址是有租约的,租约由生命期(包括地址的首选生命期和有效生命期构成)和续租时间点(IA的T1、T2)构成。地址有效生命期结束后,DHCPv6客户端不能再使用该地址。在有效生命期到达之前,如果DHCPv6客户端希望继续使用该地址,则需要更新地址租约。

    DHCPv6客户端为了延长其与IA关联的地址的有效生命期和首选生命期,在T1时刻,发送包含IA选项的Renew报文给服务器,其中IA选项中携带需要续租的IA地址选项。如果DHCPv6客户端一直没有收到T1时刻续租报文的回应报文,那么在T2时刻,DHCPv6客户端通过Rebind报文向DHCPv6服务器继续续租地址。

    T1时刻地址租约更新过程如下:

    1. DHCPv6客户端在T1时刻(推荐值为优先生命期的0.5倍)发送Renew报文进行地址租约更新请求。
    2. DHCPv6服务器回应Reply报文。
      • 如果DHCPv6客户端可以继续使用该地址,则DHCPv6服务器回应续约成功的Reply报文,通知DHCPv6客户端已经成功更新地址租约。
      • 如果该地址不可以再分配给该DHCPv6客户端,则DHCPv6服务器回应续约失败的Reply报文,通知DHCPv6客户端不能获得新的租约。

    T2时刻地址租约更新过程如下:

    1. DHCPv6客户端在T1时刻发送Renew请求更新租约,但是没有收到DHCPv6服务器的回应报文。

    2. DHCPv6客户端在T2时刻(推荐值为优先生命期的0.8倍),向所有DHCPv6服务器组播发送Rebind报文请求更新租约。

    3. DHCPv6服务器回应Reply报文。

    • 如果DHCPv6客户端可以继续使用该地址,则DHCPv6服务器回应续约成功的Reply报文,通知DHCPv6客户端已经成功更新地址/前缀租约。
    • 如果该地址不可以再分配给该DHCPv6客户端,则DHCPv6服务器回应续约失败的Reply报文,通知DHCPv6客户端不能获得新的租约。

    如果DHCPv6客户端没有收到DHCPv6服务器的应答报文,则到达有效生命期后,DHCPv6客户端停止使用该地址。

    IP地址预留:

    DHCPv6服务器支持预留IPv6地址,即保留部分IPv6地址不参与动态分配。比如预留的IPv6地址可作为DNS服务器的IPv6地址。

    展开全文
  • DHCPv6协议介绍

    2019-03-05 21:36:37
    本胶片描述DHCPv6协议中client和server端交互过程,包括地址分配/续租/释放等过程说明; 本文主要参考RFC 3315,可作为该协议导读材料;
  • 13. Transmission of Message by a Client 客户端信息传输 客户端使用多播传输给多个服务器或者单个服务器。客户端通过Server Identifier option(22.3)中DUID来指示指定服务器响应(所有服务器都会接收到...
  • DHCPV6地址获取交互

    2020-09-04 14:17:31
    DHCPv6简介 IPv6动态主机配置协议DHCPv6(Dynamic Host Configuration Protocol for IPv6)是针对IPv6编址方案设计,为主机分配IPv6地址/前缀和其他网络配置参数。 目的: IPv6协议具有地址空间巨大特点,但同时...
  • 基于rfc3315区分不同类型的DHCPv6报文,对13种报文类型中继过程做出相应处理。在路由器设备上实现中继配置功能和报文转发功能,使客户端即插即用。客户端和服务器不在同一链路时,中继代理有效解决地址配置问题,...
  • 本文档指定IPv6路由公告选项,允许IPv6路由器将DNS递归服务器地址列表和DNS搜索...ipv6地址分配也分为DHCPv6和SLAAC,其中SLAAC分配方法中,DNS地址下发是通过RA报文通告给终端DHCPv6则沿用传统方法。
  • Linux学习笔记--DHCP

    2019-03-23 11:20:40
    DHCPv6RFC 3315)IPv6使用 DHCPv4(RFC 2131)IPv4使用 本文主要介绍DHCPv4 DHCP是一种客户/服务器协议,它主要为客户端指定配置信息(IP 地址、子网掩码、网关IP、DNS IP)。DHCP设计基于早期Internet 引导程序...
  • AT&T住宅u-Verse网络上绕过路由器不会从上游DHCPv6服务器提取DHCPv6租约。 这是因为在撰写本文时(2017年12月),大多数可用的DHCPv6客户端默认发送DUID-LL或DUID-LLT,并且不支持配置 。 DUID-EN由制造商...
  • 当前DHCP定义可以在RFC 2131中找到,而基于IPv6建议标准(DHCPv6)可以在RFC 3315中找到。主要有两个用途: 给内部网络或网络服务供应商自动分配IP地址给用户 给内部网络管理员作为对所有电脑作中央.
  • IPv6地址分配

    千次阅读 2020-08-20 15:18:34
    DHCPv6作为目前唯一提出全状态配置模型,在RFC3315中进行了详细描述. DHCPv6分配过程: 1、新网络节点[主机或者接口]在本地链路内发送一个到所有DHCPv6服务器和DHCPv6中继(地址:FF02::1:2 端口:547)...
  • Kernel与用户进程通信

    2014-11-27 18:08:00
    测试IPv6 ready logo rfc 3315时候,遇到一个问题,要求在收到ICMPv6 RA时候,DHCPv6 Client要发Solicit消息。在平常应用中,都是启动DHCPv6 Client后,client每隔一段时间就会发送Solicit,而并不是要在收到...
  • 该项目的目标是开发开放源代码验证框架,该框架将能够验证DHCPv4和DHCPv6的实现。 它的主要重点是RFC合规性,但其他验证方面也将涉及。 原则上,该框架可以扩展为涵盖任何符合RFC的DHCP软件,但是我们专注于Kea。 ...
  • DHCP(Dynamic Host Configuration protocol,动态主机配置协议)是由IETF...当前DHCP定义可以在RFC 2131中找到,而基于IPv6建议标准(DHCPv6)可以在RFC 3315中找到。动态主机设置协议(Dynamic Host C...
  • Windows DHCP工作原理

    2020-07-22 19:02:19
    当前DHCP定义可以在RFC 2131中找到,而基于IPv6建议标准(DHCPv6)可以在RFC 3315中找到。主要有两个用途: 给内部网络或网络服务供应商自动分配IP地址给用户 给内部网络管理员作为对所有电脑作.
  • 简介: DHCP 动态主机配置协议是一个局域网网络协议。指是由服务器控制一段IP地址范围,客户机登录服务器时就可以...当前DHCP定义可以在RFC 2131中找到,而基于IPv6建议标准(DHCPv6)可以在RFC 3315中找到。
  • NR 5G 网络功能之SMF

    万次阅读 2019-07-16 18:06:23
    SMF简述 会话管理功能(SMF)包括以下功能。 在 SMF 单个实例中可以支持部分或全部 ...DHCPv4(服务器和客户端)和 DHCPv6(服务器和客户端)功能。 如 IETF RFC 1027 [53]中规定 ARP 代理和/或以太网 PDU ...
  • DHCP服务器

    2020-07-04 14:08:49
    DHCP服务器 一.DHCP服务器 1.内容 动态主机配置协议是一个局域网网络协议。指是由服务器控制一段IP地址范围,客户机登录服务器时...当前DHCP定义可以在RFC 2131中找到,而基于IPv6建议标准(DHCPv6)可以在RFC
  • dhcp协议解析.pdg

    2015-01-08 02:00:18
    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网...546号端口用于DHCPv6 Client,而不用于DHCPv4,是为DHCP failover服务,这是需要特别开启服务,DHCP failover是用来做“双机热备”
  • 最新LWIP源码

    2018-05-17 10:18:06
    and (stateless) DHCPv6 * UDP (User Datagram Protocol) including experimental UDP-lite extensions * TCP (Transmission Control Protocol) with congestion control, RTT estimation fast recovery/fast ...
  • H3C新华三NE级别 题库

    2018-10-21 10:29:24
    546号端口用于DHCPv6 Client,而不用于DHCPv4,是为DHCP failover服务,这是需要特别开启服务,DHCP failover是用来做“双机热备”。 一般:67端口来接受!68端口来发送! HTTP默认使用TCP80端口标识 FTP默认...
  • IPv6详解[中文高清]

    热门讨论 2010-01-20 18:21:50
    11.1.4 DHCPv6 86 11.2 移动网络技术 86 11.2.1 IPv4中移动IP 87 11.2.2 IPv6中移动IP 87 第三部分 IP过渡和应用 第12章 IP过渡策略 89 12.1 IPv6协议隧道方法 89 12.1.1 与IPv4兼容IPv6地址 90 12.1.2 配置...
  • 11.1.4 DHCPv6 86 11.2 移动网络技术 86 11.2.1 IPv4中移动IP 87 11.2.2 IPv6中移动IP 87 第三部分 IP过渡和应用 第12章 IP过渡策略 89 12.1 IPv6协议隧道方法 89 12.1.1 与IPv4兼容IPv6地址 90 12.1.2 配置...

空空如也

空空如也

1 2
收藏数 34
精华内容 13
关键字:

dhcpv6的rfc