DHCP基础实现技术白皮书
关键词:DHCP,DHCP Server,DHCP Relay, DHCP Client,BOOTP Client。
摘 要:本文介绍了DHCP技术的基本原理和典型应用,以及杭州华三通信技术有限公司(以下简称H3C公司)自主研发的低端以太网交换机为DHCP客户端、DHCP服务器和DHCP中继代理设备时所提供的主要功能及工作过程。
缩略语清单:
缩略语 | 英文全名 | 中文解释 |
DHCP | Dynamic Host Configuration Protocol | 动态主机配置协议 |
BOOTP | Bootstrap Protocol | 自举协议 |
ARP | Address Resolution Protocol | 地址解析协议 |
目 录
最初RFC1521将DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)定义为用于为主机分配可重用的IP地址和配置信息的应用层协议,如图1 所示。

图1 DHCP与OSI模型
DHCP是基于“客户/服务器”模式的,由一台指定的主机分配网络地址、传送网络配置参数给需要的网络设备或主机。提供DHCP服务的主机一般称为服务器,接收信息的主机称为客户端。

图2 DHCP组网示意图
同时,DHCP还为客户端提供了一种可从与客户机位于不同子网的服务器中获取信息的机制,成为DHCP中继代理功能。
本文主要介绍DHCP机制的实现原理和H3C低端以太网交换机作为DHCP客户端、DHCP服务器和DHCP中继代理的工作过程。设备的具体配置和命令的使用请参考各产品的操作手册和命令手册。关于DHCP Snooping功能和DHCP安全特性的介绍,请参见《DHCP安全特性技术白皮书》。
BOOTP协议(Bootstrap Protocol),是一种较早出现的远程启动的协议,通过与远程服务器通信以获取通信所需的必要信息,主要用于无磁盘的客户机从服务器得到自己的IP地址、服务器的IP地址、启动映像文件名、网关IP等等。
BOOTP服务存在的缺陷:BOOTP设计用于相对静态的环境,其中每台主机都有一个永久的网络连接。管理员创建一个BOOTP配置文件,该文件定义了每台主机的一组BOOTP参数。如果计算机保持位置不变,而且管理者有足够的IP地址为每台机器分配唯一的地址,静态参数分配将工作的很好。
但随着网络规模的不断扩大、网络复杂度的不断提高,网络配置也变得越来越复杂,在计算机经常移动(如便携机或无线网络)和计算机的数量超过可分配的IP地址等情况下,原有针对静态主机配置的BOOTP协议已经越来越不能满足实际需求。为方便用户快速地接入和退出网络、提高IP地址资源的利用率以及支持无盘网络工作站等应用,需要在BOOTP基础上制定一种自动机制来进行IP地址的分配。
为此IETF设计了一个新协议——DHCP协议。它从两种方式上扩充了BOOTP协议。
l DHCP可使计算机通过报文交互获取所需的全部配置信息。例如:IP地址、子网掩码,缺省网关,WINS服务器的IP地址,DNS服务器的IP地址等。
l DHCP允许计算机快速、动态的获取IP地址。为使用DHCP的动态地址分配机制,管理员必须配置DHCP服务器,使其能提供一组IP地址,称之为地址池。任何时候一旦有新的计算机连接到网络上,该计算机就与服务器联系,并申请一个IP地址。服务器从配置的地址池中选择一个地址,并将它分配给该计算机。
DHCP协议的主要优势有以下几点:
l 网络管理员可以验证IP地址和其它配置参数,而不用去检查每个主机;
l DHCP不会同时租借相同的IP地址给两台主机;
l 网络管理员可以约束特定的计算机使用特定的IP地址;
l 可以为每个DHCP作用域设置很多选项;
l 客户机在不同子网间移动时不需要重新设置IP地址。
DHCP可以实现网络资源的动态配置,主要适用于如下场合:
l 网络规模较大,需要对整个网络进行集中管理,简化网络管理。
l 网络中主机数目大于该网络支持的IP地址数量,无法为每个主机分配一个固定的IP地址,大量用户必须通过DHCP服务动态获得自己的IP地址。
l 网络中存在移动设备,需要实现对移动设备的方便接入及自动配置管理。
l 网络中只有少数主机需要固定的IP地址,大多数主机没有固定IP地址的需求。
l 网络中的接入设备进行简单的配置,即可以实现基于DHCP的安全管理。
l 当网络上存在多个DHCP服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址。
l DHCP服务器不能跨路由器与客户机通信,除非路由器允许DHCP转发。
l DHCP Server:DHCP服务器,为用户提供可用的IP地址等配置信息。
l DHCP Client:DHCP客户端,通过DHCP动态申请IP地址的用户。
l DHCP Relay:DHCP中继,用户跨网段申请IP地址时,实现DHCP报文的中继转发功能。
l RFC 951:Bootstrap Protocol (BOOTP)
l RFC 1497:BOOTP Vendor Information Extensions
l RFC 1542:Clarifications and Extensions for the Bootstrap Protocol
l RFC 2131:Dynamic Host Configuration Protocol
l RFC 2132:DHCP Options and BOOTP Vendor Extensions
l RFC 3046:DHCP Relay Agent Information Option
在DHCP的工作过程中,客户端与服务器之间通过DHCP报文的交互进行地址或其他配置信息的请求和确认。
DHCP报文格式如图3 所示。

图3 DHCP报文格式
l op:DHCP报文的操作类型,分为请求报文和响应报文,1为请求报文;2为响应报文。
l htype、hlen:DHCP客户端的硬件地址类型及长度。
l hops:DHCP报文经过的DHCP中继的数目。DHCP请求报文每经过一个DHCP中继,该字段就会增加1。
l xid:客户端发起一次请求时选择的随机数,用来标识一次地址请求过程。
l secs:DHCP客户端开始DHCP请求后的时间。
l flags:第一个比特为广播响应标识位,用来标识DHCP服务器响应报文是采用单播还是广播发送,0表示采用单播方式,1表示采用广播方式。其余比特保留不用。
l ciaddr:DHCP客户端的IP地址。
l yiaddr:DHCP服务器分配给客户端的IP地址。
l siaddr:DHCP客户端获取IP地址等信息的服务器IP地址。
l giaddr:DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址。
l chaddr:DHCP客户端的硬件地址。
l sname:DHCP客户端获取IP地址等信息的服务器名称。
l file:DHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息。
l options:可选变长选项字段,包含报文的类型、有效租期、DNS(Domain Name System,域名系统)服务器的IP地址、WINS(Windows Internet Naming Service,Windows Internet名称服务)服务器的IP地址等配置信息。
DHCP共有八种报文,具体类型和功能如表1 所示。
表1 DHCP报文类型
报文类型 | 主要功能 |
DHCP-DISCOVER | DHCP客户端广播发送的,用来查找网络中可用的DHCP服务器 |
DHCP-OFFER | DHCP服务器用来响应客户端的DHCP-DISCOVER请求,并为客户端指定相应配置参数 |
DHCP-REQUEST | DHCP客户端广播发送给DHCP服务器,用来请求配置参数或者续借租期 |
DHCP-ACK | DHCP服务器通知客户端可以使用分配的IP地址和配置参数 |
DHCP-NAK | DHCP服务器通知客户端地址请求不正确或者租期已过期 |
DHCP-RELEASE | DHCP客户端主动向DHCP服务器发送,告知服务器该客户端不再需要分配的IP地址 |
DHCP-DECLINE | DHCP客户端发现地址冲突或由于其它原因导致地址不能使用,则发送DHCP-DECLINE报文,通知服务器所分配的IP地址不可用 |
DHCP-INFORM | DHCP客户端已经有IP地址,用它来向服务器请求其他的配置参数 |
为了获取并使用一个合法的动态IP地址,在不同的阶段,DHCP客户端需要与服务器之间交互不同的信息。以客户端第一次登录网络,通过DHCP获取IP地址为例,客户端与服务器的交互包括以下四个过程,如图4 所示。

图4 通过DHCP动态获取IP地址示意图
H3C公司支持的DHCP基本功能包括BOOTP Client、DHCP Client、DHCP Server、DHCP Relay、DHCP Snooping等部分。以下内容主要介绍DHCP Client、DHCP Server、DHCP Relay的功能特点、工作过程以及基本的实现原理。关于DHCP Snooping及其它功能的介绍,请参见《DHCP安全特性技术白皮书》。
DHCP客户端是整个DHCP活动的触发者和驱动者,通过DHCP报文和服务器进行交互,得到IP地址和相关配置信息。
H3C低端以太网交换机作为DHCP客户端,其工作过程如下。
DHCP客户端发出DHCP-DISCOVER广播报文,收到回应的DHCP-OFFER,然后发出DHCP-REQUEST广播报文,收到回应的DHCP-ACK,对服务器分配的IP地址进行有效性检测。若分配的IP地址不可用(例如地址冲突等),则重新申请地址;否则开始使用该IP地址。(具体过程请参见3.3.3 DHCP报文交互过程)
DHCP服务器分配给客户端的IP地址有一定的租借期限,当租借期满后服务器会收回该IP地址。为了延长DHCP客户端使用该地址的期限,需要更新IP地址租约,如图5 所示。

图5 DHCP客户端续约示意图
客户端重启后不需要发送DHCP-DISCOVER申请IP地址,而是直接发送DHCP-REQUEST报文给服务器,请求获取先前的IP地址(DHCP-REQUEST报文中的Requested IP address字段会填入之前使用过的IP地址)。如果这时服务器认为该IP地址可以分配给客户端使用,则单播回应DHCP-ACK报文;如果服务器发现此IP地址已经有人使用了,不可以再分配给该客户端,则回应DHCP-NAK报文,客户端收到后重新发送DHCP-DISCOVER申请IP地址,并将Requested IP address字段置空。
DHCP客户端重启后获取IP地址后,其租约的更新与上述过程相同,不再赘述。
DHCP Server是DHCP服务的提供者,它通过DHCP报文与客户端进行交互,为各种类型的用户分配合适的IP地址,并可以根据需要进行地址池和其它网络参数的相关配置。H3C低端以太网交换机作为DHCP服务器,工作过程主要分为以下几个步骤。
网络管理员在DHCP服务器上创建地址池。当客户端向服务器提出DHCP请求的时候,服务器将从IP地址池中取得空闲的IP地址以及其他的参数给客户端。一个DHCP服务器可以拥有一个或多个DHCP地址池。
DHCP地址池按作用范围可以分为全局地址池和接口地址池。全局地址池可以为所有客户端提供IP地址分配,接口地址池只为本接口下直连用户提供IP地址的分配。若同时存在全局地址池和接口地址池,对于直连用户,接口地址池优先于全局地址池。
DHCP地址池还可以分为静态地址池和动态地址池。动态地址池需要指定用于分配的地址范围,而静态地址池则可以看作是只包含一个地址的特殊的DHCP地址池。需要注意的是:配置DHCP服务器全局地址池时,静态地址池和动态地址池为互斥关系,即:若该地址池已经配置为动态地址池,则不能在该地址池上静态绑定IP地址。
DHCP服务器按照以下优先级为客户端分配IP地址。
l DHCP服务器中与客户端MAC地址(或客户端ID)静态绑定的IP地址;
l 客户端以前曾经使用过的地址,即DHCP服务器记录的曾经分配的租约中的IP地址;
l 选择合适的地址池,并从地址池中顺序查找可用的IP地址,将最先找到的并且没有冲突的IP地址分配给客户端;
l 从已经过期的IP地址中选择合适的IP分配给客户端;
l 检查冲突的IP地址,如果可以使用,则重新分给用户;
l 如果未找到可用地址,则输出提示信息告知用户无可用IP地址可以分配。
DHCP客户端访问Internet时,除必须具备IP地址外,还常常需要一些其他配置参数。例如,当客户端要通过域名访问Internet时,需要知道DNS服务器的IP地址;当客户端需要访问本网段以外的服务器或网络设备时,由于数据需要通过网关进行转发,客户端必须知道网关的IP地址,等等。
因此DHCP服务器除必须配置地址池,还可以配置域名后缀、DNS服务器地址、WINS服务器地址、NETBIOS结点类型等参数,用于为客户端分配这些扩展的网络配置信息。也就是说,当客户端发送的DHCP请求报文中包含域名后缀、DNS服务器地址等选项内容时,DHCP服务器可以根据地址池中这些参数的配置情况对客户端进行回复。常用的DHCP选项(Option字段)的具体内容请参见本文附录。
DHCP服务器可以接收五种DHCP报文:DHCP-DISCOVER、DHCP-REQUEST、DHCP-DECLINE、DHCP-RELEASE和DHCP-INFORM报文。对每一种报文的处理如下。
DHCP服务器首先检查地址池是否有可分配的地址,如果没有,则不会响应客户端的申请,并向系统管理员报告;如果有,挑选合适的IP地址,选定IP地址之后,DHCP服务器会根据选定的IP地址来决定用户的绑定租约,并处理客户端请求的其它网络参数(在服务器上已经进行了其它参数的配置)。
在确定了以上信息后,服务器将向客户端发送回应的DHCP-OFFER报文。
DHCP-REQUEST报文可能在下面三种情况下产生:
l 客户端响应服务器的DHCP-OFFER;
l 客户端确认一个先前分配的IP地址;
l 客户端请求延长某个网络地址的租约。
如果DHCP-REQUEST报文中包含Option 54(server identifier option,服务器标识符选项),则说明此DHCP-REQUEST报文是客户端响应服务器的DHCP-OFFER报文的;否则是后两种情况。
DHCP服务器根据收到的REQUEST报文的类型进行不同的处理,若可以分配合法的IP地址,则回应客户端一个DHCP-ACK报文。
如果客户端通过地址冲突检测发现服务器分配的IP地址冲突或由于其它原因导致不能使用,则发送DHCP-DECLINE报文。服务器收到此报文后会将该IP地址标记为不可用(not available)。
当用户不再需要使用分配的IP地址时,就会主动向DHCP服务器发送DHCP-RELEASE报文,告知服务器,用户不再需要分配的IP地址。服务器收到该报文后会将客户端发送的需要释放的网络地址标记为不可用,同时保持这个客户端的初始化参数,以便将来的重用(reuse)。
客户端向服务器发送DHCP-INFORM报文用于请求更多的网络配置信息,包括DNS、缺省网关等详细配置信息。
DHCP客户端在分配租约使用一半时间后,会主动向DHCP服务器申请继续使用该IP地址,服务器对客户端的续约请求进行处理,若发现请求的IP地址可用,则回应DHCP-ACK报文给客户端,告知可以继续使用该IP地址,并更新相应的租约和定时器信息。
保留地址是DHCP协议的IP地址池中不分配的地址段。一旦设定为保留地址后,这个区间内的IP地址就不再参加整个IP地址池的分配而保留起来,将保留地址的起始地址和结束地址记录到该IP地址池的参数中。
在DHCP服务器向客户端分配IP地址时,服务器首先需要确认所分配的IP没有被网络上的其他设备所使用,这就需要服务器发送ICMP(ping)的数据包来对所分配的IP进行探测。
服务器对需要探测的IP地址发送ping数据包,如果在规定的时间内没有应答(默认情况下是500ms),那么服务器就会再次发送ping数据包。到达规定的次数(默认情况下是2次)后,如果仍没有应答,则所分配的IP地址可用。否则系统将向管理员报告出错信息。探测IP地址不影响服务器对其它客户端的响应。
DHCP服务器可以配置以下网络参数并通过交互报文告知客户端:
l 配置客户端网关地址;
l 配置客户端使用的DNS服务器;
l 配置客户端网络使用的域名后缀;
l 配置客户端的WINS服务器IP地址;
l 配置客户端所对应的NetBIOS节点类型。
由于DHCP请求报文采用广播方式发送报文,因此当DHCP客户端和DHCP服务器处于不同子网时,必须要通过DHCP中继进行通信,最终获取到IP地址。这样,多个网络上的DHCP客户端可以使用同一个DHCP服务器,既节省了成本,又便于进行集中管理。
DHCP中继的转发过程和报文的具体交互,如图6 所示。

图6 DHCP中继工作过程示意图
DHCP中继实现的主要功能如下。
为了提高可靠性,常常需要在一个网络中设置多个DHCP服务器。H3C低端以太网交换机作为DHCP中继设备,支持将多个DHCP服务器放入一个DHCP服务器组中。当DHCP中继接口与DHCP服务器组建立关联关系后,会将DHCP报文转发给服务器组中的所有服务器。
DHCP中继代理收到DHCP报文后首先识别该报文,再进行相应处理。
如果DHCP报文的UDP目的端口号为67,且BOOTP报文头中的“op”字段是BOOTREQUEST(1),即表示该报文是DHCP客户机发给服务器的请求报文。DHCP中继代理会检查报文的“giaddr”字段,如果其值为0.0.0.0,则DHCP中继代理设备用接受该报文的接口的IP地址填充此字段后,发送报文到指定的DHCP服务器组内的所有DHCP服务器。
如果DHCP报文的UDP目的端口号为67,且BOOTP报文头中的“op”字段是BOOTREPLY(2),即表示该报文是DHCP服务器希望通过中继代理转发给DHCP客户端的回应报文。DHCP中继代理会将该报文从“giaddr”字段所属的接口发送到指定的DHCP客户端。
H3C低端以太网交换机支持DHCP中继的安全检查功能。DHCP中继的安全检查功能负责对DHCP中继用户地址表进行管理,实现合法用户IP地址表的管理功能:包括动态添加、手工添加、手工删除以及查询功能,并通过与ARP模块配合实现禁止非正常获取IP地址的用户上网的功能。
确保所有合法用户都在DHCP中继用户地址表中记录地址信息。通过DHCP中继获取的地址可以动态添加表项;使用合法固定IP地址的用户可以手工添加表项,且提供手工删除表项以及查询功能。
该功能需要ARP模块配合。对于接收的ARP请求,检查其源IP地址与源MAC地址是否与DHCP中继用户地址表项匹配,对于不匹配的ARP报文进行丢弃。
由于DHCP客户端释放该IP地址时,会发送单播DHCP-RELEASE报文给DHCP服务器,而DHCP中继不会处理该报文,造成DHCP中继的用户地址项不能被实时刷新。用户可以通过开启DHCP中继的握手功能和配置DHCP中继动态用户地址表项的定时刷新间隔,来解决上述问题。
l DHCP中继代理模拟客户端定期向DHCP服务器发送DHCP-REQUEST报文,报文的内容根据DHCP中继用户地址表项的内容来构建,但源MAC地址使用交换机的桥MAC地址,以和正常发送的DHCP-REQUEST报文进行区分。
l 服务器收到DHCP-REQUEST报文后,检测申请的IP地址是否可以分配,若可以分配则回应一个DHCP-ACK报文,若不可以分配则回应一个DHCP-NAK报文。
l DHCP中继收到服务器回应的报文后,进行判断,若收到了DHCP-ACK报文则证明用户表项中的该IP地址已经被释放(因为已经可以被再次分配了),可以将其老化掉了,就将该表项进行删除操作;若收到了DHCP-NAK报文则证明用户表项中的该IP地址还没有被用户释放,继续保留该表项。
DHCP中继代理就是通过这种定期的和服务器握手来对DHCP中继用户地址表项进行老化。
H3C低端以太网交换机提供的DHCP服务主要优势有以下几点:
l 功能完备,可以为客户提供DHCP客户端、DHCP中继到DHCP服务器的全面功能实现;
l 具有出色的业务支持能力及灵活的组网方案;
l 良好的易用性和可配置性;
l 可以与业界其它主流厂商设备及Windows、Linux服务器实现良好的互通;
l 方便管理、部署经济、设备开销低。

图7 DHCP应用综合组网图
如图7 所示,客户端分布在不同的区域,通过DHCP中继设备实现跨网段申请IP地址。为了提高可靠性,多台DHCP服务器构成DHCP服务器组,互相备份,为客户端动态分配IP地址;同时可以在DHCP中继设备上配置安全检查功能,防止客户端私自更改自己的IP地址上网。
DHCP特性综合组网注意事项:
l 若采用DHCP中继跨网段申请IP地址,则DHCP服务器上配置的地址池必须为全局地址池,否则用户无法正常获取到IP地址;
l 若交换机某VLAN接口使用DHCP方式动态申请IP地址,则不能在该接口上配置从IP地址;
l DHCP中继直接连接客户端的下行接口的IP地址必须与DHCP服务器地址池的地址在同一网段,多个中继设备叠加使用时尤其要注意这一点。
H3C公司的DHCP特性是遵循标准的RFC2131和RFC2132实现的,目前可以全面支持RFC中所述的BOOTP和DHCP基本及扩展功能,包括:DHCP Client、BOOTP Client、DHCP Relay、DHCP Server。
随着网络规模的扩大化和网络环境的复杂化,DHCP服务被应用到越来越多的网络环境中,H3C公司的DHCP特性解决方案具有完整的产品系列,可以为客户提供完善、灵活、便捷的组网配置方案,同时配合DHCP Snooping的相关防攻击特性(具体介绍请参见《DHCP安全特性技术白皮书》),有效保证了网络的安全性。
RFC 951:BOOTSTRAP PROTOCOL(BOOTP)
RFC 1497:BOOTP Vendor Information Extensions
RFC 2131:Dynamic Host Configuration Protocol(DHCP)
RFC 2132:DHCP Options and BOOTP Vendor Extensions
RFC 3046:DHCP Relay Agent Information Option
《H3C 低端以太网交换机典型配置案例》:01-DHCP典型配置案例
H3C低端以太网交换机支持的DHCP Options如表2 所示。