udhcp源碼詳解(一)之DHCP服務器和客戶端的工作流程

  udhcp源碼詳解(一)        之DHCP服務器和客戶端的工作流程

From :  <https://blog.csdn.net/who538592/article/details/58621748>

 

DHCP服務器的工作流程

   udhcpd,即dhcp服務器,在路由器等網關設備中,DHCP服務器啓動後用於給LAN側和無線終端分配IP、租約和其他網絡配置。根據RFC2131文檔規範,一個標準的DHCP服務器和客戶端的交互時序如下,這是一個完整的交互過程,從INIT到BOUND,其餘的交互過程,比如INIT_REBOOT、RENEWING和REBINDING都可視作該過程的簡化或一部分。

DHCP服務器的工作流程
DHCP客戶端的工作流程

udhcpc,即DHCP客戶端的工作相對簡單,可以使用客戶端狀態轉移圖來描述,根據所處的
不同狀態,與服務器進行交互。如下圖所示,客戶端工作的起點一般是INIT和INIT_REBOOT狀態,

一個標準的獲取IP及其配置的流程是INITSELECTINGREQUESTINGBOUND, 重啓後的重新獲取IP
     lease的流程:INIT_REBOOTREBOOTINGBOUND,
    T1過期續約lease:BOUNDRENEWINGBOUND,
    T1和T2過期續約lease:BOUNDRENEWINGREBINDINGBOUND。
    可見,BOUND狀態是最終完成配置的狀態,REBOOTING、REQUESTING、RENEWING和REBINDING是中間狀態,在中間狀態,若接收到ACK即跳轉到BOUND狀態完成配置,若接收到NAK或lease過期則回到INIT狀態。

客戶端狀態轉移圖

 

這篇udhcp詳解是基於busybox-1.20裏的 …/busybox-1.20/networking/udhcp/目錄下的源碼進行講解與分析,主要是對udhcp server端源碼進行的講解,client端相對於server端相對簡單一些,源代碼上面表現的實現思想大體相似。

udhcp的文件結構

udhcp的文件夾中包含許多源文件和頭文件,每組源和頭文件對應着一個模塊或功能。
Dhcpd.c——整個DHCP server運行的主線,其udhcpd_main函數就是server開始允許的入口,相當於main入口。在udhcpd_main中,各個模塊被組合起來實現DHCP服務器的功能。

Dhcpc.c:DHCP client運行的主線,提供udhcpc_main作爲入口函數,相當於main函數,將各個客戶端模塊組合起來實現DHCP客戶端的功能。
Frontend.c:該文件提供了一個main入口,在其中根據傳入參數選擇啓動DHCP服務器還是客戶端。
其餘文件都是負責各個具體的模塊:
Arpping.c:該源文件只包含arpping函數,在服務器給客戶端分配一個free IP後,會調用arpping函數,查看網絡上是否有主機已經使用該地址。
File.c和file.h:DHCP server file manipulation,負責DHCP服務器的文件操作,其中最重要的函數是read_config,該函數載入默認配置信息,並從配置文件udhcpd.conf讀取配置信息。(以後讀取配置信息的函數可以模仿read_config函數寫)。
leases.c:tools to manage DHCP leases,針對dhcpOfferedAddr結構的操作函數,該結構體是DHCPOFFER報文的數據主體,通過它,服務器向客戶端提供租約的信息。
options.c:DHCP server option packet tool,針對DHCP數據報文的options字段的操作函數都在這個文件中。
packet.c:DHCP數據報文的構造和發送。
pidfile.c:Functions to assist in the writing and removing of pidfiles。針對pidfile的寫和刪除操作。主要針對/tmp/var/run/udhcpd0.pid
serverpacket.c:Constuct and send DHCP server packets。構造和發送dhcp服務器報文。
clientpacket.c:Packet generation and dispatching functions for the DHCP client。
socket.c:DHCP server client/server socket creation。套接字創建,包含interface信息的讀取
script.c:Functions to call the DHCP client notification scripts。
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章