DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)
是一个局域网的网络协议,由 DHCP Server
控制一段IP地址范围,客户机请求 服务器
就可以自动获得服务器分配的 IP地址
和 子网掩码
。
DHCP
DHCP
使用 UDP
报文,交互过程:
Discover 阶段
:当 Client(客户机)
启动时,若是配置的 DHCP 方式,由于没有 ip 地址,会自动发送 discover 广播报文
(携带MAC地址),等待 DHCP Server
响应的报文,示例:I’m a client at MAC address 00:0c:29:4a:1a:f0
, I need an IP address
Offer 阶段
: 当 DHCP Server
监听到 Client
发来的 DHCP discover 广播报文
后,会检查 租约表
,将地址范围内未租出,且空闲IP(顺序分配),连同租约期限等信息封装为 offer 报文
,广播回应给 DHCP Client
,示例:OK 00:0c:29:4a:1a:f0
, I’m offering IP address 172.20.0.128
接受 IP 租约阶段
:如果 Client
收到局域网内多台 DHCP Server
的响应,只会挑选最先抵达的 DHCP Offer 报文
进行解析,然后发送 arp 报文
,检查该 IP 在局域网内是否已经被其他主机占用
- 如果发现该 IP 已被使用,
Client
会发送一个 DHCP Decline 报文
给 DHCP Server
,拒绝接受它的 DHCP Offer
,并重新发送 Discover报文
- 如果检查该 IP 未被使用,则会广播一个
Request 报文
,告诉所有服务器自己接受了哪台 DHCP Server
的 IP 地址。示例:Server 172.20.0.2
, I would like to have IP 172.20.0.128
确认阶段
: 当 DHCP Server
收到 Client
回答的 Request 请求报文
后,向 Client
发送一个包含它提供的 IP 和其他设置的 DHCP ACK 确认报文
,告诉 Client
IP 地址,Client
在收到 ACK 报文之后绑定 IP 到网卡,并使用该 IP 与之前主机通信。示例:OK 00:0c:29:4a:1a:f0
, IP 172.20.0.128
is yours
重新开机时
:当 Client
重新登陆网络时,会直接广播发送前一次分配 IP 地址的Request 请求
- 当
DHCP Server
收到信息之后,会尝试让 Client
使用原来的IP地址,并回答一个 DHCP ACK 确认信息
- 如果该 IP 无法再次分配给
Client
,则 DHCP Server
会回答一个 DHCP NAK
否认信息给Client,当 Client
收到否认信息后,会重新发送 DHCP discover报文
来重新获取新的 IP 地址
更新租约
:通过 DHCP 方式获取到的 IP 地址都有一个租约,租约过期后,DHCP Server
将回收该 IP 地址。所以如果 DHCP Client
想继续使用该 IP 地址,则必须请求 DHCP Server
更新器租约
- 在租约期限一半(租约的50%)的时候也会发出
DHCP Request
,如果此时得不到 DHCP ACK 确认报文
,Client
还可以继续使用该 IP
- 在剩下的租约期限的一半(租约的75%)的时候,若还得不到
DHCP ACK 确认报文
,在租约到期之后 Client
需重新发送 DHCP discover报文
(一般虚机突然没有 IP 地址就是由于该问题引起,即 DHCP Server
因故障无响应)