DHCP协议 所属类别 : 通信技术 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段,在RFC 2131中有详细的描述。DHCP有3个端口,其中UDP67和UDP68为正常的DHCP服务端口,分别作为DHCP Server和DHCP Client的服务端口;546号端口用于DHCPv6 Client,而不用于DHCPv4,是为DHCP failover服务,这是需要特别开启的服务,DHCP failover是用来做"双机热备"的。 1.DHCP报文种类

DHCP一共有8种报文,分别为DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK、DHCP NAK、DHCP Release、DHCP Decline、DHCP Inform。各种类型报文的基本功能如下:

DHCP报文类型 说明 DHCP Discover DHCP客户端在请求IP地址时并不知道DHCP服务器的位置,因此DHCP客户端会在本地网络内以广播方式发送Discover请求报文,以发现网络中的DHCP服务器。所有收到Discover报文的DHCP服务器都会发送应答报文,DHCP客户端据此可以知道网络中存在的DHCP服务器的位置。 DHCP Offer DHCP服务器收到Discover报文后,就会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其他配置信息(如网关、DNS服务器等),构造一个Offer报文,发送给DHCP客户端,告知用户本服务器可以为其提供IP地址。但这个报文只是告诉DHCP客户端可以提供IP地址,最终还需要客户端通过ARP来检测该IP地址是否重复。 DHCP Request DHCP客户端可能会收到很多Offer请求报文,所以必须在这些应答中选择一个。通常是选择第一个Offer应答报文的服务器作为自己的目标服务器,并向该服务器发送一个广播的Request请求报文,通告选择的服务器,希望获得所分配的IP地址。另外,DHCP客户端在成功获取IP地址后,在地址使用租期达到50%时,会向DHCP服务器发送单播Request请求报文请求续延租约,如果没有收到ACK报文,在租期达到87.5%时,会再次发送广播的Request请求报文以请求续延租约。 DHCP ACK DHCP服务器收到Request请求报文后,根据Request报文中携带的用户MAC来查找有没有相应的租约记录,如果有则发送ACK应答报文,通知用户可以使用分配的IP地址。 DHCP NAK 如果DHCP服务器收到Request请求报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址,则向DHCP客户端发送NAK应答报文,通知用户无法分配合适的IP地址。 DHCP Release 当DHCP客户端不再需要使用分配IP地址时,就会主动向DHCP服务器发送RELEASE请求报文,告知服务器用户不再需要分配IP地址,请求DHCP服务器释放对应的IP地址。 DHCP Decline DHCP客户端收到DHCP服务器ACK应答报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则会向DHCP服务器发送Decline请求报文,通知服务器所分配的IP地址不可用,以期获得新的IP地址。 DHCP Inform DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则向DHCP服务器发送Inform请求报文;DHCP服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向DHCP客户端发送ACK应答报文。目前基本上不用了。 2.DHCP Snooping DHCP Snooping技术是DHCP安全特性,通过建立和维护DHCP Snooping绑定表过滤不可信任的DHCP信息,这些信息是指来自不信任区域的DHCP信息。DHCP Snooping绑定表包含不信任区域的用户MAC地址、IP地址、租用期、VLAN-ID 接口等信息。 3.中继代理 如果DHCP 客户端和DHCP 服务器都位于同一个网段内,客户端获取IP 地址的过程与描述的基本相同。但是,如果DHCP 客户端和DHCP 服务器位于被一个或多个路由器分展开的不同的网段上,整个过程就会变得更复杂一些。路由器通常是不能将广播发送到其他网络上的。为了DHCP 可以工作,需要有一个中介来协助完成DHCP 的处理过程。这个中介是与DHCP 客户端在相同网络中的另一台主机(通常就是路由器)。在任何情况下,这个中介所执行的功能被称为BOOTP 中继代理或者DHCP 中继代理。

中继代理必须具有固定的IP地址,同时还保存有DHCP 服务器的P 地址。因为中继代理已经拥有IP 地址,所以可以直接向DHCP 服务器发送数据包,或者接收来自于DHCP服务器的数据包。由于中继代理与DHCP 客户端位于相同的网络上,也就意味着它可以通过广播与DHCP客户端进行通信。

中继代理会在UDP端口监听广播;当中继代理检测到DHCP请求时,就将这个请求转发给DHCP服务器。当代理收到DHCP服务器的响应时,就将响应在本地网段上广播。

现在一种很流行这做法是通过路由器提供DHCP服务器的功能,在大多数网络中,这样都可以减少对DHCP中继代理的需求。