动态主机设置协议(英语:Dynamic Host Configuration Protocol,缩写:DHCP),又称动态主机组态协定,是一个用于IP网络的网络协议,位于OSI模型的应用层,使用UDP协议工作,主要有两个用途:
- 用于内部网或网络服务供应商自动分配IP地址给用户;
- 用于内部网管理员对所有电脑作中央管理。
DHCP分配机制
DHCP提供了两种地址分配机制,可以根据网络需求为不同的客户端选择不同的分配策略。
- 动态分配机制:通过DHCP为客户端分配一个有使用期限的IP地址。若客户端没有及时续约,到达使用期限后,该IP地址则可能会被其它客户端使用。
- 静态分配机制:通过DHCP为特定的客户端分配固定的IP地址。该IP地址可被此客户端永久使用。
DHCP服务端为DHCP客户端分配IP地址时,采用的顺序如下:
- DHCP服务端中与DHCP客户端的MAC地址静态绑定的IP地址;
- DHCP客户端曾经使用过的IP地址;
- 最先找到的可用IP地址;
- 若无可用的IP地址,则依次查询超过租期、发生冲突的IP地址,若找到就进行分配,否则报错处理。
因此,DHCP客户端重启后,也能获得相同的IP地址。
DHCP基本流程
DHCP协议报文采用UDP方式封装,DHCP服务端侦听67号端口,DHCP客户端侦听68号端口。
DHCP的基本工作流程分为4个阶段:发现阶段、提供阶段、请求阶段、确认阶段。
发现阶段
DHCP客户端在本地网段中广播一个DHCP Discover
报文来寻找能够分配IP地址的DHCP服务端。
因为客户端此时还不知道自己以及服务端的地址,所以源IP地址为0.0.0.0
,目标MAC地址为255.255.255.255
,本地网段中的每一台主机均能收到报文,但只有DHCP服务端才会响应。
DHCP Discover
报文还带有一个XID
字段用于辨别发送端和接收端。
提供阶段
本地网段的DHCP服务端收到Discover报文
后,通过广播发送DHCP Offer
报文,目标MAC地址为255.255.255.255
,报文中包含了服务端提供的IP地址、租期等信息。
DHCP客户端通过对比DHCP Discover
报文和DHCP Offer
报文中的XID
字段是否相同,来判断DHCP Offer
是否发送给自己。
请求阶段
若本地网段中存在多个DHCP服务端,则每个DHCP服务端均会回应DHCP Offer
报文。通常,DHCP客户端会选择最先收到的DHCP Offer
报文,并广播DHCP Request
报文来表明选择哪个DHCP服务端。
由于还没得到DHCP服务端的最终确认,DHCP客户端依然以0.0.0.0
为源IP地址、255.255.255.255
为目标MAC地址来进行广播。
若DHCP客户端在一定时间内一直没收到DHCP Offer
报文,则重新发送DHCP Discover
报文。
确认阶段
DHCP服务端收到DHCP Request
广播报文后,发送DHCP Ack
报文作为回应,DHCP Ack
报文包含有服务端提供的IP地址和其它网络参数。DHCP Ack
报文和DHCP Offer
报文的参数不能有冲突,否则DHCP服务端会回应DHCP Nak
报文。
当DHCP客户端收到DHCP Ack
报文后,会发送免费ARP
报文来探测IP地址是否正被其它客户端使用。
另外,除了DHCP客户端选择的DHCP服务端外,其它服务端都将收回此前为客户端提供的IP地址。
DHCP租期
DHCP服务端每次为DHCP客户端分配一个IP地址时,会约定一个IP地址的租期,通常是24小时。
若设定T1
时刻是租期到一半的时候,T2
时刻是租期到87.5%的时候;在T1
时刻,DHCP客户端会单播一个DHCP Request
报文给DHCP服务端,请求续租IP地址,若客户端收到服务端回应的DHCP Ack
报文,则表示续租成功;若直到T2
时刻,DHCP客户端还没收到DHCP Ack
报文,就会广播一个DHCP Request
报文,继续请求续租IP地址,若客户端收到DHCP Ack
报文,则表示续租成功;
若直到租期到期,DHCP客户端都没收到DHCP Ack
报文,就必须停止使用原来的IP地址。DHCP客户端将从发现阶段开始,重新申请一个IP地址。
DHCP报文(补充)
DHCP主要的报文类型有8种,常见的5种报文类型有:DHCP Discover
、DHCP Offer
、DHCP Request
、DHCP Ack
和DHCP Release
,用得少的3种报文类型有:DHCP Nak
、DHCP Decline
和DHCP Inform
。
DHCP Decline
报文当DHCP客户端收到
DHCP Ack
报文后,会发送免费ARP
报文,若检测到申请的IP地址正被其它客户端使用,则DHCP客户端发送DHCP Decline
报文,拒绝分配的IP地址,并重新向DHCP服务端申请IP地址。DHCP Release
报文当DHCP客户端想要释放获得的IP地址时,就向DHCP服务端发送
DHCP Release
报文,DHCP服务端收到报文后,可将该IP地址分配给其它客户端。DHCP Inform
报文DHCP客户端通过手动方式获得IP地址后,还想向DHCP服务端获取更多网络参数(例如默认网关地址、DNS服务器地址)时,客户端就向服务端发送
DHCP Inform
报文进行申请。
客户端状态机
参考资料: