1、发现阶段(Discover):当客户端需要获取IP地址时,它会在本地网络上发送一个DHCP Discover广播消息,这个消息是UDP数据包,源端口为68,目的端口为67,因为没有特定的目标服务器,所以使用广播地址,这个阶段客户端主要任务是寻找可用的DHCP服务器。
2、提供阶段(Offer):网络中的DHCP服务器接收到Discover消息后,会检查自身是否有可用的IP地址可以分配给客户端,如果有,则选择一个合适的IP地址,并创建一个包含该IP地址及其他配置信息(如子网掩码、网关地址、DNS服务器地址等)的Offer消息,然后以单播方式发送给客户端,Offer消息也是UDP数据包,源端口为67,目的端口为68。
3、请求阶段(Request):客户端收到Offer消息后,会检查提供的IP地址是否符合自己的要求(例如是否与已有的IP地址冲突),如果没有问题,客户端会以广播形式发送一个DHCP Request消息,请求租用该IP地址,Request消息中包含了服务器标识字段,用于指定希望接受哪个DHCP服务器提供的IP地址,客户端还会在这个消息中包含自己的MAC地址等信息,以便服务器进行识别和记录。
4、应答阶段(Ack):DHCP服务器收到客户端的Request消息后,会再次检查所提供的IP地址是否仍然有效且未被其他设备占用,如果一切正常,服务器会发送一个DHCP ACK消息作为响应,确认将所提供的IP地址分配给客户端,ACK消息同样是单播数据包,源端口为67,目的端口为68,客户端就可以正式使用获得的IP地址进行通信了。
5、续租过程:当客户端租用的IP地址接近租期到期时(通常为租期的一半),它会尝试联系之前分配过该地址的DHCP服务器进行续租,客户端会向服务器发送一个DHCP Request消息,请求延长租期,如果服务器同意续租,则会返回一个DHCP ACK消息,并更新租约时间;如果服务器不同意续租或者无法联系到服务器,客户端则需要重新进入发现阶段寻找新的DHCP服务器并获取新的IP地址。
6、重启接入过程:如果客户端系统重新启动或从网络断开后重新连接,它会再次经历一次完整的DHCP初始化过程,即从发现阶段开始重新获取IP地址。
7、地址释放过程:在某些情况下(如客户端不再需要使用该IP地址),客户端可以通过发送DHCP Release消息主动放弃当前使用的IP地址,Release消息是单播数据包,源端口为68,目的端口为67,当DHCP服务器收到Release消息后,会将对应的IP地址标记为可用状态,以便后续分配给其他设备。
下面是关于DHCP服务器工作过程的两个常见问题及解答:
问题1:为什么客户端在Request阶段要使用广播而不是单播?
答案:在Request阶段使用广播是为了确保所有的DHCP服务器都能收到请求消息,因为在网络环境中可能存在多个DHCP服务器,虽然客户端最初可能只收到了一个Offer消息,但在发送Request消息时仍然需要通知其他潜在的DHCP服务器它已经接受了某个特定服务器提供的IP地址,这样可以避免不同服务器分配相同的IP地址导致冲突的问题。
问题2:DHCP服务器如何确定一个IP地址是否已经被占用?
答案:DHCP服务器可以通过多种方式来确定一个IP地址是否已被占用,一种常见的方法是维护一个已分配IP地址的数据库或缓存表,当服务器准备分配一个IP地址时,它会先检查这个地址是否已经在数据库中有记录,一些高级的DHCP服务器还支持发送ARP(地址解析协议)请求来检测网络上是否存在具有相同IP地址的设备,如果收到ARP响应,说明该IP地址已被占用;如果没有收到响应,则认为该地址是可用的。