大家好,我是雜燴君。之前我們分享的:嵌入式Linux設備開啟無線AP/無線接入點中有用到udhcpd。
udhcpd?是一個輕量級的 DHCP (Dynamic Host Configuration Protocol,動態(tài)主機配置協議)服務器實現。通常用于資源受限的嵌入式系統或小型網絡環(huán)境中。
它是 Universal DHCP Daemon 的縮寫,旨在為設備提供基本的 DHCP 服務,具有占用資源少、配置簡單等特點。
本篇文章我們來分享DHCP的相關知識。
一、DHCP 是什么?
簡單來說,DHCP 就像網絡世界里的 “貼心管家”。
在一個復雜的網絡環(huán)境中,比如智能家居系統,有大量設備需要接入網絡。每個設備要正常聯網,都得有個獨一無二的 IP 地址,就好比每棟房子都要有唯一的門牌號,這樣數據才能準確送達。
DHCP 的職責,就是自動給這些設備分配 IP 地址,同時提供子網掩碼、默認網關、DNS 服務器地址等關鍵網絡配置信息,讓設備能迅速、無誤地接入網絡,無需人工干預。減少人為錯誤,還能靈活應對設備移動、網絡擴展等變化。
二、DHCP 的工作流程
DHCP 的工作流程可分為四個關鍵階段:發(fā)現(Discover)、提供(Offer)、請求(Request)和確認(Ack)。
假設智能部署了大量嵌入式設備,用于生產監(jiān)控、設備控制等?,F在,新一批智能傳感器到貨,需要接入工廠的局域網。工廠網絡中有一臺 DHCP 服務器,負責為所有設備分配網絡配置。
1. 發(fā)現階段(Discover)
當新的智能傳感器首次接入工廠網絡,它對網絡環(huán)境一無所知,不知道 DHCP 服務器在哪。
于是,傳感器會在網絡中發(fā)送一個特殊的廣播包,這個包就像在大聲呼喊:“有沒有 DHCP 服務器呀?我需要上網,請給我分配網絡配置!”
廣播包的目的 IP 地址是 255.255.255.255,這意味著網絡中的所有設備都能收到,但只有 DHCP 服務器會響應。
2. 提供階段(Offer)
工廠網絡中的 DHCP 服務器收到傳感器的 Discover 包后,會從預先設定的 IP 地址池中挑選一個尚未分配的 IP 地址,然后向傳感器發(fā)送一個 Offer 包。
這個 Offer 包就像 DHCP 服務器在回應:“我這兒有個 IP 地址,給你用吧,還有配套的網絡配置信息。”
Offer 包中除了分配的 IP 地址,還包含子網掩碼、默認網關、DNS 服務器地址等。同時,DHCP 服務器會在內部記錄中標記這個 IP 地址已預分配給該傳感器。
3. 請求階段(Request)
智能傳感器可能會收到多個 DHCP 服務器的 Offer 包(雖然在工廠這種單一網絡環(huán)境中不太常見,但在復雜網絡中可能發(fā)生)。
不管收到幾個,傳感器只會選擇其中一個 Offer 包,并向對應的 DHCP 服務器發(fā)送一個 Request 包,意思是:“我就要你給的這個 IP 地址啦!” 這個 Request 包同樣是廣播包,目的是通知網絡中的其他 DHCP 服務器,自己已選定 IP 地址,其他服務器可收回它們提供的地址。
4. 確認階段(Ack)
DHCP 服務器收到傳感器的 Request 包后,會發(fā)送一個 Ack 包給傳感器,相當于回應:“好的,這個 IP 地址歸你用了,配置信息確認無誤?!盇ck 包再次包含完整的網絡配置信息,確認傳感器可使用該 IP 地址。此時,傳感器成功獲取 IP 地址和其他配置,能正常接入工廠網絡,開始數據采集和傳輸工作。
三、在嵌入式開發(fā)中使用 DHCP
在基于 Linux 的嵌入式開發(fā)中,使用 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