Skip to content

3.3 DHCP 工作原理 (Principle)

手动配置 IP 地址(静态 IP)虽然稳定,但对于几百台电脑的公司来说,简直是网管的噩梦。 DHCP (Dynamic Host Configuration Protocol,动态主机配置协议) 应运而生。它的作用很简单:自动给设备分配 IP、掩码、网关和 DNS

🌐 DHCP 基础网络环境拓扑 (模拟)
🗄️
DHCP Server
192.168.1.1/24
交换网络
💻
PC (Client)
自动获取中...

一个最简单的场景:PC 通过交换机连接到 DHCP 服务器,请求“入网许可证”。

eNSP/EVE-NG 拓扑

(此处待补充真实模拟器拓扑截图)

1. DORA 过程:DHCP 的四步交互

当一台电脑连上网线并设置为“自动获取 IP”时,它会和 DHCP 服务器进行四次对话,我们称为 DORA 流程:

  1. Discover (发现)
  2. Offer (提供)
  3. Request (请求)
  4. 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。
1. DHCP Discover (广播)
Client -> Server (0.0.0.0 -> 255.255.255.255)
📤 客户端发出 1 个包
PC 大喊:“有人在吗?我需要一个 IP!(我自己的 MAC 是 AA-AA)”
🔍 点击查看报文详情
Ethernet II Header
Src: PC_MACDst: FF:FF:FF:FF:FF:FF (Broadcast)
Internet Protocol Version 4
Src: 0.0.0.0Dst: 255.255.255.255
User Datagram Protocol
Src Port: 68 (Client)Dst Port: 67 (Server)
Bootstrap Protocol (Discover)
Message type: Boot Request (1)
Option: (53) DHCP Message Type (Discover)
Option: (55) Parameter Request List
2. DHCP Offer (单播/广播)
Server -> Client
📩 客户端收到 1 个包
Server 回复:“我在!我可以租给你 192.168.1.100,租期 24 小时,怎么样?”
*注:华为设备默认单播回复,部分厂商广播回复。
免费 ARP 探测 (Gratuitous ARP)
收到 Offer 后,谨慎的 PC 不会马上用,而是先发广播:“谁在用 192.168.1.100?
  • 无人回应:IP 安全,发送 Request。
  • 有人回应:IP 冲突!发送 Decline 拒绝该 IP。
🔍 点击查看报文详情
Ethernet II Header
Src: Server_MACDst: PC_MAC (Unicast)
Internet Protocol Version 4
Src: 192.168.1.1Dst: 192.168.1.100 (Yiaddr)
User Datagram Protocol
Src Port: 67 (Server)Dst Port: 68 (Client)
Bootstrap Protocol (Offer)
Message type: Boot Reply (2)
Your (client) IP address: 192.168.1.100 (Yiaddr)
Option: (53) DHCP Message Type (Offer)
Option: (54) DHCP Server Identifier (192.168.1.1)
Option: (51) IP Address Lease Time (1 day)
3. DHCP Request (广播)
Client -> Server (0.0.0.0 -> 255.255.255.255)
📤 客户端发出 1 个包
PC 大喊:“好的!我看中了这台 Server 给我的 192.168.1.100,我要用了!”
*为什么是广播?为了告诉其他 DHCP 服务器“我已经有主了,你们的 Offer 我不要了”。*
🔍 点击查看报文详情
Ethernet II Header
Src: PC_MACDst: FF:FF:FF:FF:FF:FF (Broadcast)
Internet Protocol Version 4
Src: 0.0.0.0Dst: 255.255.255.255
User Datagram Protocol
Src Port: 68 (Client)Dst Port: 67 (Server)
Bootstrap Protocol (Request)
Message type: Boot Request (1)
Option: (53) DHCP Message Type (Request)
Option: (50) Requested IP Address (192.168.1.100)
Option: (54) DHCP Server Identifier (192.168.1.1)
4. DHCP Ack (单播/广播)
Server -> Client
📩 客户端收到 1 个包
Server 回复:“Deal!正式生效。记住了,网关是 .1,DNS 是 8.8.8.8。”
🔍 点击查看报文详情
Ethernet II Header
Src: Server_MACDst: PC_MAC (Unicast)
Internet Protocol Version 4
Src: 192.168.1.1Dst: 192.168.1.100 (Yiaddr)
User Datagram Protocol
Src Port: 67 (Server)Dst Port: 68 (Client)
Bootstrap Protocol (Ack)
Message type: Boot Reply (2)
Your (client) IP address: 192.168.1.100 (Yiaddr)
Option: (53) DHCP Message Type (Ack)
Option: (3) Router (192.168.1.1)
Option: (6) Domain Name Server (8.8.8.8)

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 流程。
⏳ 续租时间轴
0%
DORA获取IP
50% (T1)
单播 Request
87.5% (T2)
广播 Request
100%
停用IP
  1. T1 (50% 租期)
    • 动作:PC 向 Server 发送 单播 DHCP Request:“老哥,我能续租吗?”
      🔍 点击查看 T1 续租报文详情
      Ethernet II Header
      Src: PC_MACDst: Server_MAC (Unicast)
      Internet Protocol Version 4
      Src: 192.168.1.100Dst: 192.168.1.1
      User Datagram Protocol
      Src Port: 68 (Client)Dst Port: 67 (Server)
      Bootstrap Protocol (Request)
      Message type: Boot Request (1)
      Client IP address: 192.168.1.100 (Ciaddr)
      Option: (53) DHCP Message Type (Request)
    • 结果:Server 回复 DHCP ACK,租期刷新,重新计时。
  2. T2 (87.5% 租期)
    • 动作:如果 T1 时 Server 没理我(可能挂了),等到 87.5% 时,PC 会改为 广播 DHCP Request:“原房东联系不上,有没有别的 DHCP 服务器能管管我?”
      🔍 点击查看 T2 广播续租报文详情
      Ethernet II Header
      Src: PC_MACDst: FF:FF:FF:FF:FF:FF (Broadcast)
      Internet Protocol Version 4
      Src: 192.168.1.100Dst: 255.255.255.255
      User Datagram Protocol
      Src Port: 68 (Client)Dst Port: 67 (Server)
      Bootstrap Protocol (Request)
      Message type: Boot Request (1)
      Client IP address: 192.168.1.100 (Ciaddr)
      Option: (53) DHCP Message Type (Request)
    • 结果:通常此时会联系上备用 Server 或者原 Server 恢复。
  3. 租期到期 (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

OpCode
1=Req, 2=Rep
HwType
1=Ethernet
HwLen
6
Hops
Relay用
Transaction ID (事务 ID) - 随机数,用于匹配请求/响应
Seconds
Flags (Broadcast bit)
Ciaddr (Client IP) - 续租时填
Yiaddr (Your IP) - Server 给你的 IP
Siaddr (Server IP) - 引导 Server IP
Giaddr (Gateway IP) - 中继代理 IP
Chaddr (Client Hardware Address) - 客户端 MAC
Options (最重要的字段)
  • 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 地址)。