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 address00:0c:29:4a:1a:f0, I need an IP addressOffer 阶段: 当DHCP Server监听到Client发来的DHCP discover 广播报文后,会检查租约表,将地址范围内未租出,且空闲IP(顺序分配),连同租约期限等信息封装为offer 报文,广播回应给DHCP Client,示例:OK00:0c:29:4a:1a:f0, I’m offering IP address172.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 地址。示例:Server172.20.0.2, I would like to have IP172.20.0.128
- 如果发现该 IP 已被使用,
确认阶段: 当DHCP Server收到Client回答的Request 请求报文后,向Client发送一个包含它提供的 IP 和其他设置的DHCP ACK 确认报文,告诉ClientIP 地址,Client在收到 ACK 报文之后绑定 IP 到网卡,并使用该 IP 与之前主机通信。示例:OK00:0c:29:4a:1a:f0, IP172.20.0.128is 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因故障无响应)
- 在租约期限一半(租约的50%)的时候也会发出