小明的学习笔记

02 — DHCP 深度解析

4 分钟阅读

02 — DHCP 深度解析

这是 DHCP 问答专题。完整联网启动流程见 DHCP、DNS 与联网启动。

DHCP 是什么?

DHCP 是应用层协议。服务端可由路由器上的 dnsmasq/Kea 等进程、独立服务器或设备软件实现,并不限定必须是 Linux 守护进程。

在一个典型 Linux 家用网关上,服务可能绑定 LAN bridge 并使用服务端 UDP 67;客户端使用 UDP 68。接口名与绑定方式取决于系统实现。


鸡生蛋还是蛋生鸡?—— 没有 IP 怎么通信?

新手机连上 WiFi 时没有 IP,它怎么和 192.168.1.1 上的 DHCP 服务对话?

答案:二层 MAC 广播 + 终极广播 IP

手机不知道路由器的 IP,它会捏造一个特殊的网络包:

字段 含义
源 IP 0.0.0.0 我是一个没有身份的人
目标 IP 255.255.255.255 这个子网里所有人听着!
目标 MAC FF:FF:FF:FF:FF:FF 全频段广播

内容:"谁是 DHCP 服务器?求赏赐一个 IP!"(DHCP Discover)

路由器的网卡收到广播包后,操作系统看到目标是 UDP 67 端口,就顺理成章地把它交给了后台监听的 dnsmasq 进程。


DHCP 怎么保证分配正确的网段?

核心原理:地址池选择来自服务端配置与请求上下文。 直连服务常参考入接口/本地地址;经过 relay 时主要依据 giaddr、relay option 与策略,不能概括成“完全依赖入接口”。

家用场景(单网段)

在路由器底层,dhcpd 的配置文件(如 dnsmasq.conf)写着:

# 针对 br0 接口,使用 192.168.1.100 ~ 192.168.1.200 这个地址池
interface=br0
dhcp-range=192.168.1.100,192.168.1.200,255.255.255.0,12h

当手机发出 DHCP 广播包,Linux 内核会给包打上系统级标签(Metadata):"这个包是从 br0 接口进来的"

dhcpd 进程读到这个标签,核对自己的配置:"既然是从 br0 来的,我就从 br0 绑定的池子里挑一个 IP 给你。"

企业场景(多网段 / DHCP Relay)

假设一家公司有 10 个部门(VLAN 1 到 VLAN 10),但只有一台中央 DHCP 服务器。

问题: 广播包默认无法穿透路由器去到另一个网段。

解决方案 —— DHCP Relay(中继代理):

在每个部门的网关路由器上开启 DHCP 中继功能。当网关收到部门内的广播求救包后,做一件偷梁换柱的事:

  1. 把广播包包装成单播包(Unicast)
  2. 在 DHCP 协议的隐藏字段 giaddr(Gateway IP Address) 中填入自己的网关 IP(如 10.0.5.1
  3. 直接发给中央 DHCP 服务器

中央服务器拆开包一看:"虽然你远在天边,但你的 giaddr10.0.5.1,那我就从 10.0.5.x 的地址池里挑 IP 给你,并让网关转交给你。"


目标 MAC 每次都变吗?—— DORA 四步曲

结论:在最初的 Discover 阶段,目标 MAC 永远、严格固定为 FF:FF:FF:FF:FF:FF

FF:FF:FF:FF:FF:FF 的物理意义

这是 Ethernet 广播地址,不代表 QoS“最高优先级”。交换机读到广播目标后:

  • 在所属 VLAN 的转发范围内泛洪到除入端口外的合适端口
  • 每个出端口重新发送帧,不是把同一个模拟电信号直接复制、放大

这就是为什么手机连 IP 都没有,也能被 DHCP 服务器听到——交换机帮你"大喇叭全厂广播"。

完整 DORA 四步握手

阶段 方向 源 MAC 目标 MAC 含义
Discover 手机→路由 手机MAC FF:FF:FF:FF:FF:FF 全厂广播:"谁是 DHCP?"
Offer 路由→手机 路由MAC 手机MAC 精准单播:"我是,192.168.1.100 你要吗?"
Request 手机→路由 手机MAC FF:FF:FF:FF:FF:FF 再次广播:"我决定要 192.168.1.100,其他人别给了!"
Ack 路由→手机 路由MAC 手机MAC 精准单播:"成交,已登记。"

注:Offer/ACK 是单播还是广播取决于客户端状态、broadcast flag、服务器与 relay 行为,表格只表示一种常见情况,不能作为固定规则。

Request 为什么要再次广播? 因为可能存在多台 DHCP 服务器同时响应。手机通过广播告知所有服务器自己的选择,没被选中的服务器就会收回它们预留的 IP。

这种在"无差别广播"与"精准单播"之间丝滑切换的机制,正是计算机网络在极度受限的启动环境中建立秩序的智慧结晶。