1
计算机网络技术理论与实践
1.9.2 8.2 DHCP服务原理

8.2 DHCP服务原理

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),它的前身是BOOTP。BOOTP原本是用于无磁盘主机连接的网络:网络主机使用BOOT ROM而不是磁盘启动,客户端启动完成后还没有IP地址,它使用广播IP地址255.255.255.255作为目的IP地址向网络发出IP地址获取请求。运行BOOTP协议的服务器接收到这个请求后,会根据请求中客户端提供的MAC地址向其发送一个含有分配的IP地址、服务器IP地址、网关等信息的FOUND帧。客户端会根据该FOUND帧的内容配置TCP/IP参数,连接上网络,然后通过网络连接专用TFTP服务器下载启动镜像文件,模拟成磁盘完成启动。BOOTP的缺点是必须事先获得客户端的硬件地址,而且每个客户端的硬件地址与IP地址是静态绑定的,不能动态分配,在IP地址资源紧缺的环境中会造成很大的浪费。

DHCP是BOOTP的增强版本,包括服务器端和客户端两部分。所有TCP/IP协议参数的设置都由DHCP服务器集中管理,并负责处理客户端的DHCP请求;客户端使用从服务器分配来的TCP/IP参数进行配置,完成网络连接。当主机采用DHCP进行自动配置时,需要在其Internet协议设置中选择“自动获得IP地址”和“自动获得DNS服务器地址”,如图8-3所示。

DHCP系统中必须至少有一台DHCP服务器工作在网络上,它会监听网络中的DHCP请求,并与客户端协商TCP/IP的参数设置。它提供3种IP地址分配方式:

·Manual Allocation。网络管理员为少数特定的主机静态绑定固定的IP地址,并且IP地址不会过期。

·Automatic Allocation。自动分配是指一旦DHCP客户端第一次成功地从DHCP服务器端租用到IP地址后,就固定使用这个地址。

img194

图8-3 主机DHCP配置示意图

·Dynamic Allocation。动态分配是指当DHCP客户端第一次从DHCP服务器端租用到IP地址后,并非永久使用该地址,只要租约到期,客户端就得释放(Release)这个IP地址,给其他客户端使用。当然,此客户端可以比其他客户端更优先的更新(renew)租约,以租用此IP地址。动态分配比自动分配更加灵活、高效,尤其是当实际IP地址不足时。例如,某ISP只能提供100个IP地址用于接入客户端,由于这些客户端不可能全部同一时间上网,也就是说100个客户端的并发客户端数通常会小于100,这样就可以将这100个IP地址,轮流地租用给当前正在接入的客户端,所以总共可以支持超过100个客户端接入网络。

DHCP除了能动态地设置IP地址外,还可以将一些IP地址保留下来给一些特殊用途的设备使用,它也可以按照硬件地址来固定地分配IP地址,以提供更多的分配模式。同时,DHCP还可以帮助客户端设置默认网关、子网掩码、DNS服务器等项目。

根据客户端是否第一次登录网络,DHCP的工作流程会有所不同。

(1)第一次登录

·客户端寻找DHCP服务器。当DHCP客户端第一次连入网络时,本机上没有设置任何TCP/IP协议参数,会向网络发出一个DHCP discover的广播数据包。由于客户端不知道自己所属网络,所以数据包的源IP地址为0.0.0.0,而目的IP地址为广播地址255.255.255.255。在Windows XP中,DHCP discover消息的等待时间预设为1s,也就是当客户端将第一个DHCP discover数据包发送出去后,如果在1s内没有得到响应,就认为发送失败,会进行第二次DHCP discover广播。如果一直得不到响应,客户端总共会发送4次DHCP discover广播数据包,每次等待响应的时间分别是1s、9s、13s、16s。如果这4次广播都没有收到DHCP服务器的响应,客户端会显示错误信息,宣告DHCP discover失败。

·DHCP服务器提供IP租用地址。当DHCP服务器监听到客户端发出的DHCP discover广播包后,它会从那些还没有租出的IP地址范围内,选择最前面的空置IP地址,连同其他TCP/IP参数,通过DHCP offer数据包响应给客户端。由于客户端在开始时还没有IP地址,在DHCP discover数据包内会带有客户端的MAC地址信息,和标识该数据包的XID编号,DHCP服务器响应的DHCP offer数据包会根据这些信息发送给要求租用IP地址的客户端。通常DHCP offer数据包会包含租约期限信息。

·DHCP客户端接受IP租约。如果客户端收到网络上多台DHCP服务器的响应,只会挑选其中一个DHCP offer(通常选择最先到达的),并向网络发送一个DHCP request广播数据包,告诉所有DHCP服务器它将接受哪一台服务器提供的IP地址。客户端会向网络发送一个ARP数据包,查询网络上是否有其他设备使用该IP地址;如果发现该IP地址已经被占用,客户端会送出一个DHCP declient数据包给该DHCP服务器,拒绝接受其提供的IP地址,并重新发送DHCP discover请求。有时候DHCP客户端并不会完全接受DHCP offer中的所有参数设置。这时客户端可以用DHCP request向DHCP服务器提出DHCP配置选择,这些选择会以不同的号码填写在DHCP Option Field内。也就是说客户端可以保留自己的一些TCP/IP参数设置。

·DHCP服务器端租约确认。当DHCP服务器接收到客户端的DHCP request之后,会向客户端发送一个DHCP ack响应,以确认IP租约正式生效。

(2)第一次登录后

·一旦DHCP客户端成功地从服务器端获取到DHCP租约后,在租约失效前可以一直使用已租到的IP地址,不必再发送DHCP discover消息。

·当客户端每次重新登录网络时,它会向之前的DHCP服务器发送包含前一次所分配IP地址的DHCP request信息,DHCP服务器会尽量给客户端分配原来的IP地址,如果没问题的话,直接响应DHCP ack来确认。如果该地址已经失效或已被其他设备使用,DHCP服务器会响应一个DHCP nack数据包给客户端,要求其重新执行DHCP discover过程。

·IP地址一般都有租约期限,并根据租约期限执行一定的策略。以Windows XP为例,DHCP客户端除了在开机时发出DHCP request请求之外,在租约期限一半时也会发出DHCP request,如果此时得不到DHCP服务器的确认,客户端还可以继续使用该IP地址;当租约期过了87.5%时,如果客户端仍然无法收到DHCP服务器的确认,它将与其他DHCP服务器通信。如果网络上没有其他DHCP服务器在运行,客户端必须停止使用该IP地址,并发送一个DHCP discover数据包,重新申请TCP/IP协议参数。

·需要退租时,客户端可以随时发送DHCP release命令解除租约。

从前面描述的过程可以看出,DHCP discover是以广播方式进行发送的,它只能在同一局域网中有效,因为路由器会隔离广播数据包。但有些情况下,DHCP服务器与客户端不在同一个网络中。这时由于DHCP客户端还没有配置好TCP/IP协议,所以不知道路由器的地址,而路由器也不会将DHCP广播包传递出去,因此DHCP discover请求无法抵达DHCP服务器。这时可以采用DHCP Agent主机来接受客户端的DHCP请求,然后将此请求传递给另外一个网络中的DHCP服务器,并将服务器的回应传给客户端。使用DHCP Agent可以不用在每一个网络中都安装DHCP服务器,降低了设备成本,便于集中管理。