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