一、工作流程
1.发现阶段,即DHCP客户端发现DHCP服务器的阶段。DHCP客户端发送DHCPDISCOVER报文来发现DHCP服务器。DHCPDISCOVER报文中携带了客户端的MAC地址、需要请求的参数列表选项、广播标志位等信息。
2.提供阶段,即DHCP服务器提供网络配置信息的阶段。服务器接收到DHCPDISCOVER报文后,选择跟接收DHCPDISCOVER报文接口的IP地址处于同一网段的地址池,并且从中选择一个可用的IP地址,然后通过DHCPOFFER报文发送给DHCP客户端。
3.选择阶段,即DHCP客户端选择IP地址的阶段。如果有多个DHCP服务器向DHCP客户端回应DHCPOFFER报文,则DHCP客户端一般只接收第一个收到的DHCPOFFER报文,然后以广播方式发送DHCPREQUEST报文,该报文中包含客户端想选择的DHCP服务器标识符和客户端IP地址。
4.确认阶段,即DHCP服务器确认所分配IP地址的阶段。DHCP客户端收到DHCPACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址。
二、报文字段
最重要的是下面的三个字段
yiaddr | Your IP Address | 分配给客户端的IP地址(在DHCPOFFER和DHCPACK报文中使用) |
siaddr | Server IP Address | DHCP服务器的IP地址(在DHCPDISCOVER和DHCPREQUEST报文中通常为0.0.0.0;在DHCPOFFER和DHCPACK报文中,服务器会填写自己的IP地址) |
chaddr | Client Hardware Address | 客户端MAC地址(核心标识,用于唯一标识客户端) |
三、报文类型与用途
类型 | 发送方 | 功能说明 |
---|---|---|
DHCPDISCOVER | 客户端 | 首次入网时广播寻找服务器 |
DHCPOFFER | 服务器 | 响应DISCOVER,提供配置参数 |
DHCPREQUEST | 客户端 | 确认选择OFFER/续租IP地址/重启后确认原有配置 |
DHCPDECLINE | 客户端 | 通知服务器分配地址存在冲突 |
DHCPACK | 服务器 | 确认REQUEST请求,分配生效 |
DHCPNAK | 服务器 | 拒绝REQUEST请求(如地址池耗尽、IP地址已被分配给其他设备) |
DHCPRELEASE | 客户端 | 主动释放IP地址 |
DHCPINFORM | 客户端 | 已获取IP后,请求更详细参数(网关、DNS等) |
四、地址池分配模式
1. 接口地址池
-
规则:仅分配与服务器接口同网段的IP地址。
-
限制:适用于单网段场景,无法跨网段分配。
2. 全局地址池
-
规则:通过
giaddr
(中继IP)判断客户端所属网段。如果存在多个地址池,按giaddr
匹配对应网段。 -
特殊场景:
-
VRRP协议需使用全局地址池(避免虚拟IP导致网关错误)。
-
客户端无IP时,通过中继设备IP定位地址池。
-
补充:如果客户端和服务器在同一网段,
giaddr
字段通常为0.0.0.0。
-
五、地址分配优先级
DHCP服务器按以下顺序分配IP地址:
-
静态绑定:优先分配预先配置的MAC-IP映射。
-
历史记录:客户端请求报文中指定的历史IP地址(通过Option 50)。
-
空闲地址:地址池中首个可用IP。
-
回收地址:租期超时或冲突后释放的IP。
六、租期管理
-
默认租期:24小时(具体值可以由服务器配置)。
-
续租机制:
-
时间进度:50%时,客户端单播发送DHCPREQUEST请求续租;87.5%时,广播发送DHCPREQUEST请求续租;100%时,释放IP并重新申请。
-
补充:如果客户端在续租过程中收到DHCPACK,租期将被延长。
-
七、DHCP中继原理
跨网段场景工作流程
-
发现阶段:中继接收客户端广播的DHCPDISCOVER,单播转发至服务器或下一跳中继。
-
提供阶段:服务器根据
giaddr
选择地址池,中继转发DHCPOFFER至客户端。 -
选择阶段:中继处理DHCPREQUEST流程同发现阶段。
-
确认阶段:中继处理DHCPACK流程同提供阶段。
-
中继核心作用:通过
giaddr
字段传递客户端真实网段信息,实现跨三层分配IP地址。
在全局地址池中申请地址时,DHCP服务器会根据客户端的giaddr
字段选择地址池。如果客户端没有IP地址且请求经过中继设备,则服务器会根据中继设备的giaddr
字段来确定客户端所属网段。例如,vlan20
对应的网段是10.1.20.0/24
,如果全局地址池中没有与giaddr
同网段的地址池,DHCP服务器将无法分配IP地址,这也是申请地址出错的主要原因之一。