网络协议之DHCP
网络协议之DHCP
概述
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议) 是一种用于自动分配IP地址及其他网络配置参数的网络协议,它是现代 TCP/IP 网络不可或缺的协议。它大大简化了网络管理,特别是在大型网络环境中,避免了手动为每台设备配置IP地址的繁琐工作,极大提升了网络部署与管理的效率。
📦 小贴士:在家庭网络中,你的无线路由器通常就内置了一个 DHCP 服务器,负责为手机、电脑等设备分配 IP 地址。
DHCP 的作用
DHCP 主要用于自动为客户端设备分配以下网络参数:
- IP 地址(IPv4 或 IPv6)
- 子网掩码(Subnet Mask)
- 默认网关(Default Gateway)
- DNS 服务器地址
- 其他可选参数(如 NTP 服务器、WINS 服务器、域名、租期等)
DHCP 的工作原理(以 IPv4 为例)
DHCP 使用 客户端-服务器(C/S)模型,通信基于 UDP 协议:
- 客户端 → 服务器:使用 UDP 端口 68
- 服务器 → 客户端:使用 UDP 端口 67
DHCP 的四个阶段(DORA 过程)
sequenceDiagram
participant Client
participant Server
Client->>Server: DHCPDISCOVER (广播)
Server-->>Client: DHCPOFFER (含IP建议)
Client->>Server: DHCPREQUEST (广播,确认)
Server-->>Client: DHCPACK (确认分配)
Note over Client,Server: 客户端配置IP并开始通信
客户端 (Client) DHCP 服务器 (Server)
| |
|---------- DHCPDISCOVER ------------>| (1) Discover
| (广播, src:0.0.0.0) |
| |
|<--------- DHCPOFFER ----------------| (2) Offer
| (单播/广播, 含IP建议) |
| |
|---------- DHCPREQUEST ------------->| (3) Request
| (广播, 确认接受某Offer) |
| |
|<--------- DHCPACK ------------------| (4) Acknowledge
| (确认IP分配,含配置参数) |
| |
+-------------------------------------+
客户端开始使用IP通信
Discover(发现)
- 客户端启动后,不知道自己的 IP 地址,也不知道 DHCP 服务器的位置。
- 它广播一个 DHCPDISCOVER 报文(源 IP 为 0.0.0.0,目标 IP 为 255.255.255.255)。
- 此报文包含客户端的 MAC 地址。
Offer(提供)
- 网络中的一个或多个 DHCP 服务器收到 Discover 报文后,各自从地址池中选择一个可用的 IP 地址。
- 每个服务器向客户端单播或广播一个 DHCPOFFER 报文,包含:
- 提供的 IP 地址
- 子网掩码
- 租期(Lease Time)
- 服务器标识等
Request(请求)
- 客户端通常选择第一个收到的 Offer(也可根据策略选择)。
- 客户端广播一个 DHCPREQUEST 报文,声明它接受了某个服务器的 Offer。
- 此广播也让其他 DHCP 服务器知道该客户端已做出选择,它们会收回之前提供的 IP。
Acknowledge(确认)
- 被选中的 DHCP 服务器收到 Request 后,发送 DHCPACK 报文,正式确认分配。
- 客户端收到 ACK 后,即可使用该 IP 地址进行通信。
- 如果服务器无法分配(如地址冲突),则发送 DHCPNAK(否定应答)。
⚠️ 注意:上述过程中的“广播”在某些网络环境下(如跨子网)可能无法到达服务器,此时需使用 DHCP 中继代理(Relay Agent)。
IP 地址租期与续租
DHCP 分配的 IP 地址是 临时的,具有 租期(Lease Time)。
- 租期过半时(T1):客户端尝试向原 DHCP 服务器 单播续租(发送 DHCPREQUEST)。
- 租期达 87.5% 时(T2):若 T1 续租失败,客户端 广播 DHCPREQUEST,尝试从任何可用 DHCP 服务器续租。
- 租期到期:若仍未续租成功,客户端必须停止使用该 IP,并重新发起 Discover 流程。
租期续租流程(简化)
客户端 DHCP 服务器
| |
|---(T1: 租期50%) DHCPREQUEST --->| (单播续租)
|<---------- DHCPACK -------------|
| |
|---(T2: 租期87.5%) DHCPREQUEST ->| (广播续租,若T1失败)
|<---------- DHCPACK -------------|
| |
✅ 若续租成功 → 继续使用 IP
❌ 若续租失败且租期到期 → 释放 IP,重新发起 Discover
DHCP 的部署方式
本地 DHCP 服务器
- 通常部署在路由器、专用服务器(如 Windows Server、Linux 上的
isc-dhcp-server
)。 - 适用于单一子网。
- 通常部署在路由器、专用服务器(如 Windows Server、Linux 上的
DHCP 中继代理(Relay Agent)
- 当客户端与 DHCP 服务器不在同一子网时,需要中继代理(通常由三层交换机或路由器充当)。
- 中继代理将客户端的广播请求转换为单播,转发给远程 DHCP 服务器。
- 使用 Option 82 可携带客户端所在子网信息,帮助服务器正确分配地址。
跨子网场景(含 DHCP 中继代理)
客户端 路由器/交换机 DHCP 服务器
| | |
|---Discover--->| (广播) |
| |---Relay转发------->| (单播,带Option 82)
| |<--Offer------------|
|<--Offer-------| |
|---Request---->| |
| |---Relay转发------->|
| |<--ACK--------------|
|<--ACK---------| |
中继代理(Relay Agent)将广播转为单播,并插入 Option 82(含客户端所在子网信息)
DHCP 与 IPv6
IPv6 中也支持 DHCP,称为 DHCPv6,但 IPv6 还支持 无状态地址自动配置(SLAAC),因此 DHCPv6 并非必需。
- 有状态 DHCPv6:分配完整 IP 地址和其他参数。
- 无状态 DHCPv6:仅提供 DNS 等额外信息,IP 由 SLAAC 生成。
常用工具及命令(以 Windows 和 Linux 为例)
Windows
ipconfig /release # 释放当前 IP
ipconfig /renew # 重新获取 IP
ipconfig /all # 查看 DHCP 服务器、租期等信息
Linux
使用 dhclient
(常用的dhcp客户端):
sudo dhclient -r eth0 # 释放 eth0 的 IP
sudo dhclient eth0 # 重新获取 IP
cat /var/lib/dhcp/dhclient.leases # 查看租约信息
使用udhcpc
(嵌入式常用的轻量dhcp客户端):
udhcpc -i wlan0
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DD'Notes!
评论