一、DHCP 的来时路
如今,无论连接公司 Wi-Fi 还是家庭网络,设备几乎都能"即插即用",很少有人手动配置IP、子网掩码、网关和 DNS。这种便利的背后,依赖的正是 DHCP(动态主机配置协议) 。而 DHCP 并非一蹴而就,它经历了 RARP → BOOTP → DHCP 三个阶段的演进。
早期网络规模小,手动配置尚可应付。但随着设备增多、移动性增强,手动分配 IP 变得极其繁琐。自动获取 IP 的技术因此应运而生。
1.1 RARP(逆地址解析协议)
RARP (Reverse Address Resolution Protocol,逆地址解析协议)是最早的解决方案。它工作在链路层,客户端广播自己的 MAC 地址,RARP 服务器单播回复对应的 IP 地址。
- 优势:解决了无盘站自动获取 IP 的基本问题。
- 劣势:① 只能获得 IP,无法提供掩码、网关、DNS;② 广播不可跨路由器,局限在单网段;③ 需要专用 RARP 服务器。
无盘工作站 是指没有本地硬盘的计算机,通过网络从远程服务器加载操作系统和运行数据,本地不保存任何信息。常见于学校计算机机房、网吧等场景。
1.2 BOOTP(引导协议)
为了弥补 RARP 的不足,BOOTP (Bootstrap Protocol,引导协议)被提出。它基于 UDP (客户端端口 68,服务器端口 67),引入 BOOTP 中继代理,允许请求跨越路由器。
基本流程:
- 客户端广播一个 BOOTP 请求报文(含自身 MAC 地址)。
- 同网段直接响应;跨网段由中继代理单播转发给服务器。
- 服务器根据请求中的 MAC 地址查找静态配置表,找到预绑定的 IP 地址及相关配置(掩码、网关、DNS 等),单播回复给客户端。
- 客户端收到后配置网络并启动。
优势:跨网段、信息丰富,广泛用于无盘工作站启动。
劣势 :采用 静态绑定(MAC → IP 预映射)。IP 分配后不回收,设备更换或离线时地址浪费,且维护成本高。
1.3 DHCP(动态主机配置协议)
BOOTP 的静态绑定在设备频繁变动、IP 资源紧张时显得笨重。DHCP (Dynamic Host Configuration Protocol,动态主机配置协议)在 BOOTP 基础上做了两项核心扩展:动态地址池 和 租约机制。
- 动态地址池:服务器维护一个可用 IP 地址池,客户端按需从中获取 IP,用后归还。
- 租约机制:每个分配的 IP 带有租期(如 24 小时),到期后自动回收,供其他设备使用,大幅提升 IP 利用率。
DHCP 兼容 BOOTP,通过 DORA 四步交互(Discover → Offer → Request → ACK)完成配置下发。如今,DHCP 已成为现代网络自动分配 IP 的事实标准。
二、DHCP协议报文详解
2.1 DHCP协议端口
DHCP报文承载于UDP之上,使用两个端口:服务器端67 ,客户端68。
- 客户端发送请求时源端口68、目的端口67;
- 服务器回复时源端口67、目的端口68。
2.2 DHCP 报文格式

DHCP报文格式继承自BOOTP,各字段如下:
- op :Operation,操作类型,1字节,1=请求,2=应答
- htype :Hardware Type,硬件地址类型,1字节,如1表示以太网
- hlen :Hardware Length,硬件地址长度 ,1字节,以太网为6,即 MAC 地址(6字节,48位)
- hops :中继跳数,1字节,客户端为0,每经过一个中继递增1,大于16则丢弃
- xid :Transaction ID,事务ID,4字节,客户端随机生成,用于客户端和服务器关联请求与应答
- secs :Seconds,启动时间,2字节,表示从客户端开始获得IP地址或IP地址续借后所经过的秒数
- flags :Flags,标志位,2字节,仅最高位有意义,其余填充0:
- BOOTP协议中保留未使用
- DHCP中:最高位为0 表示客户端请求服务器以单播 形式发送响应报文;最高位为1 表示客户端请求服务器以广播形式发送响应报文
- ciaddr :Client IP Address,客户端IP地址,4字节,若客户端已有IP则填写,否则为0.0.0.0
- yiaddr :Your IP Address,分配给客户端的IP地址,4字节,服务器分配的IP
- siaddr :Server IP Address,服务器IP地址,4字节,客户端获得启动配置信息的服务器的IP地址。
- giaddr :Gateway IP Address,网关IP地址 ,4字节。实际使用时,该字段由DHCP中继代理 填写(Relay agent IP address,值为中继代理在客户端所在子网的接口IP(即该子网的网关地址)。服务器根据此字段判断客户端所属网段,选择对应地址池分配IP,并将响应单播回此地址,由中继代理转发给客户端。
- chaddr :Client Hardware Address,客户端硬件地址,16字节,即MAC地址,与htype和hlen保持一致。
- sname :Server Name,服务器主机名,64字节,可选
- file :Boot File Name,启动文件名,128字节,可选,如果填写必须是一个以0结尾的字符串
- options :Options,选项字段,可变长度至少312字节,采用TLV(Type-Length-Value)格式,携带DHCP消息类型(Discover/Offer/Request/ACK等)、租约时间、子网掩码、默认网关、DNS服务器等核心配置。
2.3 DHCP Options字段详解
采用TLV(Type-Length-Value)格式
- Type:1字节,选项类型,取值范围为1~255。包括预定义选项和用户自定义选项。
- Length:1字节,Value 字段的长度(单位:字节)。
- Value:Length 字节,信息内容。
type取值如下:
- type=1:Subnet Mask,子网掩码。长度 4 字节,取值如
255.255.255.0。作用:客户端IP的子网掩码。 - type=3:Router,默认网关。长度 4×N 字节(每个 IP 占 4 字节 ),取值网关 IP 列表。作用:为客户端指定默认网关,列表中第一个 IP 作为主用网关,后续作为备用。
- type=6:Domain Name Server,DNS 服务器。长度 4×N 字节,取值 DNS IP 列表。作用:为客户端提供DNS服务器列表。
- type=12:Host Name,主机名。长度可变,取值主机名字符串。作用:客户端在 DISCOVER 或 REQUEST 中携带,告知服务器自己的主机名;服务器也可在 ACK 中指定主机名,用于动态 DNS 更新。
- type=15:Domain Name,域名。长度可变,取值域名字符串。作用 :告知客户端所属的 DNS 域名,客户端主机名与此域名拼接构成完整 FQDN(如
pc1.example.com)。 - type=26:Interface MTU,接口 MTU。长度 2 字节,取值 MTU 值(如
1500)。作用:覆盖客户端网卡默认 MTU,用于特定网络环境(如 PPPoE、VPN)避免分片和丢包。 - type=28:Broadcast Address,广播地址。长度 4 字节,取值广播 IP。作用 :告知客户端所在子网的广播地址(如
192.168.1.255),用于发送广播报文。 - type=33:Static Route,静态路由。长度 8×N 字节,取值目的网络 + 下一跳 IP。作用:为客户端下发静态路由条目,用于访问特定网络时走指定下一跳,而非默认网关。
- type=42:NTP Servers,NTP 服务器。长度 4×N 字节,取值 NTP IP 列表。作用:为客户端提供网络时间协议服务器地址,用于时钟同步。
- type=50:Requested IP Address,请求的 IP 地址。长度 4 字节,取值期望 IP。作用 :客户端在 DISCOVER 或 REQUEST 中携带此选项,向服务器请求优先分配某个特定 IP 地址。典型使用场景是客户端重启后希望继续使用之前的 IP(租约尚未过期时),服务器若同意且地址可用,将在 OFFER 和 ACK 中确认该地址;若地址已被占用或不可用,服务器可回应 NAK 或分配其他地址。客户端首次登录时此字段填
0.0.0.0,表示无特定偏好。 - type=51:IP Address Lease Time,IP 地址租约时间。长度 4 字节,取值租约秒数(如
86400= 24 小时)。作用 :服务器在 OFFER 和 ACK 中指定 IP 地址的有效使用期限。客户端收到后启动租约计时器,租约到期前必须续租,否则 IP 失效。取值为0xffffffff时表示永久租约。 - type=52:Option Overload,选项过载。长度 1 字节,取值 1/2/3。作用 :当 Options 字段空间不足时,指示后续选项存放至 DHCP 报文头部的
file字段(取值 1)、sname字段(取值 2)或两者均用(取值 3)。主要用于 PXE 等需要携带大量配置的场景。 - type=53:DHCP Message Type,DHCP 报文类型。长度 1 字节,取值 1~8。作用 :关键字段 ,标识 DHCP 报文类型。服务器和客户端根据此值判断当前处于 DORA 流程的哪一阶段,并执行对应的状态迁移逻辑。
- type=54:DHCP Server Identifier,DHCP 服务器标识符。长度 4 字节,取值服务器 IP。作用:服务器在 OFFER 中携带自己的 IP 地址作为标识符;客户端在 REQUEST 中回传此 IP,向网络中所有服务器明确宣告自己选定了哪一台。未选中的服务器收到 REQUEST 后检查此字段,若发现不是自己,便释放之前预分配的 IP 地址。
- type=55:Parameter Request List,参数请求列表。长度可变,取值 Type 列表。作用 :客户端在 DISCOVER 或 REQUEST 中携带,以选项代码列表的形式告知服务器自己需要哪些配置参数(如
1,3,6,15,51表示需要子网掩码、网关、DNS、域名、租约时间)。服务器在 OFFER 和 ACK 中根据此列表填充相应选项。 - type=56:Message,消息。长度可变,取值字符串。作用 :服务器在 DHCPNAK 等报文中携带,向客户端说明拒绝分配或续租的原因(如"租约已过期""地址池耗尽"等),便于客户端或管理员排查问题。
- type=57:Max DHCP Message Size,最大 DHCP 报文长度。长度 2 字节,取值字节数。作用:客户端在 DISCOVER 或 REQUEST 中声明自身能接收的 DHCP 报文最大长度(通常为 576 或 1500 字节)。服务器构造应答时不应超出此限制,避免报文被分片或丢弃。
- type=58:Renewal Time(T1),续租时间。长度 4 字节,取值秒数(通常为租约的 50% )。作用 :服务器在 OFFER/ACK 中指定客户端应在何时开始以单播 方式向原服务器发起续租请求。当租约时间过去 50% 时,客户端进入 RENEWING 状态,向原服务器单播发送 DHCPREQUEST 续租。若续租成功,租约计时器重置;若服务器无响应,客户端继续使用当前 IP,等待 T2 时刻。
- type=59:Rebinding Time(T2),重绑定时间。长度 4 字节,取值秒数(通常为租约的 87.5% )。作用 :服务器在 OFFER/ACK 中指定客户端应在何时开始以广播 方式向任意 DHCP 服务器寻求续租。当租约到达 T2 时刻而 T1 续租失败时,客户端进入 REBINDING 状态,广播发送 DHCPREQUEST,网络中任何 DHCP 服务器均可回应 ACK 或 NAK。若 T2 时刻过后仍未获得续租,租约到期后客户端必须停止使用该 IP,重新发起 DORA 流程。
- type=60:Vendor Class Identifier,厂商标识符。长度可变,取值厂商标识字符串。作用 :客户端在 DISCOVER 或 REQUEST 中携带,向服务器告知自己的厂商类型和设备型号(如
MSFT 5.0表示微软 Windows、Cisco AP c3700表示思科无线 AP)。服务器可根据此信息实现差异化策略,例如为特定厂商设备分配不同地址池、下发厂商专属配置。 - type=61:Client Identifier,客户端标识符。长度可变,取值类型 + MAC(如
01:xx:xx:xx:xx:xx:xx,其中01表示以太网硬件类型)。作用 :唯一标识客户端身份,是服务器进行 静态地址绑定 和 租约数据库索引 的主要依据。若客户端未携带 Option 61,服务器则使用报文头部的chaddr(MAC 地址)作为替代标识。 - type=66:TFTP Server Name,TFTP 服务器名称。长度可变,取值 TFTP 服务器名或 IP。作用 :为 PXE 网络启动指定 TFTP 服务器地址。客户端获取 IP 后,从该服务器下载引导文件,完成操作系统安装或网络引导。
- type=67:Bootfile Name,引导文件名。长度可变,取值引导文件名(如
pxelinux.0)。作用 :为 PXE 网络启动指定引导文件的完整路径和文件名。与 Option 66 配合使用,客户端从 TFTP 服务器下载此文件以启动操作系统安装流程。 - type=82:Relay Agent Information,中继代理信息。长度可变,取值子选项(如 Circuit ID、Remote ID)。作用 :由 DHCP 中继代理 (或启用 DHCP Snooping 的交换机)在转发客户端请求时插入,记录客户端的精确位置信息,包括接入端口、VLAN ID、交换机 MAC 地址等。服务器根据此信息实现精细化地址分配、安全审计以及配合 DHCP Snooping 绑定表防范 IP/MAC 欺骗攻击。
- type=119:Domain Search List,域搜索列表。长度可变,取值搜索域列表(压缩编码格式)。作用 :为客户端指定域名解析时的搜索顺序。例如列表为
eng.example.com、example.com,客户端访问主机server时,将依次尝试解析server.eng.example.com、server.example.com,简化内网资源访问。 - type=121:Classless Static Route,无类静态路由。长度可变,取值掩码长度 + 目的网络 + 下一跳。作用 :为客户端下发无类别域间路由的静态路由条目,支持任意掩码长度的网络,比 Option 33 更灵活精确。用于复杂网络环境中为不同目标网段指定不同网关。
- type=255:End,结束标记。长度 0,取值无。作用:标记 Options 字段结束。DHCP 报文接收方解析到 Type 255 时停止解析后续字节(后续为 Padding 填充数据),防止误解析无效内容。
三、DHCP 交互流程
DHCP 的运作核心是一套严谨的**C/S(客户端/服务器)**交互流程。
3.1 三类 DHCP 角色
DHCP 系统中存在三类关键角色:
- DHCP 客户端:发起请求、获取网络配置信息的主机(如 PC、手机、打印机等)。
- DHCP 服务器:负责从地址池中分配 IP 地址、下发配置参数,并维护所有客户端的租约状态。
- DHCP 中继代理:当客户端与服务器位于不同广播域时,负责在中间跨网段转发 DHCP 报文。
3.2 DHCP 流程的核心:Option 53
Option 53(DHCP Message Type) 是设置DHCP消息类型,因为它是驱动整个流程状态迁移的核心信令字段。
Option 53 取值与报文类型对应关系
- 1 -- DHCPDISCOVER :客户端广播寻找服务器
- 2 -- DHCPOFFER :服务器 响应发现请求默认单播 回复客户端;若 DISCOVER 中
flags广播位=1则广播 - 3 -- DHCPREQUEST :客户端 选择 Offer 时广播通告所有服务器;续租时单播至原服务器
- 4 -- DHCPDECLINE :客户端 检测到地址冲突时广播通告所有服务器
- 5 -- DHCPACK :服务器确认分配或续租成功,发送方式同对应的 OFFER(单播或广播)
- 6 -- DHCPNAK :服务器拒绝分配或续租请求,发送方式同对应的 OFFER(单播或广播)
- 7 -- DHCPRELEASE :客户端 主动释放地址时单播至原服务器
- 8 -- DHCPINFORM :客户端 已有 IP 地址时单播请求其他配置参数

3.3 DHCP流程:DORA
当 DHCP 客户端与服务器处于同一广播域时,双方直接通过广播/单播完成交互。一次完整的地址获取过程遵循标准的 DORA 四步流程:Discover → Offer → Request → Acknowledge。
1.发现:DISCOVER(Option 53 = 1)
客户端 启动时网络接口尚未配置有效 IP 地址,以 0.0.0.0 为源地址、255.255.255.255 为目的地址,在本地网络广播发送 DHCPDISCOVER 报文。报文中包含:
op字段 = 1(请求报文)- 随机生成的事务 ID(
xid) - 客户端 MAC 地址(
chaddr) - 请求的参数列表(Option 55)
- Option 53 = 1
网络中所有 DHCP 服务器均可接收此广播。

2. 提供:OFFER(Option 53 = 2)
服务器收到 DISCOVER 且地址池中有可用 IP 的 DHCP 服务器,将向客户端回应 DHCPOFFER 报文:
yiaddr:服务器为该客户端预分配的 IP 地址siaddr:PXE 引导服务器地址(若未配置则为 0.0.0.0)giaddr:0.0.0.0(同网段无中继)- Option 53 = 2
- Option 54:服务器标识符
- Option 51:租约时长
- Option 3、Option 6:网关、DNS 等配置参数
发送方式:默认采用 二层单播 (目的 MAC 为客户端 MAC,目的 IP 仍为 255.255.255.255)。若客户端在 DISCOVER 中将 flags 字段最高位置 1,则服务器改用 广播 方式回应。
客户端可能收到多台服务器的 OFFER,此时仅记录各提议,尚未绑定任何 IP。

3. 请求:REQUEST(Option 53 = 3)
客户端 从收到的 OFFER 中选择一个(通常是最先到达者),然后 再次广播 DHCPREQUEST 报文,目的在于:
- 向选定的服务器确认接受其提议的 IP 地址;
- 通知其他未选中服务器释放它们为该客户端预留的地址资源。
REQUEST 报文必须携带以下关键选项:
- Option 53 = 3
- Option 54 = 选定服务器的标识符
- 若为续租场景,则不携带 Option 54,且
ciaddr字段填充为当前使用中的 IP。
未选中的服务器收到此广播后,检查 Option 54 发现并非自身,便将预分配的地址释放回地址池。

4. 确认:ACK(Option 53 = 5)
选定服务器收到 REQUEST 后,验证 Option 54 指向自己且地址仍可用,回应 DHCPACK 报文:
yiaddr:最终确认分配的 IP 地址- Option 53 = 5
- 租约时间、网关、DNS 等配置参数(与 OFFER 中一致)
- 发送方式与对应的 OFFER 保持一致(单播或广播)
客户端收到 ACK 后执行以下动作:
- 正式将 IP 地址绑定至网络接口;
- 发送免费 ARP(Gratuitous ARP)探测该 IP 是否已被局域网内其他主机占用;
- 若探测无冲突,则进入 BOUND(已绑定) 状态,地址获取流程完成。

3.4 两种 DHCP 工作模式
1. 模式架构对比
根据客户端与服务器的网络位置关系,DHCP 分为两种工作模式:
- Server 模式 :客户端与服务器处于同一物理网段(同VLAN)。
- 部署特点 :DHCP 服务器可直接部署在接入交换机所在广播域内,也可由汇聚网关设备自身兼任 DHCP 服务器。
- 交互特点 :客户端发出的广播报文可直接到达服务器,双方直接通过广播/单播完成交互,无需中继转发。
-
Relay 模式 :客户端与服务器跨越多个子网 客户端与服务器跨越多个子网,服务器位于远端,客户端位于接入层 VLAN。
-
部署特点 :在客户端所在网段的汇聚网关 (路由器或三层交换机)上启用 DHCP 中继代理功能。
-
交互特点 :中继代理将客户端广播转换为单播 发往指定 DHCP 服务器,并在报文中插入
giaddr字段标识客户端所属网段;服务器根据giaddr分配对应地址池 IP 并通过中继回应客户端。

2. 模式流程对比
(1) Server 模式流程(DORA 四步)
- ① DHCPDISCOVER(Option 53 = 1):客户端广播寻找服务器。
- ② DHCPOFFER(Option 53 = 2):服务器单播/广播回应,提供预分配 IP。
- ③ DHCPREQUEST(Option 53 = 3):客户端广播确认选择,通知其他服务器释放资源。
- ④ DHCPACK(Option 53 = 5):服务器确认分配,租约生效。
(2)Relay 模式流程(DORA 四步)
- ①② DHCPDISCOVER(Option 53 = 1) :客户端广播发送 DISCOVER 报文 → 中继代理监听到广播后,将报文 单播转发 至预设的 DHCP 服务器,并在 giaddr 字段填入接收广播的接口 IP 地址。
- ③④ DHCPOFFER(Option 53 = 2) :DHCP 服务器根据报文中的 giaddr 判定客户端所属网段,从对应地址池分配 IP,并以 单播 方式将 OFFER 发送给中继代理 → 中继代理再将 OFFER 转发 至客户端所在子网(广播或单播)。
- ⑤⑥ DHCPREQUEST(Option 53 = 3) :客户端广播发送 REQUEST 报文 → 中继代理监听到广播后,再次将报文 单播转发 至 DHCP 服务器,giaddr 字段保持不变。
- ⑦⑧ DHCPACK(Option 53 = 5) :服务器以 单播 方式将 ACK 发送给中继代理 → 中继代理将 ACK 转发 至客户端所在子网(广播或单播),客户端收到后正式绑定 IP 地址。

四、DHCP 的其他功能
4.1 租约续租与重绑定
DHCP 分配的 IP 地址具有使用期限(租约,Lease)。为了继续使用该 IP 地址,客户端必须在租约到期前主动续租。若续租失败,则进入重绑定阶段,向网络中所有 DHCP 服务器寻求帮助。
1.两个时间点
|--------|----------------------|-------------|---------------|
| 时间点 | 定义 | 触发条件 | 发送方式 |
| T1 | 租约的 50%(续租时间) | 租约到达 50% 时长 | 单播 至原服务器 |
| T2 | 租约的 87.5%(重绑定时间) | T1 续租失败 | 广播 至所有服务器 |
示例:租约 8 天 → T1 = 第 4 天,T2 = 第 7 天。
2. 续租流程(T1)
当租约到达 T1 时刻,客户端进入 RENEWING 状态,向原服务器单播发起续租:
- ① DHCPREQUEST(Option 53 = 3) 。客户端以单播 方式向原服务器发送请求。报文特征:
ciaddr= 当前 IP,不携带 Option 54。 - ② 服务器响应
- DHCPACK(Option 53 = 5):续租成功,租约计时器重置。
- DHCPNAK(Option 53 = 6):续租被拒,客户端释放 IP,重新 DORA。
- 无响应:继续使用 IP,等待 T2。
3. 重绑定流程(T2)
若 T1 续租未获响应,租约到达 T2 时刻时,客户端进入 REBINDING 状态,广播寻求任意服务器续租:
- ① DHCPREQUEST(Option 53 = 3) 客户端以广播 方式发送请求。报文特征同 T1:
ciaddr= 当前 IP,不携带 Option 54。 - ② 任意服务器响应网络中任何 DHCP 服务器均可回应 DHCPACK 或 DHCPNAK。
- ③ 结果处理
- 收到 DHCPACK:租约重置,继续使用 IP。
- 收到 DHCPNAK 或无响应:租约到期后释放 IP,重新发起 DORA 流程。
4.2 地址释放
当客户端正常关机或主动放弃当前使用的 IP 地址时,会向原 DHCP 服务器发送地址释放报文,主动归还租约。
- 报文类型 :DHCPRELEASE(Option 53 = 7)
- 发送方式 :单播至原 DHCP 服务器
- 报文特征 :
ciaddr填充为待释放的 IP 地址,服务器地址通过 Option 54 或此前交互记录确定 - 服务器处理:收到 RELEASE 后,将该 IP 地址标记为可用,可分配给其他客户端
意义:主动释放机制避免了 IP 地址的无效占用,提升了地址池利用率,尤其在地址资源紧张的 IPv4 网络中尤为重要。
4.3 地址冲突检测
客户端收到 DHCPACK 正式绑定 IP 之前,必须验证该地址在本地网络中是否已被其他设备占用。这一过程通过 免费 ARP 实现。
- 检测机制:客户端发送免费 ARP 请求,目标 IP 为刚分配的 IP 地址。
- 无冲突情况:若在探测周期内未收到任何 ARP 响应,则地址可用,客户端正式启用该 IP。
- 有冲突情况:若收到 ARP 响应,表明地址已被占用,客户端执行以下操作:
- 广播 发送 DHCPDECLINE(Option 53 = 4) 报文,向所有 DHCP 服务器通告该地址冲突。
- 服务器收到 DECLINE 后,将该地址标记为不可用。
- 客户端重新发起 DORA 流程,申请新的 IP 地址。
意义:地址冲突检测机制确保 DHCP 分配的 IP 不会与网络中静态配置或残留的 IP 冲突,保障网络通信的稳定性。
4.4 仅获取配置信息:DHCPINFORM
当客户端已拥有 IP 地址(如手动静态配置),但仍希望从 DHCP 服务器统一获取其他网络配置参数时,可使用 DHCPINFORM 报文。
|------------------|----------------------------|----------------------------------|
| 对比项 | DHCPINFORM 模式 | 标准 DORA 模式 |
| 适用场景 | 客户端已有 IP | 客户端无 IP |
| 报文类型 | DHCPINFORM(Option 53 = 8) | DISCOVER → OFFER → REQUEST → ACK |
| 发送方式 | 单播至 DHCP 服务器 | 广播/单播混合 |
| 服务器回应 | DHCPACK,仅携带配置参数,不分配 IP | DHCPACK,携带 IP 及配置参数 |
| 典型携带的 Option | Option 55(请求参数列表) | Option 50(请求 IP)、Option 55 等 |
常见应用场景:
- 企业网络中,终端 IP 由其他系统固定分配,但网关、DNS、域名等配置由 DHCP 统一下发。
- VoIP 电话通过 LLDP-MED 获取语音 VLAN 后,使用 DHCPINFORM 获取 SIP 服务器等应用层配置。
4.5 PXE 网络启动支持
DHCP 协议扩展支持 PXE(Preboot eXecution Environment) 网络启动,允许无盘工作站或安装客户端在获取 IP 地址后,从网络引导并安装操作系统。
- BOOTP 最早为无盘工作站提供了静态 IP 分配和引导信息传递的原型,但缺乏动态管理能力;
- DHCP 作为 BOOTP 的增强版,引入了地址池、租约管理和丰富的 Options 扩展机制,为上层应用打开了大门;
- PXE 则充分利用了 DHCP 的可扩展性,通过在 DHCP 报文中携带特定 Options(66/67),实现了操作系统网络引导的标准化。
相关 Option 与字段:
|-------------------|------------------|------|-----------------------------|
| 类型 | 名称 | 长度 | 作用 |
| siaddr | 引导服务器 IP | 4 字节 | DHCP 报文头部字段,指定 TFTP 引导服务器地址 |
| type=66 | TFTP Server Name | 可变 | 指定 TFTP 服务器主机名或 IP 地址 |
| type=67 | Bootfile Name | 可变 | 指定引导文件名(如 pxelinux.0) |
PXE 工作流程:
- 客户端通过标准 DORA 流程获取 IP 地址。
- DHCP 服务器在 OFFER/ACK 报文中携带
siaddr、Option 66、Option 67 等 PXE 参数。 - 客户端从指定的 TFTP 服务器下载引导文件(Bootfile)。
- 客户端执行引导文件,启动操作系统安装或网络引导流程。
典型应用:数据中心自动化装机、无盘工作站、瘦客户机部署等场景。
4.6 高级中继:Option 82
在 DHCP Relay 模式下,中继代理通过 giaddr 字段告知服务器客户端所属子网。但仅凭子网信息无法实现按端口或区域的精细化管控。Option 82(Relay Agent Information Option) 定义于 RFC 3046,允许中继代理将客户端的精确物理位置信息附加到 DHCP 报文中,从而实现更高级的地址分配策略与安全审计。
说明 :中继模式交互过程已在 3.3 节「两种 DHCP 工作模式」中的 Relay 模式流程对比 中详细展示,此处不再重复。
Option 82 由接入交换机(第一跳中继代理 )执行(RFC 3046标准,其他厂商可能会增加多级中继处理),在 DHCP 报文的双向传递中遵循 "请求报文插入 → 应答报文剥离" 的对称机制。具体执行步骤如下:
- 客户端广播请求 :客户端发送 DHCP 请求报文(DISCOVER 或 REQUEST),此时报文中不包含 Option 82。
- 中继代理插入 Option 82 :接入交换机收到广播后,在报文 Options 区域尾部插入 Option 82。若报文中已存在 Option 82(多级中继场景),设备根据配置策略决定保留、替换或丢弃该选项。Option 82 通常包含两个子选项:
- 子选项 1(Circuit ID) :客户端接入的端口与 VLAN 信息,格式通常为
VLAN名+端口 - 子选项 2(Remote ID):接入交换机自身的标识,通常为 MAC 地址
- 子选项 1(Circuit ID) :客户端接入的端口与 VLAN 信息,格式通常为
- 服务器根据 Option 82 分配地址 :DHCP 服务器收到报文后,解析 Option 82 中的位置信息,根据预设策略从对应地址池分配 IP,并在应答报文(OFFER 或 ACK)中原样携带 Option 82。
- 中继代理剥离 Option 82 :接入交换机收到服务器应答后,剥离其中的 Option 82,再根据子选项中的物理端口信息将报文转发至对应客户端端口,完成交互。
Option 82 赋予了 DHCP 协议 位置感知能力 ,主要应用场景:
- 精细化地址分配:服务器根据端口信息为不同区域分配不同网段 IP。
- 安全事件溯源:通过 Option 82 记录快速定位异常 IP 对应的物理端口。
- 策略联动:与 802.1x 认证、AAA 等系统结合,实现基于位置的准入控制。
4.7 厂商自定义:Option 43
Option 43(Vendor Specific Information,厂商特定信息选项) 定义于 RFC 2132,是 DHCP 协议为各厂商预留的私有扩展字段。当标准 Option 无法满足特定设备(如无线 AP、IP 电话)的配置需求时,DHCP 服务器与客户端可通过 Option 43 交换厂商自定义的配置参数。
在无线网络部署、设备零配置开局及 VoIP 系统等场景中,Option 43 已成为实现异构设备即插即用、自动化运维的关键技术.
1. Option 43 的报文格式
Option 43 在 DHCP 报文中的结构遵循标准的 TLV(Type-Length-Value) 编码格式,其整体布局如下:
- Option Type :1 字节,固定为
0x2B(十进制 43),标识该选项为厂商特定信息。 - Option Length:1 字节,表示后续所有子选项内容的总字节长度。
- Option Value :可变长度,内部可嵌套一个或多个 子选项(Sub-Option) 。每个子选项同样采用 TLV 结构,每个子选项包含三个字段:
- Sub-option Type :1 字节,子选项类型码。不同厂商可自行定义类型值的含义。例如,华为设备在作为 DHCP 服务器为 AP 提供 AC 地址时,支持以下三种子选项类型:
0x01表示十六进制(HEX)格式的子选项,0x02表示 IPv4 地址格式的子选项,0x03表示 ASCII 字符串格式的子选项。 - Sub-option Length:1 字节,表示后续 Sub-option Value 字段的字节长度。
- Sub-option Value:可变长度,承载实际的厂商配置数据,具体编码格式由厂商自行定义。
- Sub-option Type :1 字节,子选项类型码。不同厂商可自行定义类型值的含义。例如,华为设备在作为 DHCP 服务器为 AP 提供 AC 地址时,支持以下三种子选项类型:

当 DHCP 客户端需要在请求中表达对 Option 43 的需求时,会在 Option 55(Parameter Request List) 中包含数值 43。DHCP 服务器收到携带此参数的请求报文后,若本地配置了对应的 Option 43 策略,则在应答报文(OFFER 或 ACK)中携带 Option 43,向客户端下发厂商特定信息。
2.与 Option 60 的配合的典型应用
Option 43 通常与 Option 60(Vendor Class Identifier) 配合使用:
- 客户端 在 DHCP 请求中携带 Option 60 ,声明自己的厂商类型(如 Cisco AP 携带
Cisco AP c3700)。 - DHCP 服务器解析 Option 60,查找匹配的 Option 43 策略,在应答报文中携带对应的私有配置。
- 客户端收到 Option 43 后,解析其中内容并完成后续配置流程。
场景一:无线 AP 发现 AC 控制器
当 Fit AP 与 AC 控制器跨越不同子网时,AP 无法通过二层广播发现 AC。此时 AP 在 DHCP 请求中携带 Option 60 声明自身厂商类型(如华为 AP 携带 Huawei AP),DHCP 服务器识别后,通过 Option 43 告知 AP 其所属 AC 的 IPv4 地址列表。AP 获取 AC 地址后,通过 CAPWAP 隧道与 AC 建立连接并完成注册上线。在此场景中,Option 43 的 Value 部分通常包含一个或多个子选项,每个子选项携带一个 AC 的 IP 地址。
场景二:ZTP 零配置开局中的设备标识传递
在 ZTP(Zero Touch Provisioning)开局场景下,网络设备(如交换机、路由器)作为 DHCP 客户端首次接入网络时,支持通过 Option 43 携带自身的 ESN(Equipment Serial Number,设备序列号) 发送给 DHCP 服务器。DHCP 服务器收到后,可根据客户端的 ESN 在数据库中查找预定义的规划,为其分配特定的 IPv4 地址及后续配置服务器 URL,实现设备即插即用、自动化部署。
场景三:IP 电话自动配置
IP 电话在 DHCP 请求中携带 Option 60 表明厂商身份,服务器通过 Option 43 下发语音 VLAN ID、TFTP 服务器地址等私有配置参数,使话机无需人工干预即可完成业务上线。
3.配置示例
以下为华为设备作为 DHCP 服务器时,为 AP 配置 Option 43 下发 AC 地址的示例:
bash
<Huawei> system-view
[Huawei] ip pool ap-pool
[Huawei-ip-pool-ap-pool] network 192.168.10.0 255.255.255.0
[Huawei-ip-pool-ap-pool] gateway-list 192.168.10.1
# 方式一:子选项类型 0x02,直接指定 IPv4 地址
[Huawei-ip-pool-ap-pool] option 43 sub-option 2 ip-address 10.1.1.100
# 方式二:子选项类型 0x03,使用 ASCII 字符串
[Huawei-ip-pool-ap-pool] option 43 sub-option 3 ascii 10.1.1.100
# 方式三:子选项类型 0x01,使用十六进制 HEX
[Huawei-ip-pool-ap-pool] option 43 hex 030C3139322E3136382E32322E31
五、DHCP 的安全防护:DHCP Snooping
DHCP 协议在设计之初以易用性和自动化管理为首要目标,基于 UDP 的无连接特性和广播通信方式,并未内置完善的安全认证机制,使其容易遭受以下三类典型攻击:
- DHCP 饿死攻击:攻击者伪造大量不同 MAC 地址的 DHCP 请求报文,持续向服务器申请 IP 地址。耗尽服务器地址池,导致合法客户端无法获取 IP。
- 仿冒 DHCP 服务器攻击:攻击者在网络中私自搭建 DHCP 服务器,抢先回应客户端请求。分发错误的网关、DNS 地址,实施流量劫持或中间人攻击。
- DHCP Flood 攻击:攻击者短时间内向服务器发送海量 DHCP 报文。消耗服务器 CPU 和内存资源,造成拒绝服务。
DHCP Snooping(DHCP 侦听) 是部署在接入层交换机上的二层安全功能,通过在客户端与 DHCP 服务器之间建立一道逻辑"防火墙",有效防范上述攻击。其核心机制包括信任端口划分、绑定表生成、报文限速及 Option 82 支持。
5.1 DHCP Snooping的两种端口角色
DHCP Snooping 将交换机端口划分为两类角色:
- 信任端口(Trusted Port):连接合法 DHCP 服务器或上行链路的端口。允许接收 DHCP 服务器发送的应答报文(OFFER、ACK、NAK 等)。
- 非信任端口(Untrusted Port) :连接客户端的端口,默认所有端口均为非信任端口。禁止从该端口接收 DHCP 服务器应答报文。
当网络中有人私接 DHCP 服务器时,其应答报文将从非信任端口进入交换机,DHCP Snooping 直接将其丢弃,从而切断恶意服务器与客户端的通信路径。
5.2 DHCP Snooping 绑定表
交换机在转发 DHCP 报文的过程中,通过侦听 DORA 交互自动提取关键信息,生成动态绑定表。每条绑定记录包含以下字段:
- IP 地址:服务器分配给客户端的地址
- MAC 地址:客户端的硬件地址
- VLAN ID:客户端所属 VLAN
- 端口号:客户端连接的交换机物理端口
- 租约时间:IP 地址的有效期限
绑定表是 DHCP Snooping 的核心数据基础,可用于以下安全联动功能:
- IP Source Guard(IP 源地址保护):基于绑定表过滤入口流量,仅允许源 IP 和源 MAC 与绑定表匹配的数据包通过,防止 IP 地址欺骗。
- Dynamic ARP Inspection(DAI,动态 ARP 检测):验证 ARP 报文中 IP-MAC 映射关系是否与绑定表一致,丢弃伪造的 ARP 报文,防范 ARP 欺骗攻击。
5.3 DHCP Snooping配置
以华为为例。更高级的功能可以参考厂家配置文档。
#1. 全局启用DHCP Snooping功能
dhcp snooping enable
#2.需要保护的VLAN的下启用
vlan 10
dhcp snooping enable
#3. 配置信任端口(DHCP服务器方向)。默认情况下,交换机的所有端口都是非信任端口
interface Gi0/0/1
dhcp snooping trusted