張奎
【摘要】DHCP是為了實(shí)現(xiàn)TCP/IP網(wǎng)絡(luò)參數(shù)的自動(dòng)分配而設(shè)計(jì)的,本文深入分析DHCP工作原理,在以太網(wǎng)板卡的基礎(chǔ)上,設(shè)計(jì)了一個(gè)DHCP客戶(hù)端,從而實(shí)現(xiàn)了板卡端口的地址自動(dòng)配置。
【關(guān)鍵詞】DHCP客戶(hù)端;以太網(wǎng)板卡;設(shè)計(jì)
1.引言
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,TCP/IP網(wǎng)絡(luò)與人們的工作與生活越來(lái)越緊密的聯(lián)系在一起。為確保網(wǎng)絡(luò)通信的正常進(jìn)行,需要配置IP地址等網(wǎng)絡(luò)參數(shù)。目前,IP地址分配主要采用手動(dòng)分配和自動(dòng)分配的方式。其中,手動(dòng)分配的地址將被長(zhǎng)期占用,導(dǎo)致地址利用率低。而自動(dòng)分配則是由處于網(wǎng)絡(luò)中的服務(wù)器分配地址,這種方式將手工配置IP地址所導(dǎo)致的錯(cuò)誤減少到最低程度[1]。
IETF設(shè)計(jì)的動(dòng)態(tài)主機(jī)配置協(xié)議(DHCP)正是這樣一種動(dòng)態(tài)分配機(jī)制。本文將闡述利用以太網(wǎng)板卡的現(xiàn)有功能,設(shè)計(jì)一個(gè)DHCP客戶(hù)端,從而使板卡的每個(gè)端口可以動(dòng)態(tài)獲取IP地址等網(wǎng)絡(luò)參數(shù)。
2.DHCP原理
DHCP(Dynamic Host Configuration Protocol),是一種動(dòng)態(tài)向網(wǎng)絡(luò)終端提供配置參數(shù)的協(xié)議。DHCP使用客戶(hù)端/服務(wù)器模式,請(qǐng)求配置信息的終端被稱(chēng)為DHCP客戶(hù)端,而提供配置信息的被稱(chēng)為DHCP服務(wù)器。
DHCP客戶(hù)端和服務(wù)器之間的交互通過(guò)以下8種類(lèi)型的報(bào)文來(lái)實(shí)現(xiàn):
①DISCOVER:由客戶(hù)端廣播,尋找可達(dá)的服務(wù)器;
②OFFER:由服務(wù)器響應(yīng)客戶(hù)端的DISCOVER報(bào)文,攜帶了相關(guān)配置參數(shù);
③REQUEST:客戶(hù)端發(fā)往服務(wù)器,請(qǐng)求配置參數(shù)或確認(rèn)原來(lái)的配置是否可用;
④ACK:服務(wù)器發(fā)往客戶(hù)端,該報(bào)文包含了所提交的配置參數(shù);
⑤NAK:服務(wù)器發(fā)往客戶(hù)端,提示客戶(hù)端參數(shù)錯(cuò)誤或租期已滿(mǎn);
⑥D(zhuǎn)ECLINE:客戶(hù)端發(fā)往服務(wù)器,告訴服務(wù)器IP地址已被使用;
⑦RELEASE:客戶(hù)端發(fā)往服務(wù)器,告訴服務(wù)器放棄IP地址并終止剩余租期;
⑧INFORM:客戶(hù)端發(fā)往服務(wù)器,告訴服務(wù)器已配置了網(wǎng)絡(luò),僅向服務(wù)器請(qǐng)求本地配置參數(shù)[2];
客戶(hù)端從服務(wù)器動(dòng)態(tài)獲取IP地址,主要通過(guò)四個(gè)階段進(jìn)行:
①發(fā)現(xiàn)階段:客戶(hù)端尋找服務(wù)器的階段??蛻?hù)端以廣播方式發(fā)送DISCOVER報(bào)文。
②提供階段:服務(wù)器提供IP地址的階段。服務(wù)器接收到客戶(hù)端的DISCOVER報(bào)文后,根據(jù)IP地址分配的規(guī)則選出一個(gè)IP地址,與其他參數(shù)一起通過(guò)OFFER報(bào)文發(fā)送給客戶(hù)端。
③選擇階段:客戶(hù)端選擇IP地址的階段。如果有多臺(tái)服務(wù)器向該客戶(hù)端發(fā)來(lái)OFFER報(bào)文,客戶(hù)端只接受第一個(gè),然后以廣播方式發(fā)送REQUEST報(bào)文,該報(bào)文中包含服務(wù)器在OFFER報(bào)文中分配的IP地址。
④確認(rèn)階段:服務(wù)器確認(rèn)IP地址的階段。服務(wù)器收到REQUEST報(bào)文后,只有被選擇的服務(wù)器會(huì)進(jìn)行如下操作:如果確認(rèn)將該地址分配給該客戶(hù)端,則返回ACK報(bào)文;否則返回NAK報(bào)文,表明該地址不能分配給該客戶(hù)端[3]。
3.系統(tǒng)設(shè)計(jì)
軟件部分采用VC++6.0開(kāi)發(fā)工具設(shè)計(jì)和編譯,程序運(yùn)行在WindowsXP環(huán)境下,程序設(shè)計(jì)的流程如圖2所示??蛻?hù)端程序的具體實(shí)現(xiàn)過(guò)程主要包括:
(1)定義一個(gè)數(shù)據(jù)結(jié)構(gòu),保存程序運(yùn)行中的配置參數(shù),描述如下:
struct dhcp_frm_params
unsigned char op; // 操作類(lèi)型.
unsigned char htype; // client網(wǎng)絡(luò)硬件協(xié)議類(lèi)型.
unsigned char hlen; // client網(wǎng)絡(luò)硬件地址長(zhǎng)度.
unsigned char hops; // 當(dāng)前的DHCP報(bào)文經(jīng)過(guò)的DHCP中繼的數(shù)量.
unsigned int tx_id; // 匹配Server的響應(yīng)報(bào)文是對(duì)哪個(gè)請(qǐng)求報(bào)文的響應(yīng).
unsigned short seconds; // client開(kāi)始DHCP請(qǐng)求后到現(xiàn)在經(jīng)歷的時(shí)間.
unsigned short flags;
unsigned char ciaddr[4]; // 表示client的IP地址.
unsigned char yiaddr[4]; // server分配給client的IP地址.
unsigned char siaddr[4]; // client獲取配置信息的服務(wù)器的IP地址.
unsigned char giaddr[4]; // 記錄第一個(gè)DHCP中繼的IP地址.
unsigned char chaddr[16]; // 記錄client的實(shí)際硬件地址內(nèi)容.
signed char sname[64]; // client獲取配置信息的服務(wù)器的名稱(chēng).
signed char file[128]; // client的配置文件的名稱(chēng).
unsigned char* options; // 包含大量可選的終端初始配置信息.
unsigned int options_len; // options的長(zhǎng)度.
}
(2)為了產(chǎn)生特定的交互報(bào)文,定義了一系列函數(shù),主要函數(shù)描述如下:
根據(jù)配置參數(shù),生成一個(gè)dhcp報(bào)文:
make_up_dhcp_frm(dhcp_frm_params& dhcp_frm, char* buf);
①發(fā)送一個(gè)dhcp-discover報(bào)文;
tx_one_dhcp_disscover_frm();
②判斷收到報(bào)文是否是dhcp-discover報(bào)文的響應(yīng)報(bào)文;
chk_dhcp_discover_response_frm(char*buf, unsigned int dataLen );
③發(fā)送一個(gè)dhcp-request報(bào)文;
tx_one_dhcp_request_frm();
④判斷收到報(bào)文是否是dhcp-request報(bào)文的響應(yīng)報(bào)文;
chk_dhcp_request_response_frm(char *buf, unsigned int dataLen );
⑤查找dhcp-discover的響應(yīng)報(bào)文;
get_dhcp_discover_response_msg();
⑥查找dhcp-request的響應(yīng)報(bào)文;
get_dhcp_request_response_msg();
⑦發(fā)送免費(fèi)的ARP報(bào)文,進(jìn)行地址沖突檢測(cè);
tx_one_gratis_arp_frm();
⑧檢測(cè)對(duì)免費(fèi)ARP的響應(yīng)報(bào)文;
chk_gratis_arp_response_frm();
⑨查找免費(fèi)ARP的響應(yīng)報(bào)文。
get_gratis_arp_response_msg()。
(3)報(bào)文的收發(fā):
當(dāng)由軟件生成交互報(bào)文后,通過(guò)板卡的協(xié)議仿真通道,將數(shù)據(jù)發(fā)送出去。同時(shí),通過(guò)檢測(cè)通道接收到的數(shù)據(jù),獲取服務(wù)器或者其他網(wǎng)絡(luò)節(jié)點(diǎn)發(fā)送的報(bào)文。
在設(shè)計(jì)過(guò)程中,硬件部分實(shí)現(xiàn)創(chuàng)建一個(gè)協(xié)議仿真通道,執(zhí)行數(shù)據(jù)的收發(fā)。軟件部分實(shí)現(xiàn)初始化系統(tǒng)數(shù)據(jù),產(chǎn)生交互過(guò)程中需要的報(bào)文,保存獲取的網(wǎng)絡(luò)參數(shù)。
測(cè)試中使用了某國(guó)產(chǎn)路由器作為DHCP服務(wù)器,將板卡的一個(gè)測(cè)試端口直接與路由器相連,通過(guò)超級(jí)終端以console方式登陸路由器,配置地址池,使能路由器端口的DHCP服務(wù)器功能。啟動(dòng)配置過(guò)程后,在超級(jí)終端中可以看到服務(wù)器成功為客戶(hù)端分配了IP地址,并設(shè)置了地址的過(guò)期時(shí)間。
4.結(jié)語(yǔ)
本文詳細(xì)介紹了DHCP客戶(hù)端如何動(dòng)態(tài)獲取IP地址的過(guò)程,并基于以太網(wǎng)板卡的功能,實(shí)現(xiàn)了一個(gè)DHCP客戶(hù)端,可以用來(lái)測(cè)試從網(wǎng)絡(luò)中獲取地址的能力,對(duì)現(xiàn)有板卡的功能是一個(gè)很好的補(bǔ)充。
參考文獻(xiàn)
[1]邢國(guó)穩(wěn).工業(yè)以太網(wǎng)中DHCP協(xié)議應(yīng)用技術(shù)分析[J].微計(jì)算機(jī)信息,2005,5:30-31.
[2]RFC 2132,DHCP Options and BOOTP Vendor Extensions.
[3]Dynamic Host Configuration Protocol,RFC 2131,1997.