← 网络基础学习第 9 / 55 章基础35 分钟

模块一 · 应用层

DHCP:设备怎么自动拿到 IP 地址

一台使用自动配置的IPv4电脑接入网络后,地址、子网掩码以及可能需要的网关、DNS怎样获得?先认识DHCP与链路本地地址,后续《IP地址与子网划分》再系统展开地址和子网的关系。

本章要解决的问题:一台使用自动配置的IPv4电脑接入网络后,地址、子网掩码以及可能需要的网关、DNS怎样获得?先认识DHCP与链路本地地址,后续《IP地址与子网划分》再系统展开地址和子网的关系。

本章的证据来源:历史实测记录(各接口的 DHCP 状态、租约起止时间)。协议流程出自 RFC 2131;自动私有地址(APIPA)出自 RFC 3927。

先从一个例子理解概念

新电脑接入网络时,你没有逐项填写IP和网关,它仍能得到配置。DHCP就是让设备自动申请这些参数的机制。

自动申请配置:DHCP

DHCP(动态主机配置协议)让客户端向服务器申请地址及其他网络参数。电脑是申请者,路由器或专门服务器可以提供配置。

借用地址有期限:租约

服务器许可某地址使用一段时间,叫租约。继续申请延长叫续租,期限和续租时间应按实际配置解释。

先发现,再选择:DORA

DORA是Discover、Offer、Request、ACK四步的记忆名:发现服务器、收到候选配置、请求所选配置、得到确认。续租不是每次都重新走完整四步。

只够本地交流的地址:APIPA

Windows未获得DHCP地址时可采用IPv4链路本地地址,这种自动机制常叫APIPA。169.254段可用于本地链路,不能据此宣布整台电脑所有网络都坏了。

下面再用这些概念看原理、命令和结果。规范与官方资料列在本章末尾,类比只帮助理解,不代替协议规则。

手工配置的四个参数

一台设备要能上网,至少需要知道四个东西:

参数回答的问题历史实测记录值
IP 地址我是谁192.168.31.215
子网掩码这个网络有多大255.255.255.0(/24)
默认网关出这个网络先找谁192.168.31.1
DNS 服务器域名找谁翻译192.168.31.1

手工配一台电脑还行。 但一个办公室几百台设备、还有不断有人带着笔记本进进出出 —— 手工配置根本不可能维护。

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)就是来解决这件事的:让设备接入网络时自动申请到这四个参数。

DORA:四步拿到地址

DHCP 的交互过程由四个步骤组成,首字母缩写成 DORA:

① Discover  (发现)  客户端 → 广播 :「有 DHCP 服务器吗?我需要一个地址」
② Offer     (提供)  服务器 → 客户端:「我这里有个 192.168.31.215 可以给你」
③ Request   (请求)  客户端 → 广播 :「我要那个 192.168.31.215」
④ Ack       (确认)  服务器 → 客户端:「确认,租给你了,租期 12 小时」

为什么第 ① 步必须广播

因为客户端此刻还没有 IP 地址 —— 它连"自己是谁"都不知道,没法单播。所以只能对着整个网段喊一嗓子。

同理,第 ③ 步也要广播。为什么?因为可能有多台 DHCP 服务器(比如网络里混进了一台私接的),客户端的"我要这个地址"要广播给所有服务器听,让被选择的服务器确认租约、其他提供Offer的服务器撤回候选分配。

实测:本机的 DHCP 租约

示例powershell
Get-NetIPInterface -AddressFamily IPv4 | Select-Object InterfaceAlias, Dhcp, ConnectionState
Get-CimInstance Win32_NetworkAdapterConfiguration | Where-Object IPEnabled

实测结果:

接口DHCP说明
WLANEnabled从路由器自动获取
FlClashDisabled代理软件自己设定(虚拟网卡)
vEthernet (WSL)DisabledHyper-V 自己设定
LoopbackDisabled回环接口本来就不需要
以太网 / 以太网 3 / 蓝牙 / 本地连接*9 / *10 / HeysocksEnabled但未连接

WLAN 的租约详情(实测):

DHCPServer        : 192.168.31.1
DHCPLeaseObtained : 2026/10/12 21:16:17
DHCPLeaseExpires  : 2026/10/13 09:16:17

租期 = 21:16:17 → 次日 09:16:17 = 正好 12 小时。

而且注意 DHCPServer = 192.168.31.1 —— 和默认网关是同一个地址。这是家用网络的典型做法:路由器一个人扮演了网关、DHCP 服务器、DNS 转发器三个角色。

收伏笔:DHCP 失败会怎样

《IP 地址与子网划分》留下了一个问题:

现在可以完整解释了。 看上面那张表:这 6 个接口的 DHCP 状态都是 Enabled(已启用),但连接状态是 Disconnected(未连接)。

也就是说:

接口开着 → 开机时发 DHCP Discover 请求
         → 但是没插网线(或者没有 DHCP 服务器响应)
         → 等了很久,一直没人回 Offer
         → 但系统不能让接口"没有地址"(很多程序会因此出错)
         → 于是自己从 169.254.0.0/16 里随机挑一个用上

这个机制叫 APIPA(Automatic Private IP Addressing,自动私有 IP 寻址),规定在 RFC 3927 里,那个网段叫链路本地地址。

APIPA 地址能做什么、不能做什么

能力
能同一个网段内、都拿到 APIPA 地址的设备可以互相通信
不能以该链路本地源/目的地址跨路由器——这是协议范围限制
不能直接以该链路本地地址在公共互联网路由;其他接口或协议栈可能仍可上网
不能保证唯一性——地址是随机挑的,理论上可能撞车(所以协议里有冲突检测)

为什么要"租约",而不是永久分配

DHCP 分配的地址是有期限的,叫租约(lease)。历史实测记录是 12 小时。

为什么要有期限? 因为设备会离开。

假设一个办公室有 200 个工位、300 台设备(有人带笔记本、手机)。如果地址一分配就永久占用,那么设备走了地址也不释放,很快地址池就耗尽了,新来的设备拿不到地址。

租约机制让地址可以回收:设备长时间不续租(说明它走了),地址就还给池子。

续租是怎么做的? 客户端依据T1/T2进入续租和重新绑定;服务器可指定这些时间,未指定时默认采用下列比例:

时间点动作
默认50%(T1)向原服务器单播请求续租,可继续重试
默认87.5%(T2)未续租成功时进入重新绑定,广播寻找服务器;不是期间只试一次
租期到 100%停止使用这个地址,重新走 DORA

本机 12 小时的租约,意味着大约 6 小时后会开始尝试续租。 而续租通常是静默完成的 —— 你完全感觉不到。这也是为什么"电脑用久了 IP 会变"这件事在同一个网络里其实不常发生(只要按时续租,地址就会一直保留)。

DHCP 中继:广播过不了路由器

DHCP 的前两步靠广播。而《交换机》那一章讲过:广播不能跨路由器(路由器是三层设备,隔开广播域)。

所以一个企业网络如果有 20 个网段,难道是每个网段放一台 DHCP 服务器?

不用。 用 DHCP 中继代理(DHCP Relay):

客户端广播 Discover
  → 本网段的中继代理收到(它知道 DHCP 服务器在哪)
  → 中继代理把这个请求【单播】转发给远端的 DHCP 服务器
  → 服务器分配地址,把应答交给中继代理
  → 中继代理转发回客户端

中继代理解决的核心问题是"广播不能跨网段,但 DHCP 必须跨网段"。 它同时还要告诉服务器"这个请求来自哪个网段",否则服务器不知道该从哪个地址池里取地址(这一点很关键)。

安全与常见故障

Rogue DHCP:私接的 DHCP 服务器

这是局域网里一个真实的攻击手段:攻击者在网络里插一台自己控制的设备,跑一个 DHCP 服务,然后抢在真服务器之前响应客户端的 Discover。

结果是客户端会拿到:

  • 一个错误的 IP 地址
  • 一个指向攻击者的默认网关 ← 关键
  • 一个指向攻击者的 DNS 服务器

于是受害者的所有流量都经过攻击者的机器 —— 这就是 DHCP 层面的中间人攻击,比《链路层和局域网》模块讲的 ARP 欺骗影响面更大(因为它能影响新接入的设备)。

防御:交换机上的 DHCP Snooping 功能,只允许信任的端口转发 DHCP 应答。

常见故障对照表

现象可能原因
地址是 169.254.x.xDHCP 拿不到地址(网线、端口、服务器、地址池耗尽)
拿到了地址但上不了网网关或 DNS 给错了(可能是 Rogue DHCP)
系统提示"IP 地址冲突"有人手工配了地址池里的地址,或者 APIPA 撞车
时好时坏地址池接近耗尽,或者有多台 DHCP 服务器在抢答

常见误解

误解一:"DHCP 分配的是固定的 IP 地址"

是租的,有期限。 历史实测记录租期 12 小时。不过实践中因为会按时续租,同一台设备在同一个网络里通常会长期保持同一个地址 —— 所以感觉像"固定的"。要真正固定,需要在 DHCP 服务器上做"地址保留"绑定。

误解二:"169.254 开头的地址说明网卡坏了"

它不证明网卡坏了,也不证明网卡和驱动工作正常。地址可由协议栈生成或保留;仍要检查链路状态、驱动、DHCP报文及服务器。

误解三:"APIPA 地址也能正常上网,只是慢一点"

不能直接以该IPv4链路本地地址跨路由器通信,但链路本地通信可用,整机也可能通过另一网卡、IPv6或代理获得访问能力。

误解四:"DHCP 用 TCP,因为要保证可靠"

用 UDP。 根本原因是客户端在拿到地址之前没有 IP,无法建立 TCP 连接(三次握手需要双方都有地址)。可靠性由 DHCP 自己的重传机制解决(客户端会重复广播 Discover)。

本章小结

结论类型
DHCP 自动分配 IP、掩码、网关、DNS 四个参数标准
流程为 DORA:Discover(广播)→ Offer → Request(广播)→ Ack标准
第 ① 步必须广播,因为客户端此时还没有 IP 地址标准
DHCP 使用 UDP,客户端 68 端口、服务器 67 端口标准
实测:本机 WLAN 的 DHCP 服务器为 192.168.31.1,租期正好 12 小时实测
实测:本机 6 个接口 DHCP 已启用但未连接,因此拿到 169.254.x.x实测
169.254.0.0/16 是 APIPA 链路本地地址,规定于 RFC 3927标准
APIPA 地址无法跨路由器、没有网关和 DNS,等于不能上网标准
租约让地址可以回收;客户端在 50% 和 87.5% 租期时尝试续租标准
广播不能跨路由器,所以大网络需要 DHCP 中继代理标准
Rogue DHCP 可把网关指向攻击者,实现比 ARP 欺骗影响面更大的劫持标准

自测题

8 题 · 先自己答,再展开对照

  1. 一台新电脑插上网线后什么都没配就能上网。它需要的四个参数分别是什么?谁给的?
    IP 地址、子网掩码、默认网关、DNS 服务器(历史实测记录分别是 192.168.31.215、255.255.255.0、192.168.31.1、192.168.31.1)。这四样由网络里的 DHCP 服务器分配 —— 家用场景下通常就是路由器(历史实测记录 DHCPServer 和默认网关是同一个地址 192.168.31.1)。
  2. DHCP 的 DORA 四步分别是什么?哪几步是广播,为什么?
    典型首次分配是Discover、Offer、Request、ACK;Discover与选Offer后的Request通常广播,Offer/ACK可因广播位、客户端状态或中继而不同。续租时的Request可单播,不是所有DHCP过程都固定广播。
  3. 为什么 DHCP 用 UDP 而不是 TCP?
    因为客户端在拿到地址之前根本没有 IP,无法建立 TCP 连接。 TCP 的三次握手要求双方都有 IP 地址和端口,而 DHCP 要解决的恰恰是"还没有地址"这个状态 —— 先天条件不允许。所以只能用无连接的 UDP(客户端 68 端口、服务器 67 端口),可靠性靠客户端自己重复广播来解决。
  4. 你的电脑 IP 是 169.254.78.12。这说明什么?能上网吗?
    这是IPv4链路本地地址,Windows启用DHCP时常见于未获租约,但不能证明网卡正常或整机不能上网;先确认有效接口、路由、IPv6和DHCP状态。
  5. DHCP 的地址为什么要设"租期"?如果永久分配会有什么问题?
    因为设备会离开。 如果地址永久分配,设备走了地址也不释放,地址池很快会被"已经不在场的设备"占满,新来的设备就再也拿不到地址。租约让长期不续租的地址能被回收再利用。代价是需要续租机制(在租期 50% 和 87.5% 时尝试),但换来的是地址池的可持续性。
  6. 客户端在租期的什么时候开始尝试续租?
    T1/T2由租约配置决定,未指定时默认约50%和87.5%;分别进入续租和重新绑定,期间可多次重试。到期未续上必须停止使用租约地址。
  7. 一个企业有 20 个网段,DHCP 服务器只有一台。它怎么给所有网段的设备分配地址?
    用 DHCP 中继代理。 因为 DHCP 的前两步依赖广播,而广播不能跨路由器。中继代理部署在每个网段里,收到客户端的广播后把它单播转发给远端那台 DHCP 服务器,再把服务器的应答转回客户端。中继代理还必须告诉服务器"这个请求来自哪个网段",否则服务器不知道该从哪个地址池里分配。
  8. 攻击者怎么用 DHCP 做中间人攻击?怎么防?
    攻击者在网络里私接一台设备并运行 DHCP 服务,抢在真服务器之前响应客户端的 Discover,然后给客户端下发:一个错误的 IP、一个指向攻击者的默认网关、以及一个指向攻击者的 DNS。
    一旦客户端接受了这个配置,它的所有流量都会先经过攻击者的机器(因为网关被改了)—— 这比《链路层和局域网》模块讲的 ARP 欺骗影响面更大,因为新接入的设备会一开始就被劫持。
    防御:在交换机上启用 DHCP Snooping,把连接合法 DHCP 服务器的端口设为"信任端口",其他端口收到的 DHCP 应答直接丢弃。

参考资料与适用范围

修订核对日期:2026-10-13。规则按所列协议与实现范围理解;文中的原始命令输出是历史观察,不表示本次重新实测。跨版本、代理/隧道及不同捕获位置需要另行核对。

正文源自 m1-02-DHCP.md · 共 12 节 · 8 道自测题