《電子技術(shù)應用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設計應用 > DHCP客戶端在ARM下的設計與實現(xiàn)
DHCP客戶端在ARM下的設計與實現(xiàn)
來源:微型機與應用2012年第22期
王愛華1,李詠春2
(1.吉林鐵道職業(yè)技術(shù)學院,吉林 吉林132001; 2.長春理工大學,吉林 長春130022)
摘要: 為了解決嵌入式設備無法自動獲取或釋放IP的問題,針對ARM9(S3C2440)嵌入式開發(fā)板,在Fedora操作系統(tǒng)上,配置了交叉編譯環(huán)境,編寫了動態(tài)主機配置協(xié)議(DHCP)客戶端程序代碼。利用交叉編譯環(huán)境對其進行編譯,將編譯成功產(chǎn)生的程序移植到以ARM9開發(fā)板為核心的嵌入式操作系統(tǒng)上。測試結(jié)果表明,該軟件可以在ARM9處理器的Linux和Android嵌入式操作系統(tǒng)上運行,在嵌入式設備開機時,軟件自動運行,廣播發(fā)送報文尋找DHCP服務器,自動獲取IP后,動態(tài)配置嵌入式設備的IP及各項網(wǎng)絡參數(shù)。
Abstract:
Key words :

摘  要: 為了解決嵌入式設備無法自動獲取或釋放IP的問題,針對ARM9(S3C2440)嵌入式開發(fā)板,在Fedora操作系統(tǒng)上,配置了交叉編譯環(huán)境,編寫了動態(tài)主機配置協(xié)議(DHCP)客戶端程序代碼。利用交叉編譯環(huán)境對其進行編譯,將編譯成功產(chǎn)生的程序移植到以ARM9開發(fā)板為核心的嵌入式操作系統(tǒng)上。測試結(jié)果表明,該軟件可以在ARM9處理器的Linux和Android嵌入式操作系統(tǒng)上運行,在嵌入式設備開機時,軟件自動運行,廣播發(fā)送報文尋找DHCP服務器,自動獲取IP后,動態(tài)配置嵌入式設備的IP及各項網(wǎng)絡參數(shù)。
關(guān)鍵詞: 動態(tài)主機配置協(xié)議;嵌入式系統(tǒng);交叉編譯

    隨著網(wǎng)絡技術(shù)和嵌入式技術(shù)的迅速發(fā)展,網(wǎng)絡中的嵌入式移動設備大量出現(xiàn)。為了將嵌入式設備接入到網(wǎng)絡中,每個嵌入式設備都必須進行基本的網(wǎng)絡配置。嵌入式移動設備在網(wǎng)絡中頻繁的接入,需要及時更新所使用的IP地址才能正常通信;在同一個網(wǎng)段上,為出現(xiàn)的大量嵌入式移動設備配置IP地址等參數(shù)十分困難,這也導致網(wǎng)絡中的IP地址成為稀缺資源,在這樣的環(huán)境下,每個嵌入式移動設備最好能夠自動獲取動態(tài)IP地址等資源,使用完畢后還能夠及時釋放。因此,對于存在頻繁接入大量嵌入式移動設備的網(wǎng)絡,其管理和維護任務相當繁重的,需要一種機制讓TCP/IP的配置和管理從用戶端轉(zhuǎn)移到網(wǎng)絡管理端,實現(xiàn)IP的集中式管理[1-3]。
    為了解決網(wǎng)絡管理的難題,提出了一種適用于嵌入式環(huán)境的DHCP客戶端的設計方法,并且在ARM環(huán)境下得以實現(xiàn)。這種方法適合分散控制和管理存在較大規(guī)模嵌入式設備的網(wǎng)絡。DHCP客戶端協(xié)議移植到嵌入式系統(tǒng)上,可以節(jié)省配置IP參數(shù)的時間,大大提高嵌入式設備的可管理性,降低了嵌入式設備手工配置IP地址所造成的管理成本和硬件成本。
1 DHCP協(xié)議和工作原理
1.1 DHCP協(xié)議

    DHCP(Dynamic Host Configuration Protocol)即動態(tài)主機配置協(xié)議,是一個局域網(wǎng)的網(wǎng)絡協(xié)議。為了減輕TCP/IP網(wǎng)絡的規(guī)劃、管理和維護負擔,解決IP地址空間缺乏問題,DHCP為內(nèi)部網(wǎng)絡或網(wǎng)絡服務供應商自動分配IP地址,為用戶或者內(nèi)部網(wǎng)絡管理員提供對所有計算機進行中央管理的手段[4]。
    DHCP是用于給多個客戶計算機集中分配IP地址以及相關(guān)的配置參數(shù)的協(xié)議,這樣就能將IP地址和TCP/IP的設置統(tǒng)一管理起來,從而避免不必要的地址沖突問題。該協(xié)議常常用在網(wǎng)絡中對眾多計算機的管理,以減少網(wǎng)絡管理員手工設置和分配地址的負擔。主機使用DHCP協(xié)議可以通過DHCP服務器得到IP地址、默認網(wǎng)關(guān)和DNS服務器等信息,從而大大減少了用戶的手動配置工作量,同時DHCP服務器能夠及時回收不用的IP地址,從而提高IP地址的利用率。
1.2 DHCP工作原理
    DHCP的工作主要分為以下階段[5]:
    (1)DHCP客戶端尋找DHCP服務器階段;
    (2)DHCP服務器提供IP地址階段;
    (3)DHCP客戶端選擇IP地址階段;
    (4)DHCP服務器確認所提供的IP地址階段;
    (5)租約確認階段;
    (6)DHCP客戶端再次登錄網(wǎng)絡時,直接發(fā)送包含前一次所分配的IP地址的DHCP request請求信息。
    DHCP客戶端使用DHCP獲取其IP地址的過程中,共有6種狀態(tài)。各個狀態(tài)之間的轉(zhuǎn)換以及引起狀態(tài)轉(zhuǎn)換的事件和報文如圖1所示。DHCP客戶端第一次啟動時,便進入初始化狀態(tài)。為了獲取一個IP地址,它會向所有服務器廣播一個DHCP discover報文,并進入選擇狀態(tài)。處于選擇狀態(tài)時,它從DHCP服務器收集DHCP offer響應,并選擇一個服務器向其發(fā)送DHCP request報文,進入請求狀態(tài)。DHCP服務器確認請求后,發(fā)出DHCP ack報文,DHCP客戶端收到確認消息后轉(zhuǎn)移到已綁定狀態(tài)。當需要重新續(xù)約時,DHCP客戶端發(fā)送DHCP request報文并轉(zhuǎn)移到更新狀態(tài)。DHCP客戶端可以隨時發(fā)送DHCP release報文,返回初始化狀態(tài)。進入更新狀態(tài)后,DHCP客戶端發(fā)送DHCP nack報文,返回初始化狀態(tài);如果租用期超過閾值,DHCP客戶端發(fā)送DHCP request報文并轉(zhuǎn)移到重綁定狀態(tài)。進入重綁定狀態(tài)后,如果租期到期或發(fā)送DHCP nack報文,則返回初始化狀態(tài)。


2 DHCP客戶端的實現(xiàn)
2.1 開發(fā)環(huán)境

    設計DHCP客戶端軟件的難點是DHCP客戶端在嵌入式系統(tǒng)上的移植[6],其中前臺技術(shù)采用B/S模式。Fedora是一個基于Linux的獨立操作系統(tǒng),具有開放性、創(chuàng)新性和前瞻性。它允許任何人自由地使用、修改和重新發(fā)布,可以運行在多種體系結(jié)構(gòu)上。因此,本文選擇Fedora操作系統(tǒng)作為開發(fā)平臺。
    為了能夠編譯、鏈接、處理和調(diào)試跨越平臺體系結(jié)構(gòu)的程序代碼,使用交叉開發(fā)工具鏈和不同的參數(shù)[7]。編譯環(huán)境為在X86系列的處理器平臺上編譯出能運行在ARM構(gòu)架的處理器平臺上的程序所需要的編譯工具。構(gòu)建交叉編譯環(huán)境首先要確定目標平臺。在GNU系統(tǒng)中,每個目標平臺都有一個明確的格式,這些信息用于在構(gòu)建過程中識別要使用的不同工具的正確版本。本系統(tǒng)的移植平臺是基于ARM9的嵌入式系統(tǒng),開發(fā)板S3C2440所配內(nèi)核已為最新的Linux-2.6.32.2,交叉編譯器統(tǒng)一為arm-linux-gcc-4.3.2。
2.2 DHCP客戶端軟件設計
    DHCP客戶端軟件主要是用來完成狀態(tài)跳轉(zhuǎn)以及發(fā)送和接收DHCP包的任務,同時記錄時間,在未到達指定時刻時,對程序?qū)嵭杏行У淖枞?。根?jù)這些需求,可以采用死循環(huán)與選擇狀態(tài)函數(shù)結(jié)合的方法。選擇狀態(tài)函數(shù)用來偵聽與服務器連接的socket端口的變化情況。當選擇狀態(tài)函數(shù)偵聽的socket端口發(fā)生變化時,處理相應接收報文;當socket端口沒有發(fā)生變化時,將相應報文作發(fā)送處理。DHCP客戶端軟件中各個函數(shù)之間的調(diào)用關(guān)系如圖2所示。

 

 

    由上面分析可知,DHCP客戶端軟件主要由相互獨立的若干子函數(shù)組成,主函數(shù)主要用來對子函數(shù)進行調(diào)用,每次執(zhí)行完一個函數(shù)后,返回一個要執(zhí)行的函數(shù)的地址,繼續(xù)執(zhí)行。下面介紹5個主要子函數(shù):
    (1)初始化函數(shù)的流程圖如圖3所示,主要用來對DHCP客戶端進行初始化,發(fā)送discover報文。如果發(fā)送成功,返回選擇狀態(tài)函數(shù)的地址;否則,停止DHCP。
    (2)請求函數(shù)的流程圖如圖4所示。DHCP客戶端接收服務器的DHCP ack報文,如果接收失敗,返回初始化函數(shù)地址;否則,對服務器提供的IP地址進行驗證,如果校驗失敗,發(fā)送declient報文并返回初始化函數(shù)地址;否則配置DHCP;如果配置成功,客戶端轉(zhuǎn)換到綁定狀態(tài)函數(shù);否則,停止DHCP。
    (3)綁定函數(shù)的流程圖如圖5所示。DHCP客戶端將從服務器獲取到的IP設置成網(wǎng)卡的地址,DHCP客戶端進入更新狀態(tài),等待服務器超時。
    (4)更新函數(shù)的流程圖如圖6所示。DHCP客戶端在IP租約定時器超時的時候,向服務器發(fā)送DHCP request報文,進行續(xù)約。

    (5)重綁定函數(shù)的流程圖如圖7所示,當DHCP客戶端在IP租約到達80%時,若服務器還沒有回應DHCP ack報文,則DHCP客戶端廣播DHCP request報文。若在原租約期到期時,DHCP客戶端收到了DHCP ack報文,則客戶端進入綁定狀態(tài);否則轉(zhuǎn)換到初始化狀態(tài)。


3 測試結(jié)果與分析
    DHCP客戶端軟件對硬件方面并沒有極其嚴格的要求,為了進行測試,選用的計算機型號為三星R458,ARM9型號為S3C2440。DHCP客戶端軟件的測試步驟如下:
    (1)將編譯成功的DHCP客戶端軟件復制到U盤上,并將DHCP源代碼中client目錄下的dhclient-script和client.conf下載到U盤中;
    (2)啟動ARM9,進入系統(tǒng)后,插入U盤,掛載U盤成功后,把U盤中的dhclient-scrip和client.conf下載到/etc目錄下并修改權(quán)限,把DHCP客戶端軟件復制到/sbin目錄下并修改權(quán)限;
    (3)在/sbin中,運行DHCP客戶端軟件,命令為dhc-
lient eth0。
    通過以上步驟可以得到DHCP客戶端軟件的運行結(jié)果,如圖8所示。

    此外,通過對測試數(shù)據(jù)的分析可以得到以下結(jié)論:
    (1)為了增加系統(tǒng)配置的靈活性,mac地址、主機名的設置是在系統(tǒng)啟動時的配置文件rcs中設置的,配置腳本如下:
    ifconfig eth0
    ifconfig eth0 hw ether 0A:08:09:17:14:13
    ifconfig eth0 up
    (2)為了使設備的DHCP客戶端正確運行,在編譯Linux內(nèi)核時,還需要在網(wǎng)絡設置部分添加以下選項:
    Networking——>
       [*]Networking support——>
        Networking options——>
           <*>Packet socket
            [*]  IP:DHCP support
            [*]Network packet filtering(replaces ipchains)
    分別添加數(shù)據(jù)包socket、IP、DHCP支持和網(wǎng)絡數(shù)據(jù)包過濾選項,其中網(wǎng)絡數(shù)據(jù)包過濾后面子選項可不選。
    (3)在S3C2440自帶的嵌入式系統(tǒng)上,上述第二項,必須進行內(nèi)核編譯,否則DHCP客戶端不能直接運行。
    (4)在適合S3C2440的Android系統(tǒng)上,DHCP客戶端程序能正常運行。
參考文獻
[1] 方華,李超.基于ARM平臺的嵌入式DHCP協(xié)議設計和實現(xiàn)[J].電腦知識與技術(shù),2007,13(3):65-67.
[2] STEVENS W R,RAGO S A.Advanced programming in the UNIX environment(2nd Edition)[M].Boston:Addison  Wesley Professional.2008.
[3] 李海燕,劉廣濤.DHCP客戶端在ARM9_Linux上的設計和實現(xiàn)[J].煙臺職業(yè)學院,2009,15(4):70-77.
[4] 王文龍,黃地龍.DHCP協(xié)議深入分析[J].電腦與電信,2010(4):46-48.
[5] 陳君,舒田華,高燕.嵌入式Linux系統(tǒng)的DHCP研究[J].九江學院學報,2007,26(3):22-26.
[6] 葉培順.嵌入式Linux在S3C2440上的移植[J].電子設計工程,2011,19(15):111-113.
[7] 樊濱溫,崔志強.DHCP協(xié)議客戶端的實現(xiàn)[J].計算機應用與軟件,2007,24(11):143-145.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。