DHCP工作流程


大家好,我是杂烩君。

之前我们分享的:嵌入式Linux设备开启无线AP/无线接入点中有用到udhcpd

udhcpd 是一个轻量级的 DHCP (Dynamic Host Configuration Protocol,动态主机配置协议)服务器实现。通常用于资源受限的嵌入式系统或小型网络环境中。

它是 Universal DHCP Daemon 的缩写,旨在为设备提供基本的 DHCP 服务,具有占用资源少、配置简单等特点。

本篇文章我们来分享DHCP的相关知识。

一、DHCP 是什么?

简单来说,DHCP 就像网络世界里的 “贴心管家”。

在一个复杂的网络环境中,比如智能家居系统,有大量设备需要接入网络。每个设备要正常联网,都得有个独一无二的 IP 地址,就好比每栋房子都要有唯一的门牌号,这样数据才能准确送达。

DHCP 的职责,就是自动给这些设备分配 IP 地址,同时提供子网掩码、默认网关、DNS 服务器地址等关键网络配置信息,让设备能迅速、无误地接入网络,无需人工干预。减少人为错误,还能灵活应对设备移动、网络扩展等变化。

二、DHCP 的工作流程

DHCP 的工作流程可分为四个关键阶段:发现(Discover)提供(Offer)请求(Request)确认(Ack)

假设智能部署了大量嵌入式设备,用于生产监控、设备控制等。现在,新一批智能传感器到货,需要接入工厂的局域网。工厂网络中有一台 DHCP 服务器,负责为所有设备分配网络配置。

1. 发现阶段(Discover)

当新的智能传感器首次接入工厂网络,它对网络环境一无所知,不知道 DHCP 服务器在哪。

于是,传感器会在网络中发送一个特殊的广播包,这个包就像在大声呼喊:“有没有 DHCP 服务器呀?我需要上网,请给我分配网络配置!”

广播包的目的 IP 地址是 255.255.255.255,这意味着网络中的所有设备都能收到,但只有 DHCP 服务器会响应。

2. 提供阶段(Offer)

工厂网络中的 DHCP 服务器收到传感器的 Discover 包后,会从预先设定的 IP 地址池中挑选一个尚未分配的 IP 地址,然后向传感器发送一个 Offer 包。

这个 Offer 包就像 DHCP 服务器在回应:“我这儿有个 IP 地址,给你用吧,还有配套的网络配置信息。”

Offer 包中除了分配的 IP 地址,还包含子网掩码、默认网关、DNS 服务器地址等。同时,DHCP 服务器会在内部记录中标记这个 IP 地址已预分配给该传感器。

3. 请求阶段(Request)

智能传感器可能会收到多个 DHCP 服务器的 Offer 包(虽然在工厂这种单一网络环境中不太常见,但在复杂网络中可能发生)。

不管收到几个,传感器只会选择其中一个 Offer 包,并向对应的 DHCP 服务器发送一个 Request 包,意思是:“我就要你给的这个 IP 地址啦!” 这个 Request 包同样是广播包,目的是通知网络中的其他 DHCP 服务器,自己已选定 IP 地址,其他服务器可收回它们提供的地址。

4. 确认阶段(Ack)

DHCP 服务器收到传感器的 Request 包后,会发送一个 Ack 包给传感器,相当于回应:“好的,这个 IP 地址归你用了,配置信息确认无误。”Ack 包再次包含完整的网络配置信息,确认传感器可使用该 IP 地址。此时,传感器成功获取 IP 地址和其他配置,能正常接入工厂网络,开始数据采集和传输工作。

三、在嵌入式开发中使用 DHCP

在基于 Linux 的嵌入式开发中,使用 DHCP 同样能极大简化设备的网络配置流程。我们可以通过udhcpd来实现 DHCP 功能。

udhcpd的配置文件可参考udhcpd源码下的udhcpd.conf:

我们只保留如下内容:

# The start and end of the IP lease block
start           192.168.3.2
end             192.168.3.254

# The interface that udhcpd will use
interface       wlan0

opt     dns     114.114.114.114
option  subnet  255.255.255.0
opt     router  192.168.3.1
option  domain  local
option  lease   864000     # 10 days of seconds

该文件主要配置了:

  • 所能分配的IP地址的范围为:192.168.3.2~192.168.3.254
  • 网卡接口:wlan0
  • 网关地址:192.168.3.1


文章作者: 杂烩君
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 杂烩君 !
  目录