DHCP — 动态主机配置协议
自动分配 IP 的协议:应用层,UDP 67(服务端)/68(客户端),由 RFC 2131 定义,DORA 四步完成地址下发
Table of Contents
1. 协议定位
| 项目 | 信息 |
|---|---|
| 所属层 | 应用层(Application Layer),但服务对象是网络层配置 |
| 英文全称 | Dynamic Host Configuration Protocol(动态主机配置协议) |
| 主要 RFC | RFC 2131(DHCP 协议)、RFC 2132(DHCP 选项与 BOOTP 厂商扩展);RFC 3046(中继代理 Option 82);RFC 1542(BOOTP 中继);RFC 8415(DHCPv6);RFC 3927(APIPA / 链路本地地址) |
| 端口 | UDP 67(服务端 / 中继监听)、UDP 68(客户端监听) |
| 封装于 | UDP → IP → 以太网;初始阶段客户端无 IP,故用 0.0.0.0 → 255.255.255.255 广播 |
| 典型应用 | 办公/家庭网络自动上网、Wi-Fi 接入、虚拟机与云主机初始化、PXE 网络启动 |
2. 一句话理解
DHCP 是网络的"前台接待":新设备一进门就广播喊"谁能给我个地址",服务器登记后发一张有期限的门牌(租约),到期前要主动续期,走的时候可以交还。
生活化类比
DHCP 就像酒店前台:你拎包入住(新设备联网),不用自己挑房号,只管说"我要一间房",前台查空房后给你一张写有房号、楼层、早餐时间的房卡(IP、网关、DNS、租期),并且这张卡有时效,到期得续。退房(断开)就把房号腾给别人。
它也更像临时工牌:公司访客进门领一个当天有效的工牌,门禁、WiFi、打印机参数一次性发齐;工程师不用关心工牌编号怎么排,到点自动失效回收。
3. 它解决什么问题
为什么没有它,网络就"缺了一块":没有 DHCP,每一台手机、电脑、摄像头接入都得人手工填 IP、掩码、网关、DNS——设备一多立刻乱套,输错一个就上不了网,地址撞车更是家常便饭。DHCP 把"上网前最难也最烦的配置"自动化,让"插上网线就能用"成为可能。
手工为每台设备配置 IP、掩码、网关、DNS,在规模稍大的网络里立刻崩溃:容易输错、容易地址冲突、设备移动就要重配、地址回收全靠人记。DHCP 解决了四件事:
- 自动分配地址:从地址池中挑一个未被占用的地址下发,避免人工冲突。
- 一次下发全套参数:不只是 IP,还包括子网掩码、默认网关、DNS 服务器、域名后缀、NTP 服务器、TFTP/PXE 引导文件等(都通过 Option 携带)。
- 租约回收复用:地址是"租"的不是"送"的,设备离线后租约到期即可回收给别人,地址利用率大幅提升。
- 跨网段服务:DHCP 报文本是广播不能跨路由,中继代理(Relay Agent)把它单播转发给中心服务器,从而实现全网集中管理。
4. 核心特征
- 【DORA 四步】 DORA 四步:Discover(发现)→ Offer(提供)→ Request(请求)→ Ack(确认)。
- 【无 IP 也能通信(广播+UDP)】 基于广播 + UDP:客户端此时还没有 IP,只能用源
0.0.0.0、目的255.255.255.255广播;用xid(事务 ID)和chaddr(MAC)来区分是不是发给自己的。 - 【租约机制】 租约(Lease)机制:地址有有效期,客户端在 **T1(50% 租期)**开始续租,**T2(87.5% 租期)**开始广播重绑定,到期未续则释放。
- 【服务端有租约库】 服务端无状态到有状态:服务器需要维护"地址 ↔ MAC ↔ 到期时间"的租约数据库,这也是排查地址冲突的核心依据。
- 【兼容 BOOTP】 兼容 BOOTP:DHCP 复用 BOOTP 的报文格式,靠 Magic Cookie(99.130.83.99) 与 Option 53 区分类型。
- 【明文无认证】 无认证:报文明文且无身份校验,因此存在**私接 DHCP 服务器(Rogue DHCP)**与地址耗尽攻击,需要交换机 DHCP Snooping 防护。
5. 与其他协议的关系
| 相关协议 | 关系 |
|---|---|
| UDP | 承载层;选 UDP 是因为无连接、支持广播、开销小 |
| IP / 以太网 | DHCP 配置的正是 IP 层参数;报文以以太网广播帧发出 |
| ARP | 双向配合:服务器分配前可用 ICMP/ARP 探测地址是否被占用;客户端拿到地址后发 ARP Probe / 免费 ARP 检测冲突,冲突则发 DHCPDECLINE |
| DNS | DHCP 通过 Option 6 下发 DNS 服务器、Option 15 下发域名后缀;DDNS(RFC 2136)可让 DHCP 自动注册主机记录 |
| BOOTP | DHCP 的前身,报文格式相同;DHCP 是其超集 |
| TFTP / PXE | Option 66/67(或 siaddr/file 字段)下发引导服务器与引导文件,实现网络装机 |
| DHCPv6(RFC 8415) | IPv6 版本,端口改为 UDP 546(客户端)/547(服务端),用组播 ff02::1:2 而非广播 |
6. 本目录学习路线
- 01-原理与报文 — DORA 四步详解、报文字段逐个拆解、常用 Option 表、租约状态机与 T1/T2 续租、中继代理原理、时序图。
- 02-实战与排错 — Wireshark 过滤、
ipconfig/dhclient/nmcli实操、拿不到地址与 169.254 排查、地址冲突与私接服务器定位、与静态 IP 对比、面试题。
学习建议:抓一次开机上网的完整过程(Wireshark 过滤
dhcp后执行ipconfig /release && ipconfig /renew),对着 DORA 四个包逐字段看,DHCP 就通了大半。
初学者最常踩的坑:一是看到
169.254.x.x就以为是自己网卡坏,其实这是 APIPA——它恰恰说明"DHCP 彻底没要到地址",问题在链路、服务器、地址池或跨网段缺中继,而不是本机;二是以为电脑重启一定走完整四步 DORA,其实只要旧地址租约还在,重启会走 INIT-REBOOT 直接 Request→ACK 两包;三是把ciaddr(我现有的)、yiaddr(服务器给的)、giaddr(中继地址)三个字段混为一谈,排错时张冠李戴。