DHCP协议
你手机连上 WiFi 后 1-2 秒就能上网,不需要手动填 IP 地址——这 1-2 秒就是 DHCP 在跑。
为什么需要 DHCP
手动给每台设备配 IP 地址,在设备少的时候还行,设备一多就管不过来了。而且 IP 地址是有限资源,设备不在线时占着 IP 也是浪费。
DHCP(动态主机配置协议)解决这个问题:设备上线时自动申请,下线后 IP 归还,动态分配。
DHCP 一次性分配的不只是 IP,还有:
- 子网掩码
- 默认网关(路由器地址)
- DNS 服务器地址
- 租约时间
DORA 四步流程
DHCP 客户端(你的手机)和 DHCP 服务器(通常是路由器)之间走四步:
客户端 服务器
| |
|── Discover ──────────────────────→| 广播:有没有 DHCP 服务器?
| 源IP: 0.0.0.0 目的IP: 255.255.255.255
| |
|←──────────────────────── Offer ───| 单播/广播:我有,给你这个 IP
| |
|── Request ──────────────────────→| 广播:我要这个 IP
| 源IP: 0.0.0.0 目的IP: 255.255.255.255
| |
|←────────────────────── Acknowledge| 确认,租约生效
| |
Discover:客户端还没有 IP,所以源 IP 是 0.0.0.0,目的 IP 是广播地址 255.255.255.255,在整个局域网内广播”有没有 DHCP 服务器?”
Offer:服务器收到后,回复一个可用的 IP 地址和配置信息。如果局域网里有多台 DHCP 服务器,客户端可能收到多个 Offer。
Request:客户端选择第一个收到的 Offer,广播”我要这个 IP”。为什么还是广播?因为要通知其他 DHCP 服务器”我已经选了,你们的 Offer 我不要了”,让它们把预留的 IP 释放掉。
Acknowledge:被选中的服务器确认,租约正式生效,客户端开始使用这个 IP。
租约续期
DHCP 分配的 IP 有租约时间(Lease Time),到期不续就收回。
- 租约到 50% 时:客户端向原服务器发单播 Request,请求续期
- 租约到 87.5% 时:如果单播没收到回复,改为广播续期
- 租约到期还没续上:释放 IP,重新走 DORA 流程
嵌入式场景
**DHCP 超时 fallback:**嵌入式设备如果 DHCP 拿不到 IP(比如没有 DHCP 服务器),会 fallback 到 APIPA(自动私有 IP 地址),自动分配 169.254.x.x 范围内的地址。这就是为什么有时候设备显示”已连接,无互联网”——拿到的是 169.254.x.x,只能在本地链路通信。
**按 MAC 绑定固定 IP:**嵌入式设备通常需要固定 IP 方便管理。DHCP 服务器可以配置”MAC 地址 → 固定 IP”的映射,每次这台设备来申请,都给它同一个 IP。比手动配静态 IP 方便,又不用改设备本身的配置。
**DHCP Snooping:**交换机上的安全功能,防止局域网内有人伪造 DHCP 服务器(给设备分配错误的网关,实施中间人攻击)。只允许指定端口的 DHCP 回复通过。
笔试题直击
Q:画出 DORA 流程,说明每步的源/目的 IP
| 步骤 | 方向 | 源 IP | 目的 IP | 说明 |
|---|---|---|---|---|
| Discover | 客户端→服务器 | 0.0.0.0 | 255.255.255.255 | 客户端还没有 IP,广播寻找服务器 |
| Offer | 服务器→客户端 | 服务器 IP | 255.255.255.255 或客户端 MAC | 提供可用 IP |
| Request | 客户端→服务器 | 0.0.0.0 | 255.255.255.255 | 广播选择,通知其他服务器 |
| Acknowledge | 服务器→客户端 | 服务器 IP | 255.255.255.255 或客户端 MAC | 确认租约 |
Q:为什么 Request 要广播而不是单播?
因为局域网里可能有多台 DHCP 服务器都发了 Offer,客户端选了其中一个,需要广播通知所有服务器”我已经选好了”,让没被选中的服务器把预留的 IP 释放掉。
如果你正在跟随梳理, 返回 MOC←