黃曉玲
(山西省臨汾市職業(yè)技術(shù)學(xué)院,山西 臨汾 041004)
實驗室計算機的IP地址自動設(shè)置程序
黃曉玲
(山西省臨汾市職業(yè)技術(shù)學(xué)院,山西 臨汾 041004)
實驗室計算機的IP地址自動設(shè)置程序,便于網(wǎng)絡(luò)管理人員對實驗室計算機的網(wǎng)絡(luò)參數(shù)進行方便、快捷、有效的配置與管理。文章首先分析DHCP技術(shù)的工作原理,掌握了DHCP服務(wù)器與客戶端交互的過程。其次,考慮到DHCP技術(shù)本身的復(fù)雜性,提出了使用UDP廣播進行通信,并自定義通訊協(xié)議這樣相對簡單的系統(tǒng)解決方案。研究Windows系統(tǒng)判斷IP地址沖突的機制,Windows系統(tǒng)配置IP等網(wǎng)絡(luò)參數(shù)的原理,并進一步研究分析了UDP廣播通訊、ARP地址解析協(xié)議、Windows平臺下Socket網(wǎng)絡(luò)編程等相關(guān)問題。最后,設(shè)計了該系統(tǒng)客戶端程序,并在Visual C++6.0開發(fā)環(huán)境下實現(xiàn)了全部功能。
計算機;IP配置;DHCP;ARP;IP配置;多線程
動態(tài)主機設(shè)置協(xié)議(Dynamic Host Configuration Protocol,DHCP)是一個局域網(wǎng)的網(wǎng)絡(luò)協(xié)議,使用UDP協(xié)議工作,主要有兩個用途:給內(nèi)部網(wǎng)絡(luò)或網(wǎng)絡(luò)服務(wù)供應(yīng)商自動分配IP地址給用戶與給內(nèi)部網(wǎng)絡(luò)管理員作為對所有計算機作中央管理的手段。它分為兩個部分:一個是服務(wù)器端,另一個是客戶端。所有的IP網(wǎng)絡(luò)設(shè)定數(shù)據(jù)都由DHCP服務(wù)器集中管理,并負責(zé)處理客戶端的DHCP要求;而客戶端則會使用從服務(wù)器分配下來的IP環(huán)境數(shù)據(jù)。比較起B(yǎng)OOTP,DHCP透過“租約”的概念,有效且動態(tài)地分配客戶端的TCP/IP設(shè)定。而且,作為兼容考慮,DHCP也完全照顧了BOOTP Client的需求。DHCP的分配形式必須至少有一臺DHCP工作在網(wǎng)絡(luò)上面,它會檢測網(wǎng)絡(luò)的DHCP請求,并與客戶端磋商TCP/IP的設(shè)定環(huán)境。
DHCP協(xié)議分配更加靈活,能動態(tài)地設(shè)定IP地址,還可以將一些IP保留下來給一些特殊用途的機器使用。它可以按照硬件地址來固定地分配IP地址,同時,DHCP還可以幫客戶端指定 router、netmask、DNS Server、WINSServer、等等項目。
客戶端第一次登錄網(wǎng)路,DHCP的工作形式會有所不同,表現(xiàn)如下:
1.尋找Server。當(dāng)DHCP客戶端第一次登錄網(wǎng)路的時候,也就是客戶發(fā)現(xiàn)本機上沒有任何IP資料設(shè)定,它會向網(wǎng)路發(fā)出一個DHCPDISCOVER封包。因為客戶端還不知道自己屬于哪一個網(wǎng)路,所以封包的來源位址會為0.0.0.0。而目的位址則為255.255.255.255,然后再附上Dhcpdiscover的信息,向網(wǎng)路進行廣播。在Windows的預(yù)設(shè)情形下,Dhcpdiscover的等待時間預(yù)設(shè)為1秒,也就是當(dāng)客戶端將第一個Dhcpdiscover封包送出去之后,如果在1秒之內(nèi)沒有得到回應(yīng)的話,就會進行第二次Dhcpdiscover廣播。若一直得不到回應(yīng)的情況下,客戶端一共會有四次Dhcpdiscover廣播(包括第一次在內(nèi)),除了第一次會等待1秒之外,其余三次的等待時間分別是9、13、16秒。如果都沒有得到DHCP伺服器的回應(yīng),客戶端則會顯示錯誤信息,宣告Dhcpdiscover失敗。之后,基于使用者的選擇,系統(tǒng)會繼續(xù)在5分鐘之后再重復(fù)一次Dhcpdiscover的過程。
2.提供IP租用位址。當(dāng)DHCP伺服器監(jiān)聽到客戶端發(fā)出的Dhcpdiscover廣播后,它會從那些還沒有租出的位址范圍內(nèi),選擇最前面的空置IP,連同其它TCP/IP設(shè)定,回應(yīng)給客戶端一個DHCPOFFER封包。由于客戶端在開始的時候還沒有 IP位址,所以在其Dhcpdiscover封包內(nèi)會帶有其MAC位址信息,并且有一個XID編號來辨別該封包,DHCP伺服器回應(yīng)的Dhcpoffer封包則會根據(jù)這些資料傳遞給要求租約的客戶。根據(jù)伺服器端的設(shè)定,Dhcpoffer封包會包含一個租約期限的信息。
3.接受 IP租約。如果客戶端收到網(wǎng)路上多臺DHCP伺服器的回應(yīng),那么它只會挑選其中一個Dhcpoffer而已(通常是最先抵達的那個),并且會向網(wǎng)路發(fā)送一個Dhcprequest廣播封包,告訴所有DHCP伺服器它將指定接受那一臺伺服器提供的IP位址。同時,客戶端還會向網(wǎng)路發(fā)送一個ARP封包,查詢網(wǎng)路上面有沒有其它機器使用該IP位址。如果發(fā)現(xiàn)該IP已經(jīng)被占用,客戶端則會送出一個 DHCPDECLINE封包給DHCP伺服器,拒絕接受其Dhcpoffer,并重新發(fā)送Dhcpdiscover信息。
1.ARP協(xié)議概述:
ARP是一個重要的TCP/IP協(xié)議,并且用于確定對應(yīng)ip地址的網(wǎng)卡物理地址。實用ARP命令,你能夠查看本地計算機或另一臺計算機的ARP高速緩存中的當(dāng)前內(nèi)容。
按照缺省設(shè)置,ARP高速緩存中的項目是動態(tài)的,每當(dāng)發(fā)送一個指定地點的數(shù)據(jù)包且高速緩存中不存在當(dāng)前項目時,ARP便會自動添加該項目。一旦高速緩存的項目被輸入,它們就已經(jīng)開始走向失效狀態(tài)。例如,在windows nt網(wǎng)絡(luò)中,如果輸入項目后不進一步使用,物理/IP地址對就會在2至10分鐘內(nèi)失效。因此,如果ARP高速緩存中項目很少或根本沒有時,它通過另一臺計算機或路由器的ping命令進行添加。所以,需要通過ARP命令查看高速緩存中的內(nèi)容時,應(yīng)先ping此臺計算機(不能是本機發(fā)送ping命令)。
2.常用命令選項:
ARP A或ARP G——用于查看高速緩存中的所有項目。-A和-G參數(shù)的結(jié)果是一樣的,多年來-G一直是unix平臺上用來顯示ARP高速緩存中所有項目的選項,而windows用的是ARPA(-A可被視為all,即全部的意思),但它也可以接受比較傳統(tǒng)的-G選項。
ARPAIP——如果你有多個網(wǎng)卡,那么使用ARP A加上接口的IP地址,就可以只顯示與該接口相關(guān)的ARP緩存項目。
ARPSIP物理地址——你可以向ARP高速緩存中人工輸入一個靜態(tài)項目。該項目在計算機引導(dǎo)過程中將保持有效狀態(tài),或者在出現(xiàn)錯誤時,人工配置的物理地址將自動更新該項目。
ARPDIP——使用本命令能夠人工刪除一個靜態(tài)項目。
ARP協(xié)議是用于由節(jié)點IP地址解析其MAC地址,然后進行局域網(wǎng)內(nèi)部通信的協(xié)議。例如要與某主機連接,可以在瀏覽器或運行窗口中輸入其IP地址,然而在局域網(wǎng)內(nèi)是沒有網(wǎng)絡(luò)層的,網(wǎng)絡(luò)中的主機設(shè)備不能識別IP地址,只識別MAC地址,所以這時就需要ARP協(xié)議來轉(zhuǎn)換。ARP協(xié)議的基本功能就是通過數(shù)據(jù)包中的目標(biāo)節(jié)點的IP地址查詢目標(biāo)節(jié)點的MAC地址,以便把數(shù)據(jù)包發(fā)送到目標(biāo)設(shè)備中。
ARP的基本工作原理如下:
1.每臺主機都會根據(jù)以往在網(wǎng)絡(luò)中與其他節(jié)點的通信,在自己的ARP緩存區(qū)(ARPCache)中建立一個ARP列表,以表示網(wǎng)絡(luò)中節(jié)點IP地址和MAC地址的對應(yīng)關(guān)系。
2.當(dāng)源節(jié)點需要將一個數(shù)據(jù)包發(fā)送到目標(biāo)節(jié)點時,會首先檢查自己ARP列表中是否存在該包中所包含的目標(biāo)節(jié)點IP地址對應(yīng)的MAC地址。如果有,則直接將數(shù)據(jù)包發(fā)送到這個MAC地址節(jié)點上;如果沒有,就向本地網(wǎng)段發(fā)起一個ARP請求的廣播包,查詢此IP地址目標(biāo)節(jié)點對應(yīng)的MAC地址。此ARP請求數(shù)據(jù)包里包括源節(jié)點的IP地址、硬件地址以及目標(biāo)節(jié)點的IP地址。
3.網(wǎng)絡(luò)中所有的節(jié)點在收到這個ARP請求后,會檢查數(shù)據(jù)包中的目標(biāo)IP地址是否和自己的IP地址一致。如果不相同就忽略此數(shù)據(jù)包;如果相同,該節(jié)點首先將源端的MAC地址和IP地址的對應(yīng)表項添加到自己的ARP列表中。如果發(fā)現(xiàn)ARP表中已經(jīng)存在該IP地址所對應(yīng)的MAC地址表項信息,則將其覆蓋,然后給源節(jié)點發(fā)送一個ARP響應(yīng)數(shù)據(jù)包,告訴對方自己是它需要查找的MAC地址節(jié)點。
4.源節(jié)點在收到這個ARP響應(yīng)數(shù)據(jù)包后,將得到的目標(biāo)節(jié)點的IP地址和MAC地址對應(yīng)表項添加到自己的ARP列表中,并利用此信息開始數(shù)據(jù)的傳輸。如果源節(jié)點一直沒有收到ARP響應(yīng)數(shù)據(jù)包,則表示ARP查詢失敗。
系統(tǒng)的設(shè)計原理是本系統(tǒng)的客戶端與服務(wù)器均采用UDP廣播進行通信,定義了客戶端與服務(wù)器通信的格式,客戶端在接收到服務(wù)器分配的IP地址等網(wǎng)絡(luò)參數(shù)信息以后,將以廣播的方式向整個局域網(wǎng)絡(luò)發(fā)送針對服務(wù)器分配的IP地址的ARP請求,以此可以判斷該IP地址是否已經(jīng)被局域網(wǎng)內(nèi)其他主機占用。為了更快速、更有效地配置IP地址等網(wǎng)絡(luò)參數(shù)信息,首先獲取本機網(wǎng)絡(luò)適配卡的相關(guān)信息,然后據(jù)此修改注冊表中與其對應(yīng)的IP地址等網(wǎng)絡(luò)參數(shù)信息。也調(diào)用該API函數(shù),通告網(wǎng)絡(luò)參數(shù)的改變,以使新配置的網(wǎng)絡(luò)參數(shù)立即生效。采用多線程機制實現(xiàn)系統(tǒng)預(yù)期的功能。本程序運行以后,首先創(chuàng)建一個工作者線程InitThread用以做一些初始化的工作,通過使用臨界區(qū)對象來解決線程與線程之間的同步問題。在正確地配置好IP地址等網(wǎng)絡(luò)參數(shù)信息后,將不要求用戶點擊關(guān)閉按鈕以退出本程序。本程序檢測正確完成預(yù)期功能以后,將以發(fā)送消息的方式要求本程序結(jié)束運行,系統(tǒng)在接收到該消息以后,將結(jié)束本程序。
在分析并設(shè)計好了本客戶端程序以后,在Windows2003SP1+ VisualC++ 6.0SP6 +PlatformSDK_Svr2003SP1的環(huán)境下實現(xiàn)了本客戶端程序。
系統(tǒng)的測試方法:測試環(huán)境為計算機實驗室100臺相連,組成一個局域網(wǎng)。計算機使用的操作系統(tǒng)為Windows XPSP2+Windows Server2003 SP1,總體的測試結(jié)果為:所有預(yù)期功能全部完成。
使用DHCP技術(shù)實現(xiàn)對主機的IP地址等網(wǎng)絡(luò)參數(shù)進行動態(tài)、靜態(tài)的配置,可以讓網(wǎng)絡(luò)管理人員更方便、快捷、有效地對局域網(wǎng)主機的網(wǎng)絡(luò)參數(shù)進行配置與管理,在一定程度上代替了DHCP技術(shù)??蛻舳顺绦蛲ㄟ^UDP廣播與服務(wù)器通信??蛻舳税l(fā)送UDP廣播到服務(wù)器綁定的特定端口。同時在客戶端綁定的端口上,等待服務(wù)器的應(yīng)答消息??蛻舳私邮辗?wù)器的消息,從該消息中提取相應(yīng)的信息,如IP地址、子網(wǎng)掩碼、默認網(wǎng)關(guān)等。極大地方便了計算機實驗室管理人員對計算機的管理。
[1]鄭阿奇.Visual C++實訓(xùn)[M].北京:清華大學(xué)出版社,2005.
TN
A
1673-0046(2010)12-0190-02