第46篇:DHCP 原理:Discover→Offer→Request→ACK
关键词:DHCP、DORA、Discover、Offer、Request、ACK、租约、华为配置、IP地址分配
一、引言
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是网络中最常用的地址分配机制。每当一台笔记本电脑连接到 WiFi、一部手机切换到蜂窝网络,或者一台新服务器上架接入交换机,DHCP 都在幕后默默工作,自动分配 IP 地址、子网掩码、网关和 DNS 等网络参数。
理解 DHCP 的 DORA 四步握手过程,是排查"获取不到 IP 地址"这类故障的前提。本文将深入解析 DHCP 的工作原理、报文交互、租约机制以及华为设备上的 DHCP 服务器配置。
二、核心概念
2.1 DHCP 的作用
| 功能 | 说明 |
|---|---|
| 自动分配 IP 地址 | 客户端无需手动配置,即插即用 |
| 集中管理地址 | 管理员在 DHCP 服务器统一配置地址池 |
| 避免 IP 冲突 | DHCP 服务器跟踪已分配的地址,避免手动配重复 |
| 传递网络参数 | 除 IP 外,还分配网关、DNS、域名、NTP 等 |
| 地址回收复用 | 租约到期后自动回收地址,提高地址利用率 |
2.2 DHCP 相关角色
| 角色 | 说明 |
|---|---|
| DHCP 客户端 | 请求获取 IP 地址的设备(PC、手机、AP 等) |
| DHCP 服务器 | 分配 IP 地址并提供网络参数的设备 |
| DHCP 中继(Relay Agent) | 跨网段转发 DHCP 报文的中间设备 |
| DHCP Snooping | 交换机安全特性,防范非法 DHCP 服务器 |
2.3 DHCP 报文类型
| 报文类型 | 方向 | 说明 |
|---|---|---|
| Discover | 客户端 → 服务器 | 广播,发现网络中的 DHCP 服务器 |
| Offer | 服务器 → 客户端 | 广播/单播,提供 IP 地址及参数 |
| Request | 客户端 → 服务器 | 广播,请求使用服务器提供的 IP |
| ACK | 服务器 → 客户端 | 广播/单播,确认分配成功 |
| NAK | 服务器 → 客户端 | 拒绝请求(IP 已分配给别人或不在地址池) |
| Release | 客户端 → 服务器 | 主动释放 IP 地址 |
| Decline | 客户端 → 服务器 | 发现 IP 冲突后拒绝使用 |
三、技术细节
3.1 DHCP DORA 四步交互过程

3.2 Discover 报文详解
| 字段 | 值 | 说明 |
|---|---|---|
| Transaction ID | 随机生成 | 客户端唯一标识本次请求 |
| Client MAC Address | 客户端 MAC | 服务器据此绑定 IP |
| CIADDR | 0.0.0.0 | 客户端尚无 IP |
| YIADDR | 0.0.0.0 | 服务器尚未分配 |
| SIADDR | 0.0.0.0 | 服务器地址未知 |
| Flags | 0x8000 (broadcast bit) | 要求服务器使用广播回复 |
3.3 Offer 报文详解
| 字段 | 值 | 说明 |
|---|---|---|
| Transaction ID | 与 Discover 一致 | 匹配对应请求 |
| YIADDR | 192.168.1.100 | 服务器提议的 IP 地址 |
| SIADDR | 192.168.1.1 | 服务器地址(siaddr,引导/中继场景为下一跳服务器地址;与 Option 54 Server Identifier 相区分) |
| Option 51 (Lease Time) | 86400 | 租约时间(秒),24 小时 |
| Option 1 (Subnet Mask) | 255.255.255.0 | 子网掩码 |
| Option 3 (Router) | 192.168.1.1 | 默认网关 |
| Option 6 (DNS) | 114.114.114.114 | DNS 服务器 |
3.4 为什么 Request 通常使用广播?
客户端收到 Offer 后,通常会使用广播发送 Request,原因有三:
- 通知所有 DHCP 服务器:网络中可能有多台 DHCP 服务器,广播 Request 让所有服务器知道客户端选择了哪一台
- 尚未完成地址绑定:选择阶段客户端尚未配置/启用获得的 IP,多数实现以 0.0.0.0 为源、广播方式发送(RFC 2131 同时允许客户端根据 Offer 中的 server identifier(Option 54)向所选服务器单播 Request,广播仍是主流做法,兼容性更好)
- 被拒绝的服务器释放资源:未选中的服务器收到 Request 后,会将之前保留的 IP 释放回地址池
3.5 DHCP 租约机制
| 阶段 | 时间点 | 客户端行为 |
|---|---|---|
| T1(50% 租约时间) | 租约过半 | 发送 DHCP Request(单播)请求续租 |
| T2(87.5% 租约时间) | 租约即将到期 | 发送 DHCP Request(广播)请求续租,扩大搜索范围 |
| 租约到期(100%) | 租约结束 | 停止使用当前 IP,重新发起 Discover |

3.6 常用 DHCP Option
| Option 编号 | 名称 | 说明 |
|---|---|---|
| 1 | Subnet Mask | 子网掩码 |
| 3 | Router | 默认网关 |
| 6 | DNS Server | DNS 服务器地址 |
| 15 | Domain Name | 域名 |
| 51 | Lease Time | 租约时间(秒) |
| 58 | T1 | 续租时间(通常是租约的 50%) |
| 59 | T2 | 重绑定时间(通常是租约的 87.5%) |
| 82 | Relay Agent Information | DHCP 中继信息(Circuit ID / Remote ID) |
四、实战配置/案例分析
4.1 案例一:华为交换机 DHCP 服务器配置
场景:在华为 S5735 交换机上配置 DHCP 服务器,为 VLAN 10(192.168.10.0/24)和 VLAN 20(192.168.20.0/24)分配 IP。
# ===== 完整配置 =====
# Step 1: 启用 DHCP 服务
[HUAWEI] dhcp enable
# Step 2: 创建 VLAN 接口(网关)
[HUAWEI] vlan batch 10 20
[HUAWEI] interface Vlanif10
[HUAWEI-Vlanif10] ip address 192.168.10.1 24
[HUAWEI] interface Vlanif20
[HUAWEI-Vlanif20] ip address 192.168.20.1 24
# Step 3: 创建全局地址池 - VLAN 10
[HUAWEI] ip pool VLAN10_POOL
[HUAWEI-ip-pool-VLAN10_POOL] network 192.168.10.0 mask 24
[HUAWEI-ip-pool-VLAN10_POOL] gateway-list 192.168.10.1
[HUAWEI-ip-pool-VLAN10_POOL] dns-list 114.114.114.114 8.8.8.8
[HUAWEI-ip-pool-VLAN10_POOL] lease day 1 # 租期 1 天
# Step 4: 创建全局地址池 - VLAN 20
[HUAWEI] ip pool VLAN20_POOL
[HUAWEI-ip-pool-VLAN20_POOL] network 192.168.20.0 mask 24
[HUAWEI-ip-pool-VLAN20_POOL] gateway-list 192.168.20.1
[HUAWEI-ip-pool-VLAN20_POOL] dns-list 114.114.114.114
[HUAWEI-ip-pool-VLAN20_POOL] lease day 1
# Step 5: 在 VLANIF 接口上应用地址池
[HUAWEI] interface Vlanif10
[HUAWEI-Vlanif10] dhcp select global
[HUAWEI] interface Vlanif20
[HUAWEI-Vlanif20] dhcp select global
# Step 6: 排除地址(不分配给客户端)
[HUAWEI] ip pool VLAN10_POOL
[HUAWEI-ip-pool-VLAN10_POOL] excluded-ip-address 192.168.10.1 192.168.10.10
# 192.168.10.1~10 保留,不分配给 DHCP 客户端
4.2 案例二:静态 IP 绑定(DHCP Reservation)
场景:打印机和 IP 电话需要固定 IP,但不想手动配置,使用 DHCP 静态绑定。
# 基于 MAC 地址的静态绑定
[HUAWEI] ip pool VLAN10_POOL
[HUAWEI-ip-pool-VLAN10_POOL] static-bind ip-address 192.168.10.100 mac-address 00e0-fc12-3456
# 打印机 MAC: 00e0-fc12-3456 → 固定分配 192.168.10.100
[HUAWEI-ip-pool-VLAN10_POOL] static-bind ip-address 192.168.10.101 mac-address 00e0-fc78-9abc
# IP电话 MAC: 00e0-fc78-9abc → 固定分配 192.168.10.101
# 验证静态绑定
<HUAWEI> display ip pool name VLAN10_POOL static-bind
4.3 案例三:DHCP 获取不到 IP 的故障排查
故障现象:PC 接入交换机后显示"自动获取 IP 失败",IP 地址为 169.254.x.x(APIPA 地址)。
# 排查步骤:
# Step 1: 检查 PC 侧
# 确认网卡设置为"自动获取 IP 地址"
# 尝试 ipconfig /release 和 ipconfig /renew
# Step 2: 检查 DHCP 服务是否启用
<HUAWEI> display current-configuration | include dhcp enable
# 如果无任何回显 → DHCP 功能未使能,需执行 dhcp enable
[HUAWEI] dhcp enable # 启用 DHCP
# Step 3: 检查地址池配置
<HUAWEI> display ip pool
# 确认地址池存在且配置正确
# Step 4: 检查 VLANIF 接口是否应用了 DHCP
<HUAWEI> display current-configuration interface Vlanif10
# 应有 dhcp select global 或 dhcp select interface
# Step 5: 检查地址池是否耗尽
<HUAWEI> display ip pool name VLAN10_POOL
# 查看 Used : xxx, Total : xxx
# 如果 Used = Total,地址池已满
# Step 6: 检查链路层
# 交换机端口是否正常 UP
# PC 是否接入正确的 VLAN
# Step 7: 抓包分析
# 在 VLANIF 接口抓包,确认是否收到 Discover
# 如果收到 Discover 但无 Offer → 服务器问题
# 如果未收到 Discover → 链路层或 VLAN 问题
常见故障原因汇总:
| 故障原因 | 排查命令 | 解决方法 |
|---|---|---|
| DHCP 服务未启用 | display current-configuration \| include dhcp enable |
dhcp enable |
| 地址池未配置 | display ip pool |
创建地址池并配置 network 网段 |
| VLANIF 未应用 DHCP | display current-configuration interface Vlanif X |
接口下 dhcp select global |
| 地址池耗尽 | display ip pool name xxx |
扩大地址池或缩短租期 |
| VLAN 配置错误 | display vlan |
修正 VLAN 和端口归属 |
| 链路故障 | display interface GigabitEthernet X/X/X |
排查物理链路 |
| DHCP Snooping 阻断 | display dhcp snooping all |
上联口配置 dhcp snooping trust |
4.4 DHCP 接口地址池 vs 全局地址池
# 方式1: 全局地址池(推荐)
# 适合:地址池管理集中化、跨设备统一配置
[HUAWEI] ip pool MY_POOL
[HUAWEI-ip-pool-MY_POOL] network 192.168.10.0 mask 24
[HUAWEI-ip-pool-MY_POOL] gateway-list 192.168.10.1
[HUAWEI] interface Vlanif10
[HUAWEI-Vlanif10] dhcp select global
# 方式2: 接口地址池
# 适合:简单网络、一个 VLANIF 一个地址池
[HUAWEI] interface Vlanif10
[HUAWEI-Vlanif10] ip address 192.168.10.1 24
[HUAWEI-Vlanif10] dhcp select interface
# 自动以接口网段创建地址池
# 网关自动使用接口 IP
五、总结
| DHCP 步骤 | 报文类型 | 方向 | 广播/单播 | 关键信息 |
|---|---|---|---|---|
| 第一步 | Discover | 客户端→服务器 | 广播 | Transaction ID、Client MAC |
| 第二步 | Offer | 服务器→客户端 | 广播/单播 | 提议的 IP、掩码、网关、DNS |
| 第三步 | Request | 客户端→服务器 | 广播 | 请求的 IP、选择的服务器 |
| 第四步 | ACK | 服务器→客户端 | 广播/单播 | 确认 IP、租约时间 |
| DHCP 配置最佳实践 | 说明 |
|---|---|
| 启用 DHCP Snooping | 防止非法 DHCP 服务器攻击 |
| 合理设置租约时间 | 临时网络用短租期,固定网络用长租期 |
| 保留关键设备地址 | 服务器、打印机等使用静态绑定 |
| 排除网段内特殊地址 | 网关、服务器等地址不纳入分配范围 |
| 配置 DHCP Snooping 信任端口 | 连接合法 DHCP 服务器的端口设为 trust |
| 监控地址池使用率 | 及时扩展地址池,避免耗尽 |
思考
- 如果网络中有两台 DHCP 服务器,客户端最终会使用哪台服务器分配的 IP?为什么 Request 要使用广播?
- 客户端获取到 IP 后,在租约到期前的 50% 时间点做了什么?如果此时 DHCP 服务器宕机会怎样?
- PC 获取到 169.254.x.x 地址意味着什么?这个地址段的特殊含义是什么?
下篇预告:第47篇:DHCP 中继:跨网段分配 IP 地址