一、什么是DHCP
自动分配关键网络参数,包括 IP 地址、子网掩码、网关、DNS 服务器地址。
避免手动设置导致的 IP 地址冲突,实现网络配置的统一管理。
简化网络维护,更换网络参数时无需逐台设备手动修改。
应用场景
- 家庭路由器默认开启 DHCP 服务,让手机、电脑等设备连网后自动获取配置。
- 企业局域网中,通过 DHCP 服务器统一管理大量办公设备的网络配置。
DHCP协议
Dynamic Host Configuration Protocol ,动态主机配置协议
作用:动态的进行IP地址分配
服务端的监听端口 67/udp
客户端监听端口 68/udp
网络架构 C/S:client/server
DHCP的分配方式
-
手动分配:固定不变,工程师进行地址绑定
-
自动分配:但是不进行地址回收
-
动态分配:进行地址回收
DHCP的优势
-
提高配置效率
-
减少配置错误
DHCP工作流程
DHCP 服务给客户端提供服务的核心是四步握手流程,全程通过广播或单播通信完成,无需手动干预。
第一步:发现阶段(DHCP Discover)
- 客户端刚接入网络时没有 IP 地址,会发送广播数据包,寻找网络中的 DHCP 服务器。
- 数据包中包含客户端的 MAC 地址,用于服务器识别设备。
第二步:提供阶段(DHCP Offer)
- 网络中的 DHCP 服务器收到广播后,会从地址池中挑选一个可用 IP 地址。
- 服务器向客户端发送包含 IP 地址、子网掩码、网关、DNS 等配置信息的响应数据包。
第三步:请求阶段(DHCP Request)
- 客户端可能收到多个 DHCP 服务器的 Offer,通常选择第一个收到的配置。
- 客户端再次发送广播,告知所有 DHCP 服务器自己选择的配置,同时确认使用该 IP。
第四步:确认阶段(DHCP Acknowledge)
- 被选中的 DHCP 服务器发送确认数据包,正式将 IP 地址等配置分配给客户端。
- 客户端接收后,即可使用这些参数接入网络,完成服务流程。
注意
同一个网络下不允许存在多个DHCP服务器。(可以部署多台DHCP服务,但IP地址池必须完全不相同,所以就不是在一个网络中了)
DHCP 租约期限
租约期限是 DHCP 服务器规定的 "IP 地址使用权有效期",本质是服务器和客户端的 "约定":在有效期内,客户端可独占该 IP;过期后需重新确认使用权。
租约期限的设置原则
- 设备在线越稳定,租约可越长(减少网络通信量);
- 设备流动性越强(如公共 WiFi),租约应越短(快速释放 IP 给新设备);
- 网络 IP 资源越紧张,租约越短(提高 IP 利用率)
DHCP 租约的核心是 "自动管理",客户端会主动发起更新,无需手动干预
1. 自动续租
- 触发时间
- 租约过半:客户端向原 DHCP 服务器发送 DHCP Request(续租请求)(单播通信,无需广播);
- 若第一次请求未收到响应(如服务器故障),则在租约到期前 75%再次尝试;
- 服务器响应:
- 服务器同意续租:返回 DHCP ACK,确认延长租约(通常延续原租约时长);
- 服务器拒绝续租(如 IP 已分配给其他设备):返回 DHCP NAK,客户端需提前释放 IP,重新发起 IP 获取。
2. 租约过期后:重新获取 IP
若客户端因故障、离线等原因未完成续租,租约到期后:
- 客户端会立即释放当前 IP,恢复 "无 IP 状态";
- 重新执行 DHCP 四步握手流程(Discover→Offer→Request→Acknowledge),获取新的 IP 地址(可能是原 IP,也可能是新 IP,取决于服务器地址池状态)。
3. 手动更新(主动释放 / 重新获取)
若需手动刷新 IP(如网络配置变更后),可通过设备命令操作:
Linux:在终端中执行:
# Linux(以eth0网卡为例,需替换为实际网卡名如ens33)
dhclient -r eth0 # 释放IP
dhclient eth0 # 重新获取IP
二、DHCP安装与配置
首先要给DHCP服务器配置一个静态IP,
bash
nmcli c m ens160(你的网卡名) ipv4.add 192.168.1.253/24 ipv4.method manual
安装DHCP服务软件包
bash
yum install -y dhcp-server
配置文件
配置文件存储路径 /etc/dhcp
默认配置文件副本路径 /usr/share/doc/dhcp-4.2.5/
数据文件存储路径 /var/lib/dhcpd
核心配置文件 /etc/dhcp/dhcpd.conf
将副本文件拷贝到 /etc/dhcp中,并修改以下字段

subnet 10.5.5.0 netmask 255.255.255.224 { ##定义分配的网段和子网掩码
range 10.5.5.26 10.5.5.30; ##定义分配地址段的地址范围
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers 10.5.5.1; ###定义分配的网关地址
option broadcast-address 10.5.5.31; ###定义地址段的广播地址
default-lease-time 600;
max-lease-time 7200;
}
可以按照主机的MAC地址设置分配固定IP,而不是随机分配

host fantasia {
hardware ethernet 08:00:07:26:c0:a5; ###固定分配地址的主机的MAC地址
fixed-address fantasia.fugue.com; ###需要进行分配的IP地址
}
启动服务
bash
systemctl start dhcpd
如果需要配置多个地址池,只需要添加第二个IP分配字段即可,但是要有同网段的网卡作为DHCP服务器IP
例如
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200; # 地址池
option routers 192.168.1.1; # 网关
option subnet-mask 255.255.255.0; # 子网掩码
}
第二个子网
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.100 192.168.2.200;
option routers 192.168.2.1;
}