DHCP — 动态主机配置协议

自动分配 IP 的协议:应用层,UDP 67(服务端)/68(客户端),由 RFC 2131 定义,DORA 四步完成地址下发

1. 协议定位

项目信息
所属层应用层(Application Layer),但服务对象是网络层配置
英文全称Dynamic Host Configuration Protocol(动态主机配置协议)
主要 RFCRFC 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 解决了四件事:

  1. 自动分配地址:从地址池中挑一个未被占用的地址下发,避免人工冲突。
  2. 一次下发全套参数:不只是 IP,还包括子网掩码、默认网关、DNS 服务器、域名后缀、NTP 服务器、TFTP/PXE 引导文件等(都通过 Option 携带)。
  3. 租约回收复用:地址是"租"的不是"送"的,设备离线后租约到期即可回收给别人,地址利用率大幅提升。
  4. 跨网段服务: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
DNSDHCP 通过 Option 6 下发 DNS 服务器、Option 15 下发域名后缀;DDNS(RFC 2136)可让 DHCP 自动注册主机记录
BOOTPDHCP 的前身,报文格式相同;DHCP 是其超集
TFTP / PXEOption 66/67(或 siaddr/file 字段)下发引导服务器与引导文件,实现网络装机
DHCPv6(RFC 8415)IPv6 版本,端口改为 UDP 546(客户端)/547(服务端),用组播 ff02::1:2 而非广播

6. 本目录学习路线

  1. 01-原理与报文 — DORA 四步详解、报文字段逐个拆解、常用 Option 表、租约状态机与 T1/T2 续租、中继代理原理、时序图。
  2. 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(中继地址)三个字段混为一谈,排错时张冠李戴。