- 一、协议机制
- 四步交互:Discover → Offer → Request → ACK(DORA 流程)。
- 租约管理:IP 地址的分配时间(Lease Time)、续租(T1=50%租期)、重绑定(T2=87.5%租期)。
- 地址分配方式:
- 动态分配:从地址池中临时分配,租约到期可回收。
- 静态保留:基于 MAC 地址固定分配特定 IP。
二、报文结构
- 报文类型:Discover、Offer、Request、ACK、NAK、Release、Decline。
- 关键字段:
- - Transaction ID(事务ID,标识同一交互流程)。
- - Client MAC(客户端 MAC 地址)。
- - Your IP(服务器分配的 IP)。
- - Options(子网掩码、网关、DNS、租期等参数)。
- 1、client 广播发起DHCP discover,请求IP地址。
-
2、DHCP Server 响应client 请求,可提供IP 地址。 -
3、client 请求IP地址
4、server 提动IP地址,租约等信息。
-
三、租约生命周期
正常续租:
1. T1 时间点:客户端单播 Request 向原服务器续租。
2. T2 时间点:客户端广播 Request 寻找其他服务器。
3. 租约到期:释放 IP,重新发起 Discover。
异常释放:
客户端主动发送 Release 报文释放 IP。
服务器发送 NAK 强制终止租约。
四、 安全性
DHCP Snooping:交换机记录合法 DHCP 服务器端口,阻断伪造报文。
IP Source Guard:基于 DHCP Snooping 绑定表,过滤非法 IP 流量。
防 Rogue DHCP:检测并隔离未经授权的 DHCP 服务器。
五、测试要点
-
功能测试
测试场景 |
测试方法 |
预期结果 |
正常地址分配 |
客户端发起 DHCP 请求 |
成功获取 IP、网关、DNS 等参数 |
静态保留分配 |
配置 MAC-IP 绑定,客户端请求 |
获取固定 IP,与配置一致 |
跨子网分配(Relay) |
中继代理转发跨子网请求 |
客户端从远程服务器获取正确 IP |
地址池耗尽 |
分配所有可用 IP 后,新客户端请求 |
服务器返回 NAK 或无响应 |
租约续期 |
客户端在 T1 时间续租 |
租期延长,IP 不变 |
客户端主动释放(Release) |
客户端发送 Release 报文 |
服务器回收 IP,地址池标记为可用 |
-
异常测试
测试场景 |
测试方法 |
预期结果 |
Offer 丢包 |
模拟服务器 Offer 丢包 |
客户端超时后重新发送 Discover |
ACK 丢包 |
模拟服务器 ACK 丢包 |
客户端未获得 IP,重新发起请求 |
IP 冲突检测 |
手动配置 IP 与 DHCP 分配地址冲突 |
客户端发送 Decline,重新请求 |
服务器无响应 |
关闭 DHCP 服务器 |
客户端多次重试后超时,使用 APIPA(169.254.x.x) |
伪造 DHCP 服务器(Rogue) |
接入非法 DHCP 服务器 |
合法客户端优先响应合法服务器(需 DHCP Snooping 支持) |
-
性能测试
测试场景 |
测试方法 |
预期指标 |
高并发请求 |
模拟大量客户端同时请求 IP |
服务器响应时间 < 1s,无地址分配错误 |
租期压力测试 |
设置极短租期(如 1分钟),观察续租频率 |
服务器稳定处理续租请求,无内存泄漏 |
地址池容量 |
分配全部 IP 后,释放部分地址,验证回收机制 |
地址池正确回收并重新分配 |
-
安全测试
测试场景 |
测试方法 |
预期结果 |
DHCP Starvation 攻击 |
模拟大量虚假 MAC 地址耗尽地址池 |
启用端口安全或限制每 MAC 最大租约数后阻断攻击 |
DHCP 欺骗攻击 |
伪造服务器发送恶意 Offer(错误网关/DNS) |
DHCP Snooping 记录异常并阻断报文 |
Option 字段篡改 |
篡改 DHCP 报文中的 DNS 或网关参数 |
客户端获取的配置与服务器预设一致 |
-
兼容性测试
测试场景 |
测试方法 |
预期结果 |
多厂商设备兼容性 |
使用不同品牌客户端(Windows、Linux、IoT 设备)测试 |
所有设备均能正常获取配置 |
IPv4/IPv6 双栈支持 |
在双栈网络中测试 DHCPv4 和 DHCPv6 协同工作 |
客户端同时获取 IPv4 和 IPv6 地址 |
中继代理兼容性 |
跨不同厂商交换机/路由器测试 DHCP Relay |
请求正确转发至远程服务器 |
六、测试工具与方法
1. 抓包分析
工具:Wireshark、tcpdump。
过滤器:`bootp` 或 `udp.port == 67 || udp.port == 68`。
验证点:
- Transaction ID 一致性。
- 报文类型与交互流程正确性。
- Option 字段完整性(子网掩码、DNS 等)。
2. 模拟工具
DHCP 客户端模拟:
Linux:`dhclient`。
Windows:`ipconfig /release && ipconfig /renew`。
压力测试工具:
- Scapy(构造大量 DHCP Discover 报文)。
- Ostinato(流量生成器)。
3. 日志分析
服务器日志:检查地址分配记录、冲突事件。
客户端日志:
- Windows:事件查看器 → Windows 日志 → 系统(事件ID 1000+)。
- Linux:`/var/log/syslog` 或 `journalctl -u dhclient`。