18.即插即用网络的基石:DHCP协议深度解析

一、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 中继代理,允许请求跨越路由器。

基本流程

  1. 客户端广播一个 BOOTP 请求报文(含自身 MAC 地址)。
  2. 同网段直接响应;跨网段由中继代理单播转发给服务器。
  3. 服务器根据请求中的 MAC 地址查找静态配置表,找到预绑定的 IP 地址及相关配置(掩码、网关、DNS 等),单播回复给客户端。
  4. 客户端收到后配置网络并启动。

优势:跨网段、信息丰富,广泛用于无盘工作站启动。

劣势 :采用 静态绑定(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,各字段如下:

  • opOperation,操作类型,1字节,1=请求,2=应答
  • htypeHardware Type,硬件地址类型,1字节,如1表示以太网
  • hlenHardware Length,硬件地址长度 ,1字节,以太网为6,即 MAC 地址(6字节,48位)
  • hops中继跳数,1字节,客户端为0,每经过一个中继递增1,大于16则丢弃
  • xidTransaction ID,事务ID,4字节,客户端随机生成,用于客户端和服务器关联请求与应答
  • secsSeconds,启动时间,2字节,表示从客户端开始获得IP地址或IP地址续借后所经过的秒数
  • flagsFlags,标志位,2字节,仅最高位有意义,其余填充0:
  • BOOTP协议中保留未使用
  • DHCP中:最高位为0 表示客户端请求服务器以单播 形式发送响应报文;最高位为1 表示客户端请求服务器以广播形式发送响应报文
  • ciaddrClient IP Address,客户端IP地址,4字节,若客户端已有IP则填写,否则为0.0.0.0
  • yiaddrYour IP Address,分配给客户端的IP地址,4字节,服务器分配的IP
  • siaddrServer IP Address,服务器IP地址,4字节,客户端获得启动配置信息的服务器的IP地址。
  • giaddrGateway IP Address,网关IP地址 ,4字节。实际使用时,该字段由DHCP中继代理 填写(Relay agent IP address,值为中继代理在客户端所在子网的接口IP(即该子网的网关地址)。服务器根据此字段判断客户端所属网段,选择对应地址池分配IP,并将响应单播回此地址,由中继代理转发给客户端。
  • chaddrClient Hardware Address,客户端硬件地址,16字节,即MAC地址,与htype和hlen保持一致。
  • snameServer Name,服务器主机名,64字节,可选
  • fileBoot File Name,启动文件名,128字节,可选,如果填写必须是一个以0结尾的字符串
  • optionsOptions,选项字段,可变长度至少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。作用 :客户端在 DISCOVERREQUEST 中携带此选项,向服务器请求优先分配某个特定 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 列表。作用 :客户端在 DISCOVERREQUEST 中携带,以选项代码列表的形式告知服务器自己需要哪些配置参数(如 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.comexample.com,客户端访问主机 server 时,将依次尝试解析 server.eng.example.comserver.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 报文,目的在于:

  1. 向选定的服务器确认接受其提议的 IP 地址;
  2. 通知其他未选中服务器释放它们为该客户端预留的地址资源。

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 后执行以下动作:

  1. 正式将 IP 地址绑定至网络接口;
  2. 发送免费 ARP(Gratuitous ARP)探测该 IP 是否已被局域网内其他主机占用;
  3. 若探测无冲突,则进入 BOUND(已绑定) 状态,地址获取流程完成。

3.4 两种 DHCP 工作模式

1. 模式架构对比

根据客户端与服务器的网络位置关系,DHCP 分为两种工作模式:

  • Server 模式 :客户端与服务器处于同一物理网段(同VLAN)
  • 部署特点 :DHCP 服务器可直接部署在接入交换机所在广播域内,也可由汇聚网关设备自身兼任 DHCP 服务器
  • 交互特点客户端发出的广播报文可直接到达服务器,双方直接通过广播/单播完成交互,无需中继转发。
  • Relay 模式 :客户端与服务器跨越多个子网 客户端与服务器跨越多个子网,服务器位于远端,客户端位于接入层 VLAN。

  • 部署特点 :在客户端所在网段的汇聚网关 (路由器或三层交换机)上启用 DHCP 中继代理功能。

  • 交互特点 :中继代理将客户端广播转换为单播 发往指定 DHCP 服务器,并在报文中插入 giaddr 字段标识客户端所属网段;服务器根据 giaddr 分配对应地址池 IP 并通过中继回应客户端。

2. 模式流程对比

(1) Server 模式流程(DORA 四步)

  1. ① DHCPDISCOVER(Option 53 = 1):客户端广播寻找服务器。
  2. ② DHCPOFFER(Option 53 = 2):服务器单播/广播回应,提供预分配 IP。
  3. ③ DHCPREQUEST(Option 53 = 3):客户端广播确认选择,通知其他服务器释放资源。
  4. ④ DHCPACK(Option 53 = 5):服务器确认分配,租约生效。

(2)Relay 模式流程(DORA 四步)

  1. ①② DHCPDISCOVER(Option 53 = 1) :客户端广播发送 DISCOVER 报文 → 中继代理监听到广播后,将报文 单播转发 至预设的 DHCP 服务器,并在 giaddr 字段填入接收广播的接口 IP 地址。
  2. ③④ DHCPOFFER(Option 53 = 2) :DHCP 服务器根据报文中的 giaddr 判定客户端所属网段,从对应地址池分配 IP,并以 单播 方式将 OFFER 发送给中继代理 → 中继代理再将 OFFER 转发 至客户端所在子网(广播或单播)。
  3. ⑤⑥ DHCPREQUEST(Option 53 = 3) :客户端广播发送 REQUEST 报文 → 中继代理监听到广播后,再次将报文 单播转发 至 DHCP 服务器,giaddr 字段保持不变。
  4. ⑦⑧ 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 响应,表明地址已被占用,客户端执行以下操作:
  1. 广播 发送 DHCPDECLINE(Option 53 = 4) 报文,向所有 DHCP 服务器通告该地址冲突。
  2. 服务器收到 DECLINE 后,将该地址标记为不可用。
  3. 客户端重新发起 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 地址后,从网络引导并安装操作系统。

  1. BOOTP 最早为无盘工作站提供了静态 IP 分配和引导信息传递的原型,但缺乏动态管理能力;
  2. DHCP 作为 BOOTP 的增强版,引入了地址池、租约管理和丰富的 Options 扩展机制,为上层应用打开了大门;
  3. 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 工作流程

  1. 客户端通过标准 DORA 流程获取 IP 地址。
  2. DHCP 服务器在 OFFER/ACK 报文中携带 siaddr、Option 66、Option 67 等 PXE 参数。
  3. 客户端从指定的 TFTP 服务器下载引导文件(Bootfile)。
  4. 客户端执行引导文件,启动操作系统安装或网络引导流程。

典型应用:数据中心自动化装机、无盘工作站、瘦客户机部署等场景。

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 报文的双向传递中遵循 "请求报文插入 → 应答报文剥离" 的对称机制。具体执行步骤如下:

  1. 客户端广播请求 :客户端发送 DHCP 请求报文(DISCOVER 或 REQUEST),此时报文中不包含 Option 82。
  2. 中继代理插入 Option 82 :接入交换机收到广播后,在报文 Options 区域尾部插入 Option 82。若报文中已存在 Option 82(多级中继场景),设备根据配置策略决定保留、替换或丢弃该选项。Option 82 通常包含两个子选项:
    1. 子选项 1(Circuit ID) :客户端接入的端口与 VLAN 信息,格式通常为 VLAN名+端口
    2. 子选项 2(Remote ID):接入交换机自身的标识,通常为 MAC 地址
  3. 服务器根据 Option 82 分配地址 :DHCP 服务器收到报文后,解析 Option 82 中的位置信息,根据预设策略从对应地址池分配 IP,并在应答报文(OFFER 或 ACK)中原样携带 Option 82。
  4. 中继代理剥离 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:可变长度,承载实际的厂商配置数据,具体编码格式由厂商自行定义。

当 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) 配合使用:

  1. 客户端 在 DHCP 请求中携带 Option 60 ,声明自己的厂商类型(如 Cisco AP 携带 Cisco AP c3700)。
  2. DHCP 服务器解析 Option 60,查找匹配的 Option 43 策略,在应答报文中携带对应的私有配置。
  3. 客户端收到 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 的无连接特性和广播通信方式,并未内置完善的安全认证机制,使其容易遭受以下三类典型攻击:

  1. DHCP 饿死攻击:攻击者伪造大量不同 MAC 地址的 DHCP 请求报文,持续向服务器申请 IP 地址。耗尽服务器地址池,导致合法客户端无法获取 IP。
  2. 仿冒 DHCP 服务器攻击:攻击者在网络中私自搭建 DHCP 服务器,抢先回应客户端请求。分发错误的网关、DNS 地址,实施流量劫持或中间人攻击。
  3. 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 
相关推荐
牛奶咖啡131 个月前
DevOps自动化运维实践_Legacy Boot与UEFI Boot网络启动(PXE)的原理解析
运维·devops·dhcp·pxe·tftp·uefi boot网络启动原理·legacy boot启动原理
牛奶咖啡131 个月前
基于Cobbler的系统自动化安装部署——原理
运维·自动化·dhcp·pxe·cobbler·tftp·自动应答配置文件种类
雨洛lhw2 个月前
基于 FPGA 的主机 IP 自动配置方案设计
udp·mac·ip·fpga·dhcp
晚风吹人醒.3 个月前
YUM仓库部署+PXE远程部署+ks无人值守,安装配置全流程讲解与展示
linux·运维·yum·dhcp·无人值守·tftp·ks
小小ken3 个月前
ubuntu添加新网卡时,无法自动获取IP原因及解决办法
linux·网络·tcp/ip·ubuntu·dhcp
欢乐熊嵌入式编程4 个月前
IoT 场景中的 DHCP、ARP、ICMP 到底在干嘛?
物联网·wifi·dhcp·iot wifi
wusam4 个月前
计算机网络综合实验:中小型企业网络组网与配置仿真实验
计算机网络·vlan·dhcp·独臂路由
赖small强5 个月前
【Linux 网络基础】Linux 平台 DHCP 运作原理与握手过程详解
linux·网络·dhcp
野奔在山外的猫6 个月前
【文档】搭建 DHCP 服务器
dhcp