《DHCP协议的功能及运行方式.doc》由会员分享,可在线阅读,更多相关《DHCP协议的功能及运行方式.doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、姓 名:XXX学 号:XXXX班 级:XXXXDHCP(Dynamic Host Configuration Protocol)协议是在Bootstrap Protocol(BOOTP)的基础上提出,其作用是在TCP/IP网络中向Internet主机提供配置信息。DHCP采用客户端/服务器通信模式,由DHCP客户端向DHCP服务器提出配置申请(包括IP地址、子网掩码、缺省网关等参数),服务器根据路由策略返回相应配置信息,DHCP报文采用UDP进行封装,使用两个知名端口:服务器为67,客户端为68。DHCP提供的服务 配置参数的存储DHCP要提供的第一个服务就是能够为客户端的参数配置提供持久稳固
2、的存储,该模型中,为每个客户端存储了一个key-value对,如IP子网号和客户端标识组成一个key,value则包好了客户端要配置参数的内容。 动态分配网络参数DHCP要提供的第二个功能就是为客户端分配一个暂时的或者永久的IP地址。客户端向服务器请求在一段时间内租用一个地址,服务器则分配给客户端一个地址,并规定了该地址的租用时间,我们称这个时间为“租期”(lease)。客户端可以通过与服务器的交互延长其租期,可以请求释放地址,结束与服务器的租约。在某些环境中,由于地址的缺乏,需要重新分配网络地址,分配机制就是使用已经到租期的地址。服务器应该利用在配置信息库中的任何可用的信息来选择一个重新使用
3、的地址,比如,选择最近分配过的地址。由于需要一致性检查,DHCP服务器在分配地址时需要保证要分配的地址没有被使用,一般可以在分配地址之前,发送一个ICMP ECHO报文,目的地址就是要分配的IP地址。这样,如果有客户端回应了该ICMP ECHO报文,则标识该地址已经被使用;但是,即使没有客户端回应,也不能代表该地址没有被分配,因为客户端可能开启了防火墙,防止ICMP包的进入。不仅服务器需要检查,客户端也应该检查该地址是否被使用,可以在收到分配的地址后,发送一个免费的ARP,如果有客户端回应这个ARP,则表示本地子网有已经分配了该IP的客户端,如果没有回应该ARP,则标识该地址本地子网未使用。一
4、般来讲,开启了防火墙的客户端是不会阻挡ARP的,所以这种探测方法较好。3 DHCP工作原理DHCP IP地址分配策略对于IP地址的占用时间,不同主机有不同的需求:对于服务器,可能需要长期使用确定的IP地址;对于某些主机,可能需要长期使用某个动态分配的IP地址;而某些个人则可能只在需要时分配一个临时的IP地址就可以了。针对这些不同的需求,DHCP服务器提供三种IP地址分配策略。手工分配地址:由管理员为少数特定主机(如WWW服务器等)配置固定的IP地址,即将客户端的MAC地址与某个IP地址绑定。当此MAC地址的客户端申请DHCP地址时,服务器根据客户端MAC地址寻找到对应的固定IP地址分配给客户端
5、。自动分配地址:为首次连接到网络的某些主机分配固定IP地址,该地址将长期由该主机使用。动态分配地址:以“租借”的方式将某个地址分配给客户端主机,使用期限到期后,客户端需要重新申请地址。绝大多数客户端主机得到的是这种动态分配的地址。客户端与服务器的协议交互 申请一个新地址下面是客户端和服务器端进行协议交互的过程,图7给出了交互图。本节给出的是完整的交互过程,如果客户端已经知道了自己的IP地址,则其中某些过程可以省略。1、客户端主机接入网络后,需要申请一个地址才能使用网络,它会在本地子网内广播一个DHCPDISCOVER消息,该消息中可以包括一些选项,要求获得指定的网络地址和租期等。2、DHCP服
6、务器收到DHCPDISCOVER消息后,回应一个DHCPOFFER消息。3、通常为了保证网络的可靠性,一个子网内会有两个或者多个DHCP服务器互相备份。客户端发送的DHCPDISCOVER消息是广播报文,因此子网内所有的DHCP服务器都会收到该报文,并且每个服务器都会回应一个DHCPOFFER消息。这样,客户端就可能收到多个DHCPOFFER消息,在收到消息后,会根据DHCPOFFER消息中的配置参数来选择其中一个服务器作为回应。客户端回应的消息是DHCPREQUEST消息,它和DHCPDISCOVER一样是广播报文,其中消息中必须带有Server identifier选项以指定所选择的DHC
7、P服务器,一些客户端期望服务器分配的参数也可以包含在消息中。DHCPREQUEST消息中的Request IP address选项的值必须和接收的DHCPOFFER消息中yiaddr的值相同。也就是,服务器准备分配给客户端的IP地址必须是客户端请求的IP,客户端不能请求的其他IP地址。DHCPREQUEST是广播报文,当DHCP服务器不在本地子网时,需要通过DHCP/BOOTP中继代理relay到服务器。DHCP客户端如何在一定的时间内没有收到DHCPOFFER,并重传DHCPDISCOVER报文。 重复使用以前分配的地址如果客户端保存了之前分配的IP地址,并且希望再次使用该地址时,其交互过程
8、同新申请地址的交互过程类似,不过某些过程可以省略而已。 时间值的解释与表达在DHCP协议中,客户端动态获得的网络地址的租期是一个用秒为单位表示的时间段。时间值0xffffffff表示无限期。由于客户端和服务器通常没有同步时钟,所以在DHCP消息中,租期是用相对时间表示的,以客户端的本地时间作为租期的开始参考点。相对时间用一个32位的字表示,单位为秒,比如租期为6小时,就表示为0x。32位字大约可以表示0到100年。上面描述的关于租期解释的算法认为客户端和服务器的时钟之间的偏移是不变的。如果两者之间存在漂移,则服务器可能先于客户端认为该客户的租期已到期。为了弥补这个时间差,服务器返回给客户端的租
9、期可以比它本地数据库中保存的租期短一些。 外部配置网络地址后的客户端获取其他参数客户端如果通过其他方式获取了地址后(可以手工配置地址),可以通过DHCPINFORM消息来获取其他的配置参数。服务器在收到一个DHCPINFORM消息后,构建一个DHCPACK消息,其中包含一些配置参数,但不包括分配网络地址,检查现有的绑定,消息中也不填充yiaddr字段或者租期等参数。DHCP服务器从DHCPINFORM消息中取出ciaddr的地址,并以该地址回应客户端DHCPACK消息。DHCP服务器收到DHCPINFORM消息后,应该检查网络地址的一致性,但是对租期不能检查。服务器构建一个DHCPACK消息,
10、包含有请求客户端的配置参数,并直接发送给客户端。 DHCP协议中的客户端参数客户端在请求地址时,都需要请求一些参数,但并不是所有的客户端都需要初始化在附录1中列出的所有参数,目前有两种方法可以减少从服务器到客户端的参数数目。第一种方法,主机的大部分参数都有默认的参数,如果客户端没有从服务器接收到参数配置,则使用默认值。 客户端使用DHCP的时机客户端在本地网络参数发生变化时,应该重新获取或者验证自己的IP地址和网络参数,比如在客户端重启或者与网络失去一段联系后,本地网络参数可能在用户未知的情况下发生改变。如果客户机知道之前的IP地址,并无法连接到本地DHCP服务器,它可以继续使用这个地址,直到
11、租期过期为止。在连接到DHCP服务器之前,租期失效,则客户端应立即放弃使用该地址,并通知本地用户。DHCP消息的构建和发送DHCP消息是有固定格式的,相应的字段填充相应的值,消息的后半部分都是选项字段,最后必须以end选项结尾。DHCP报文以UDP作为传输协议,客户端发往服务器的报文的目的端口为67(DHCP server),而从服务器发送给客户端的报文的目的端口为68(DHCP client)。Server identifier字段用于在DHCP消息中标识DHCP服务器,以及在从客户端发送给服务器消息时作为目的IP地址。DHCP服务器有多个地址时,必须接受任何地址都能作为server ide
12、ntify。DHCP在选择server identify时,必须选择客户端可达的IP地址。举例说明,如果DHCP服务器和DHCP客户端在同一个组网上,服务器应该选择与本地子网通信的IP地址作为server identify。如果服务器从一个DHCP relay agent收到消息,则服务器应该选择收到消息的接口IP作为server identify。客户端向服务器的任何单播请求报文都必须使用server identify的地址作为目的IP。DHCP服务器的工作过程DHCP服务器基于客户端的当前绑定状态处理来自这个客户端的DHCP消息。DHCP服务器能够处理8种DHCP消息中的其中5种,包括DH
13、CPDISCOVER、DHCPREQUEST、DHCPDECLINE、DHCPRELEASE和DHCPINFORM DHCPDISCOVER消息的处理服务器收到客户端的DHCPDISCOVER消息后,会为客户端选择一个网络地址。如果没有地址可用,服务器可以向管理员报告该问题;如果有地址可用,新的地址选择按照如下顺序选择:DHCP服务器的数据库中与客户端MAC地址静态绑定的IP地址客户端曾经使用过的地址,但是现在已经过期或被释放,如果该地址在服务器的可用地址池中,且未被分配DHCPDISCOVER消息的Request IP address字段中填充的IP地址,且该IP有效,没有被分配从服务器的可
14、用地址池中选择一个新的IP地址。如果DHCPDISCOVER消息中的Relay Agent IP Address字段为0,那么新的IP地址将与服务器上收到该消息的接口处于同一子网;如果DHCPDISCOVER消息中的Relay Agent IP Address字段不为0,那么新的IP地址将与转发该消息的第一个DHCP中继处于同一子网,也即与Relay Agent IP Address处于同一子网。如果在DHCP地址池中未找到可供分配的IP地址,则依次查询超过租期、发生冲突的IP地址,如果找到可用的IP地址,则进行分配,否则报告错误。DHCP服务器在构建完DHCPOFFER消息后,将DHCPDI
15、SCOVER消息中的Transaction ID 插入到DHCPOFFER消息的Transaction ID字段内,然后将该消息发送给客户端。 DHCPREQUEST消息的处理客户端发送DHCPREQUEST消息可能存在三种情况,第一就是收到服务器端的DHCPOFFER消息后的回应DHCPREQUEST,第二可能是客户端用于验证之前分配的网络地址,第三可能就是为了延长其租期而发的DHCPREQUEST消息。如果DHCPREQUEST消息中含有server identify选项,则该消息是回应DHCPOFFER的;否则,该消息是验证或者延长其租期的。如果客户端在DHCPREQUEST消息中使用了
16、client identify选项,则在随后的消息中必须使用相同的client identify。如果客户端在DHCPDISCOVER中包含了请求参数列表,则在随后的消息中都必须包含这些列表。DHCPACK消息中的任何配置参数不应该与之前发送给客户端的DHCPOFFER消息冲突,客户端应该使用DHCPACK消息中的参数进行配置。 DHCPDECLINE消息的处理客户端在接收到服务器的DHCPACK消息后,会对服务器分配给自己的IP地址做一个检查,一般是通过发送一个免费ARP来探测。这个免费ARP的Sender MAC是自己的MAC地址,Sender IP address是自己的IP地址,Tar
17、get MAC填为00-00-00-00-00-00,Target IP也为自己IP地址。该免费ARP的目的有两个,其一是告知本地子网内其他计算机自己的MAC地址和IP地址的对应关系,其二也是探测是否有和本机有相同IP地址的客户端存在,如果存在有相同IP的客户端,则会回应一个arp reply给本机。本客户端在收到arp reply后,认为该地址已经被分配,会发送一个DHCPDECLINE消息给服务器,表示该地址不可用,已经被分配。 DHCPRELEASE消息的处理客户端如果不再使用某个地址,会发送一个DHCPRELEASE消息给服务器,服务器在收到该RELEASE消息后,标识该地址被释放,服
18、务器应该保留记录客户端初始化参数,这样在下次请求时,可以重新使用。 DHCPINFORM消息的处理服务器通过直接给DHCPINFORM消息中的Client IP Address 地址发送DHCPACK消息来响应DHCPINFORM消息。服务器不能向客户端发送租期超时,也不能填充Your (Client) IP Address 字段。DHCP客户端的工作过程DHCP客户端使用状态迁移图来管理自己的各种状态,图12描述了其状态之间的迁移关系。DHCP客户端处理三种服务器发送的消息:DHCPOFFER、DHCPACK、DHCPNAK。图12中没有给出DHCPINFORM消息,因为对于客户端来说,它发
19、出DHCPINFORM消息,仅仅需要等待DHCPACK消息即可。 未分配网络地址时的初始化客户端最初开始于INIT状态,并准备发送DHCPDISCOVER消息。在DHCPDISCOVER消息中,Client IP Address、Your (Client) IP Address、Server IP Address和Relay Agent IP Address均为0x,Client Hardware Address为客户端自己的硬件地址,一般是自己的MAC地址。在选项中必须包括option 53 DHCP Message Type,指明该消息为DHCP DISCOVER消息。如果客户端知道曾经的
20、IP地址,并想继续使用,则可以在消息中添加option 50 Request IP address选项,填入希望得到的IP地址;当然如果想指定租期,也可以添加IP address lease time选项。客户端一般都要向服务器请求一些配置参数,DHCPDISCOVER消息中就包含了一个option 55 Parameter Request list,列表中为客户端希望请求的配置参数。一旦该请求参数列表在DHCPDISCOVER消息中使用了,则随后的其他消息也必须包含该请求列表。 已知网络地址后的初始化客户端在获得地址后,由于某种原因暂时断开了网络,稍后又重新准备接入网络,此时客户端处于INI
21、T-REBOOT状态。客户端此时不再发送DHCPDISCOVER消息,而是直接发送DHCPREQUEST消息。DHCPREQUEST消息中,必须带有request IP address选项,其内容为之前客户端使用的IP地址。同样,客户端在parameter request list中携带自己需要服务器返回给自己的参数。DHCPREQUEST消息是以广播形式发送出去的,其中是不能带有server identifier的。客户端在收到DHCPACK(可以来自任何一个DHCP服务器)消息后,如果该消息中的Transaction ID与之前发送的DHCPREQUEST中的Transaction ID匹
22、配,客户端就完成初始化,并进入BOUND状态。 外部分配地址后的初始化客户端如果通过其他方式获取了IP地址后(可以手工配置地址),需要请求其他参数,可以直接发送DHCPINFORM消息。请求的DHCPINFORM消息中包含parameter request list选项。客户端随机产生一个Transaction ID,填充于Transaction ID字段内,Client IP Address字段填充的值是自己的IP地址。此时,客户端不能请求租期参数。客户端随后单播或广播DHCPINFORM消息到DHCP服务器,当客户端收到与DHCPINFORM的Transaction ID匹配的DHCPAC
23、K消息后,客户端就完成了初始化。如果在一定的周期内(比如60秒或者重试4次后)没有收到DHCPACK消息,则应该以消息的方式通知用户该问题,然后使用附录1中的默认值。 使用单播还是广播DHCP客户端发送DHCPDISCOVER、DHCPREQUEST和DHCPINFORM消息一般都是以广播形式发送,除非客户端已知DHCP服务器的地址。DHCPRELEASE消息是单播形式。对于DHCPDECLINE消息,由于客户端需要向所有服务器宣称该IP不可用,则DHCPDECLINE是以广播消息发送的。客户端在事先知道DHCP服务器的IP后,无论是在INIT状态还是在REBOOTING状态,客户端可以使用单
24、播来发送DHCPDISCOVER或者DHCPREQUEST消息。客户端在发送了单播消息后,没有收到响应,应该再次以广播地址发送该消息。 重新获得和超时客户端维护两个时间:T1和T2,分别称为续租更新时间和重绑定时间。它们指定了客户端尝试延长地址租期的时刻。(1) T1与T2之间(2) T2与租期结束之间 DHCPRELEASE消息客户端在不再需要网络地址后(如客户端关机了),需要发送一个DHCPRELEASE消息给服务器。DHCP中继的工作原理DHCP中继的使用场景请参见1.4.2,本节主要讲述DHCP中继的工作原理。DHCP中继提供了对DHCP广播报文的透明传输功能,能够把DHCP客户端的广
25、播报文透明地传送到其它网段的DHCP服务器上,同样能够把DHCP服务器端的广播报文透明地传送到其它网段的DHCP客户端。在实际网络环境中,使能DHCP中继功能的设备可以是路由器,也可以是一台主机。DHCP中继设备监听UDP目的端口号为67的所有报文。当收到一个这样的报文时,会首先判断是否是用户的请求报文,如果是,而且“Relay Agent IP Address”字段为0,则把收到此报文的接口的IP地址填入此字段,把Hops字段加,然后将修改后的报文单播给配置时指定的DHCP服务器,实现DHCP报文穿越多个子网的目的。当DHCP中继设备发现这是DHCP服务器的响应报文时,会根据“Flags”字段中的广播标志位将封装好的报文广播或单播给DHCP客户端。 DHCP客户端通过DHCP中继首次申请地址(1) 客户端首次申请地址时通过DHCP中继获得地址过程客户端首次申请地址时通过DHCP中继获得地址 (2) 实例抓包分析DHCP中继实例组网图 DHCP客户端通过DHCP中继延长租期图中T1时刻指续租更新时间,T2时刻指重绑定时间,默认情况下:T1时刻 = 租期开始时刻 + 租期50%T2时刻 = 租期开始时刻 + 租期87.5%
限制150内