3.3 DHCP 工作原理 (Principle)
手动配置 IP 地址(静态 IP)虽然稳定,但对于几百台电脑的公司来说,简直是网管的噩梦。 DHCP (Dynamic Host Configuration Protocol,动态主机配置协议) 应运而生。它的作用很简单:自动给设备分配 IP、掩码、网关和 DNS。
一个最简单的场景:PC 通过交换机连接到 DHCP 服务器,请求“入网许可证”。
eNSP/EVE-NG 拓扑
(此处待补充真实模拟器拓扑截图)
1. DORA 过程:DHCP 的四步交互
当一台电脑连上网线并设置为“自动获取 IP”时,它会和 DHCP 服务器进行四次对话,我们称为 DORA 流程:
- Discover (发现)
- Offer (提供)
- Request (请求)
- Ack (确认)
💡 交互小结
在标准的 DHCP 首次获取 IP 过程中(DORA):
- 客户端 (Client):发送 2 个包 (Discover, Request),接收 2 个包 (Offer, Ack)。
- 服务器 (Server):接收 2 个包 (Discover, Request),发送 2 个包 (Offer, Ack)。
1.1 详解交互流程
DAD (Duplicate Address Detection) 地址冲突检测
在正式使用 IP 之前,客户端会利用 免费 ARP (Gratuitous ARP) 进行自我检测。
- 收到 Offer 后或配置静态 IP 时,发送一个 SIP=0.0.0.0 (或自己IP),DIP=自己IP 的 ARP 请求。
- 如果有人回应,说明 IP 冲突!发送 DHCP Decline 拒绝该 IP。
🔍 点击查看报文详情
*注:华为设备默认单播回复,部分厂商广播回复。
- ✅ 无人回应:IP 安全,发送 Request。
- ❌ 有人回应:IP 冲突!发送 Decline 拒绝该 IP。
🔍 点击查看报文详情
*为什么是广播?为了告诉其他 DHCP 服务器“我已经有主了,你们的 Offer 我不要了”。*
🔍 点击查看报文详情
🔍 点击查看报文详情
2. DHCP 的 8 种报文类型
除了最常见的 DORA 四种报文,DHCP 总共有 8 种报文类型,它们各司其职:
| 报文类型 | 作用 |
|---|---|
| DHCP Discover | 客户端请求 IP (广播) |
| DHCP Offer | 服务器响应 Offer (单播/广播) |
| DHCP Request | 客户端选择 IP 或请求续租 (广播/单播) |
| DHCP Ack | 服务器确认,IP 正式生效 |
| DHCP Nak | (Negative Ack) 服务器拒绝。通常是因为 IP 已过期或网段不对。客户端收到后会重新 Discover。 |
| DHCP Release | 客户端主动释放 IP (例如关机或手动 ipconfig /release) |
| DHCP Decline | 客户端检测到 IP 冲突 (DAD),拒绝使用该 IP,并通知服务器。 |
| DHCP Inform | 客户端已有 IP,仅请求更多信息 (如 DNS、WINS 等)。 |
2.1 补充:DHCP Option 的 TLV 结构
DHCP 的强大之处在于 Options 字段,它采用 TLV (Type-Length-Value) 格式,既简约又灵活。
- T (Type): 类型代码 (1 Byte),例如
53代表消息类型,1代表子网掩码。 - L (Length): 长度 (1 Byte),表示 Value 的长度。
- V (Value): 具体的值,例如
255.255.255.0。
示例:Option 43 (厂家自定义选项)
- Type: 43
- Length: 4
- Value: 1.2.3.4 (AC IP 地址)
3. 其他场景的交互流程 (More Scenarios)
DORA 只是最顺利的“初次见面”。在实际网络中,还有以下几种常见情况:
3.1 租期更新 (Renewal) - T1/T2 机制
IP 地址不是永久送给你的,是租给你的。默认租期 (Lease) 通常是 1 天 (24h)。
- T1 (50% 租期):12小时。客户端向服务器发送单播 Request 请求续租。
- 成功:租期重置为 24h。
- 失败:继续使用,直到 T2。
- T2 (87.5% 租期):21小时。客户端向网络发送广播 Request,试图联系任何一台 DHCP 服务器进行续租。
- 100% 租期:IP 失效,客户端必须停止使用该 IP,并重新开始 Discover 流程。
DORA获取IP
单播 Request
广播 Request
停用IP
- T1 (50% 租期):
- 动作:PC 向 Server 发送 单播 DHCP Request:“老哥,我能续租吗?”
🔍 点击查看 T1 续租报文详情
- 结果:Server 回复 DHCP ACK,租期刷新,重新计时。
- 动作:PC 向 Server 发送 单播 DHCP Request:“老哥,我能续租吗?”
- T2 (87.5% 租期):
- 动作:如果 T1 时 Server 没理我(可能挂了),等到 87.5% 时,PC 会改为 广播 DHCP Request:“原房东联系不上,有没有别的 DHCP 服务器能管管我?”
🔍 点击查看 T2 广播续租报文详情
- 结果:通常此时会联系上备用 Server 或者原 Server 恢复。
- 动作:如果 T1 时 Server 没理我(可能挂了),等到 87.5% 时,PC 会改为 广播 DHCP Request:“原房东联系不上,有没有别的 DHCP 服务器能管管我?”
- 租期到期 (100%):
- 动作:彻底没招了。PC 必须立即停止使用该 IP,并重新开始 DORA 流程。
3.2 客户端拒绝 IP (Decline) - 遇到“坏”IP
这种情况发生在 IP 冲突 时。服务器给的 IP 竟然已经有人在用了!
1. Server 分配
192.168.1.100 给 PC。2. PC 收到后,先发个 免费 ARP 探测一下。
3. 居然收到了 ARP 回复!说明局域网里有个 “非法占位者” 已经在用这个 IP 了。
4. PC 愤怒地发送 DHCP Decline 给 Server:“这 IP 有毒(冲突),我不要,换一个!”
5. PC 重新发送 Discover。
3.3 客户端主动释放 (Release) - 文明退房
当你输入 ipconfig /release 时,就是一次文明的“退房”操作。
- 动作:PC 发送 单播 DHCP Release 给 Server。
- 结果:Server 收到后,将该 IP 在数据库中标记为 Idle (空闲),可以立即分配给下一位客人。
- 注意:PC 关机时通常不会发送 Release(为了下次开机能快速拿到同一个 IP),服务器只能等租约自然过期。
3.4 补充:DHCP Inform - 我只要点“额外信息”
有时候,客户端已经通过手工配置了静态 IP 地址,但它还想知道一些网络参数(比如 DNS 服务器、WINS 服务器)。这时它就会发送 DHCP Inform 报文。
- 场景:静态 IP 用户需要自动获取 DNS。
- 动作:客户端发送 Inform 请求。
- 结果:服务器回复 Ack,带上请求的 Option 参数,但不分配 IP 地址。
4. DHCP 报文格式 (抓包必看)
DHCP 基于 UDP 协议,Server 端口 67,Client 端口 68。
1=Req, 2=Rep
1=Ethernet
6
Relay用
- Option 53 (Message Type): 标记这是 Discover 还是 Offer。
- Option 50 (Requested IP): 客户端想要哪个 IP。
- Option 54 (Server Identifier): 标记 Server 的 IP。
- Option 55 (Parameter Request List): 客户端想要哪些参数(掩码、网关、DNS...)。
- Option 43 (Vendor Specific): 厂商自定义选项(如 AC 地址)。