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