我们在上一节中完成了客户端请求和服务器应答的第一个步骤。客户端发出DHCP_DISCOVER消息,局域网内的所有DHCP服务器发出DHCP_OFFER消息,在该消息中包含一个特殊字段叫Your_IP_Address,这是服务器分配给客户端的IP地址,如下图:
客户端可能会同时受到多个DHCP服务器发送的回应,然后它从中选择一个服务器发送过来的IP地址,并构造一个DHCP_REQUEST发送给对方,在数据包的Options字段中,使用一个Option表示它向服务器请求该IP地址:
然后服务器会向客户端发送DHCP_ACK消息表示确认客户端的租借请求:
完成了上面步骤后,服务器会记录客户端硬件地址与租借地址的对应关系,客户端在租用IP后,想要续租时,依旧会与给定服务器交流,在续租时,它会向绑定服务器发送DHCP_REQUEST消息,在消息中附带续租时常,同时如果允许续租的话,服务器会向客户端发送DHCP_ACK消息,在消息里附带了服务器允许客户端继续租用给定IP的时间。
如果客户端需要离开网络,不再使用给定IP,它会向服务器发送DHCP_RELEASE消息表示放弃当前使用的IP,如此服务器就能回收IP资源,将宝贵的IP分发给其他需要的客户端,DHCP_RELEASE消息中包含了客户端当前使用的IP地址,其基本内容如下:
本节我们就使用代码实现该流程。