DHCP协议

← 返回 MOC | ← 主页

你手机连上 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.0255.255.255.255客户端还没有 IP,广播寻找服务器
Offer服务器→客户端服务器 IP255.255.255.255 或客户端 MAC提供可用 IP
Request客户端→服务器0.0.0.0255.255.255.255广播选择,通知其他服务器
Acknowledge服务器→客户端服务器 IP255.255.255.255 或客户端 MAC确认租约

Q:为什么 Request 要广播而不是单播?

因为局域网里可能有多台 DHCP 服务器都发了 Offer,客户端选了其中一个,需要广播通知所有服务器”我已经选好了”,让没被选中的服务器把预留的 IP 释放掉。


如果你正在跟随梳理, 返回 MOC←