第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 四步交互过程

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,原因有三:

  1. 通知所有 DHCP 服务器:网络中可能有多台 DHCP 服务器,广播 Request 让所有服务器知道客户端选择了哪一台
  2. 尚未完成地址绑定:选择阶段客户端尚未配置/启用获得的 IP,多数实现以 0.0.0.0 为源、广播方式发送(RFC 2131 同时允许客户端根据 Offer 中的 server identifier(Option 54)向所选服务器单播 Request,广播仍是主流做法,兼容性更好)
  3. 被拒绝的服务器释放资源:未选中的服务器收到 Request 后,会将之前保留的 IP 释放回地址池

3.5 DHCP 租约机制

阶段 时间点 客户端行为
T1(50% 租约时间) 租约过半 发送 DHCP Request(单播)请求续租
T2(87.5% 租约时间) 租约即将到期 发送 DHCP Request(广播)请求续租,扩大搜索范围
租约到期(100%) 租约结束 停止使用当前 IP,重新发起 Discover

DHCP 租约机制 - 图示

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
监控地址池使用率 及时扩展地址池,避免耗尽

思考

  1. 如果网络中有两台 DHCP 服务器,客户端最终会使用哪台服务器分配的 IP?为什么 Request 要使用广播?
  2. 客户端获取到 IP 后,在租约到期前的 50% 时间点做了什么?如果此时 DHCP 服务器宕机会怎样?
  3. PC 获取到 169.254.x.x 地址意味着什么?这个地址段的特殊含义是什么?

下篇预告:第47篇:DHCP 中继:跨网段分配 IP 地址