DHCP协议采用UDP作为传输协议,有3个端口,其中UDP67和UDP68为正常的DHCP服务端口,分别作为DHCP Server和DHCP Client的服务端口,主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口。546号端口用于DHCPv6 Client,而不用于DHCPv4。
1. DHCP Client 发现阶段(Discover)
DHCP Client以广播的方式发出DHCP Discover报文。在DHCP服务配置完成后,DHCP Client启动时,由于没有IP地址,会自动发送以discover的广播报文,源地址为0.0.0.0目的地址为255.255.255.255。网络上的所有支持TCP/IP的主机都会收到该DHCP Discovery报文,但是只有DHCP Server会响应该报文。
2. DHCP Server 响应阶段(Offer)
所有的DHCP Server都能够接收到DHCP Client发送的DHCP Discover报文,所有的DHCP Server都会给出响应,向DHCP Client发送一个DHCP Offer报文。
DHCP Offer报文中“Your(Client) IP Address”字段就是DHCP Server能够提供给DHCP Client使用的IP地址,且DHCP Server会将自己的IP地址放在“option”字段中以便DHCP Client区分不同的DHCP Server。DHCP Server在发出此报文后会存在一个已分配IP地址的纪录。
3. DHCP Client 请求使用(Request)
DHCP Client只能处理其中的一个DHCP Offer报文,一般的原则是DHCP Client处理最先收到的DHCP Offer报文。DHCP Client会发出一个广播的DHCP Request报文,在选项(option)字段中会加入选中的DHCP Server的IP地址和需要的IP地址。
4. DHCP Server 确认使用(ACK)
DHCP Server收到DHCP Request报文后,判断选项(option)字段中的IP地址是否与自己的地址相同。如果不相同,DHCP Server不做任何处理只清除相应IP地址分配记录;如果相同,DHCP Server就会向DHCP Client响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。
5. DHCP Client 重新登录
DHCP Client接收到DHCP ACK报文后,检查DHCP Server分配的IP地址是否能够使用。如果可以使用,则DHCP Client成功获得IP地址并根据IP地址使用租期自动启动续延过程;如果DHCP Client发现分配的IP地址已经被使用,则DHCP Client向DHCP Server发出DHCP Decline报文,通知DHCP Server禁用这个IP地址,然后DHCP Client开始新的地址申请过程。
6. 续约或释放地址(Lease or Release)
- DHCP Client续约
当DHCP客户端获取到一个IP地址后,并不代表可以永久使用这个地址,而是有一个使用期限,在DHCP中我们称之为租约期限,对应DHCP服务器的IP地址租约时间Lease Time 参数,超过这个时间后IP地址被DHCP服务器收回,所以客户端必须续约才能继续使用IP地址。Lease默认是自客户端成功获取IP地址,往后再推8天。在有效的租约期限内,还包含着另外两个续约时间点,第四天和第七天,也就是租约的一半和租约的7/8。续约原理如下:
(1) 在使用租期过50%时,DHCP Client会以单播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址。
(2) 在使用租期87.5%时,DHCP Client会以广播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。
如果租约时间设置太短,client将会频繁想DHCP server续约,当DHCP server来不及响应client的续约请求后就会因为地址老化而需要重新进行DHCP 地址请求过程,从而出现网络中断。
- 客户端主动释放地址
DHCP Client在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址,DHCP Server收到DHCP Release报文后,会回收相应的IP地址并重新分配。
对续约或释放地址过程感兴趣的可以去这篇博客https://blog.csdn.net/wangdk789/article/details/27052505,有详细的抓包过程,我抓包没截图保存下来。。。
拓展:DHCP 的选项非常多,以下是抓包过程需要特别注意的比较重要的几个DHCP options类别。
- DHCP DISCOVER
- DHCP OFFER
- DHCP REQUEST
- DHCP DECLINE
- DHCP ACK
- DHCP NACK
- DHCP RELEASE
网友评论