DHCP詳細(xì)介紹
DHCP 是 Dynamic Host Configuration Protocol(動(dòng)態(tài)主機(jī)分配協(xié)議)縮寫,它的前身是 BOOTP。BOOTP 原本是用于無磁盤主機(jī)連接的網(wǎng)絡(luò)上面的:網(wǎng)絡(luò)主機(jī)使用 BOOT ROM 而不是磁盤起動(dòng)并連接上網(wǎng)絡(luò),BOOTP 則可以自動(dòng)地為那些主機(jī)設(shè)定 TCP/IP 環(huán)境。但 BOOTP 有一個(gè)缺點(diǎn):您在設(shè)定前須事先獲得客戶端的硬件地址,而且,與 IP 的對(duì)應(yīng)是靜態(tài)的。換而言之,BOOTP 非常缺乏 "動(dòng)態(tài)性" ,若在有限的 IP 資源環(huán)境中,BOOTP 的一對(duì)一對(duì)應(yīng)會(huì)造成非??捎^的浪費(fèi)。
DHCP 可以說是 BOOTP 的增強(qiáng)版本,它分為兩個(gè)部份:一個(gè)是服務(wù)器端,而另一個(gè)是客戶端。所有的 IP 網(wǎng)絡(luò)設(shè)定數(shù)據(jù)都由 DHCP 服務(wù)器集中管理,并負(fù)責(zé)處理客戶端的 DHCP 要求;而客戶端則會(huì)使用從服務(wù)器分配下來的IP環(huán)境數(shù)據(jù)。比較起 BOOTP ,DHCP 透過 "租約" 的概念,有效且動(dòng)態(tài)的分配客戶端的 TCP/IP 設(shè)定,而且,作為兼容考慮,DHCP 也完全照顧了 BOOTP Client 的需求。
DHCP 的分配形式
首先,必須至少有一臺(tái) DHCP 工作在網(wǎng)絡(luò)上面,它會(huì)監(jiān)聽網(wǎng)絡(luò)的 DHCP 請(qǐng)求,并與客戶端搓商 TCP/IP 的設(shè)定環(huán)境。它提供兩種 IP 定位方式:
Automatic Allocation
自動(dòng)分配,其情形是:一旦 DHCP 客戶端第一次成功的從 DHCP 服務(wù)器端租用到 IP 地址之后,就永遠(yuǎn)使用這個(gè)地址。
Dynamic Allocation
動(dòng)態(tài)分配,當(dāng) DHCP 第一次從 HDCP 服務(wù)器端租用到 IP 地址之后,并非永久的使用該地址,只要租約到期,客戶端就得釋放(release)這個(gè) IP 地址,以給其它工作站使用。當(dāng)然,客戶端可以比其它主機(jī)更優(yōu)先的更新(renew)租約,或是租用其它的 IP 地址。
動(dòng)態(tài)分配顯然比自動(dòng)分配更加靈活,尤其是當(dāng)您的實(shí)際 IP 地址不足的時(shí)候,例如:您是一家 ISP ,只能提供 200 個(gè)IP地址用來給撥接客戶,但并不意味著您的客戶最多只能有 200 個(gè)。因?yàn)橐?,您的客戶們不可能全部同一時(shí)間上網(wǎng)的,除了他們各自的行為習(xí)慣的不同,也有可能是電話線路的限制。這樣,您就可以將這 200 個(gè)地址,輪流的租用給撥接上來的客戶使用了。這也是為什么當(dāng)您查看 IP 地址的時(shí)候,會(huì)因每次撥接而不同的原因了(除非您申請(qǐng)的是一個(gè)固定 IP ,通常的 ISP 都可以滿足這樣的要求,這或許要另外收費(fèi))。當(dāng)然,ISP 不一定使用 DHCP 來分配地址,但這個(gè)概念和使用 IP Pool 的原理是一樣的。
DHCP 除了能動(dòng)態(tài)的設(shè)定 IP 地址之外,還可以將一些 IP 保留下來給一些特殊用途的機(jī)器使用,它可以按照硬件地址來固定的分配 IP 地址,這樣可以給您更大的設(shè)計(jì)空間。同時(shí),DHCP 還可以幫客戶端指定 router、netmask、DNS Server、WINS Server、等等項(xiàng)目,您在客戶端上面,除了將 DHCP 選項(xiàng)打勾之外,幾乎無需做任何的 IP 環(huán)境設(shè)定。
DHCP 的工作原理
根據(jù)客戶端是否第一次登錄網(wǎng)絡(luò),DHCP 的工作形式會(huì)有所不同。
第一次登錄的時(shí)候:
尋找 Server。當(dāng) DHCP 客戶端第一次登錄網(wǎng)絡(luò)的時(shí)候,也就是客戶發(fā)現(xiàn)本機(jī)上沒有任何 IP 數(shù)據(jù)設(shè)定,它會(huì)向網(wǎng)絡(luò)發(fā)出一個(gè) DHCP DISCOVER 封包。因?yàn)榭蛻舳诉€不知道自己屬于哪一個(gè)網(wǎng)絡(luò),所以封包的來源地址會(huì)為 0.0.0.0 ,而目的地址則為 255.255.255.255 ,然后再附上 DHCP discover 的信息,向網(wǎng)絡(luò)進(jìn)行廣播。
在 Windows 的預(yù)設(shè)情形下,DHCP discover 的等待時(shí)間預(yù)設(shè)為 1 秒,也就是當(dāng)客戶端將第一個(gè) DHCP discover 封包送出去之后,在 1 秒之內(nèi)沒有得到響應(yīng)的話,就會(huì)進(jìn)行第二次 DHCP discover 廣播。若一直得不到響應(yīng)的情況下,客戶端一共會(huì)有四次 DHCP discover 廣播(包括第一次在內(nèi)),除了第一次會(huì)等待 1 秒之外,其余三次的等待時(shí)間分別是 9、13、16 秒。如果都沒有得到 DHCP 服務(wù)器的響應(yīng),客戶端則會(huì)顯示錯(cuò)誤信息,宣告 DHCP discover 的失敗。之后,基于使用者的選擇,系統(tǒng)會(huì)繼續(xù)在 5 分鐘之后再重復(fù)一次 DHCP discover 的過程。
提供 IP 租用地址。當(dāng) DHCP 服務(wù)器監(jiān)聽到客戶端發(fā)出的 DHCP discover 廣播后,它會(huì)從那些還沒有租出的地址范圍內(nèi),選擇最前面的空置 IP ,連同其它 TCP/IP 設(shè)定,響應(yīng)給客戶端一個(gè) DHCP OFFER 封包。
由于客戶端在開始的時(shí)候還沒有 IP 地址,所以在其 DHCP discover 封包內(nèi)會(huì)帶有其 MAC 地址信息,并且有一個(gè) XID 編號(hào)來辨別該封包,DHCP 服務(wù)器響應(yīng)的 DHCP offer 封包則會(huì)根據(jù)這些資料傳遞給要求租約的客戶。根據(jù)服務(wù)器端的設(shè)定,DHCP offer 封包會(huì)包含一個(gè)租約期限的信息。
接受 IP 租約。如果客戶端收到網(wǎng)絡(luò)上多臺(tái) DHCP 服務(wù)器的響應(yīng),只會(huì)挑選其中一個(gè) DHCP offer 而已(通常是最先抵達(dá)的那個(gè)),并且會(huì)向網(wǎng)絡(luò)發(fā)送一個(gè)DHCP request廣播封包,告訴所有 DHCP 服務(wù)器它將指定接受哪一臺(tái)服務(wù)器提供的 IP 地址。
同時(shí),客戶端還會(huì)向網(wǎng)絡(luò)發(fā)送一個(gè) ARP 封包,查詢網(wǎng)絡(luò)上面有沒有其它機(jī)器使用該 IP 地址;如果發(fā)現(xiàn)該 IP 已經(jīng)被占用,客戶端則會(huì)送出一個(gè) DHCPDECLINE 封包給 DHCP 服務(wù)器,拒絕接受其 DHCP offer ,并重新發(fā)送 DHCP discover 信息。
事實(shí)上,并不是所有 DHCP 客戶端都會(huì)無條件接受 DHCP 服務(wù)器的 offer ,尤其這些主機(jī)安裝有其它 TCP/IP 相關(guān)的客戶軟件??蛻舳艘部梢杂?DHCP request 向服務(wù)器提出 DHCP 選擇,而這些選擇會(huì)以不同的號(hào)碼填寫在 DHCP Option Field 里面:
換一句話說,在 DHCP 服務(wù)器上面的設(shè)定,未必是客戶端全都接受,客戶端可以保留自己的一些 TCP/IP 設(shè)定。而主動(dòng)權(quán)永遠(yuǎn)在客戶端這邊。
租約確認(rèn)。當(dāng) DHCP 服務(wù)器接收到客戶端的 DHCP request 之后,會(huì)向客戶端發(fā)出一個(gè) DHCPACK 響應(yīng),以確認(rèn) IP 租約的正式生效,也就結(jié)束了一個(gè)完整的 DHCP 工作過程。
DHCP 發(fā)放流程
第一次登錄之后:
一旦 DHCP 客戶端成功地從服務(wù)器哪里取得 DHCP 租約之后,除非其租約已經(jīng)失效并且 IP 地址也重新設(shè)定回 0.0.0.0 ,否則就無需再發(fā)送 DHCP discover 信息了,而會(huì)直接使用已經(jīng)租用到的 IP 地址向之前之 DHCP 服務(wù)器發(fā)出 DHCP request 信息,DHCP 服務(wù)器會(huì)盡量讓客戶端使用原來的 IP 地址,如果沒問題的話,直接響應(yīng) DHCPack 來確認(rèn)則可。如果該地址已經(jīng)失效或已經(jīng)被其它機(jī)器使用了,服務(wù)器則會(huì)響應(yīng)一個(gè) DHCPNACK 封包給客戶端,要求其從新執(zhí)行 DHCP discover。
至于 IP 的租約期限卻是非??季康?,并非如我們租房子那樣簡(jiǎn)單, 以 NT 為例子:DHCP 工作站除了在開機(jī)的時(shí)候發(fā)出 DHCP request 請(qǐng)求之外,在租約期限一半的時(shí)候也會(huì)發(fā)出 DHCP request ,如果此時(shí)得不到 DHCP 服務(wù)器的確認(rèn)的話,工作站還可以繼續(xù)使用該 IP ;然后在剩下的租約期限的再一半的時(shí)候(即租約的75%),還得不到確認(rèn)的話,那么工作站就不能擁有這個(gè) IP 了。至于為什么不是到租約期限完全結(jié)束才放棄 IP 呢?,對(duì)不起,小弟也是不學(xué)無術(shù)之人,沒有去深究了,只知道要回答 MCSE 題目的時(shí)候,您一定要記得 NT 是這么工作的就是了。
要是您想退租,可以隨時(shí)送出 DHCPLEREASE 命令解約,就算您的租約在前一秒鐘才獲得的。
跨網(wǎng)絡(luò)的 DHCP 運(yùn)作
從前面描述的過程中,我們不難發(fā)現(xiàn):DHCDISCOVER 是以廣播方式進(jìn)行的,其情形只能在同一網(wǎng)絡(luò)之內(nèi)進(jìn)行,因?yàn)?router 是不會(huì)將廣播傳送出去的。但如果 DHCP 服務(wù)器安設(shè)在其它的網(wǎng)絡(luò)上面呢?由于 DHCP 客戶端還沒有 IP 環(huán)境設(shè)定,所以也不知道 Router 地址,而且有些 Router 也不會(huì)將 DHCP 廣播封包傳遞出去,因此這情形下 DHCP DISCOVER 是永遠(yuǎn)沒辦法抵達(dá) DHCP 服務(wù)器那端的,當(dāng)然也不會(huì)發(fā)生 OFFER 及其它動(dòng)作了。要解決這個(gè)問題,我們可以用 DHCP Agent (或 DHCP Proxy )主機(jī)來接管客戶的 DHCP 請(qǐng)求,然后將此請(qǐng)求傳遞給真正的 DHCP 服務(wù)器,然后將服務(wù)器的回復(fù)傳給客戶。這里,Proxy 主機(jī)必須自己具有路由能力,且能將雙方的封包互傳對(duì)方。
若不使用 Proxy,您也可以在每一個(gè)網(wǎng)絡(luò)之中安裝 DHCP 服務(wù)器,但這樣的話,一來設(shè)備成本會(huì)增加,而且,管理上面也比較分散。當(dāng)然嘍,如果在一個(gè)十分大型的網(wǎng)絡(luò)中,這樣的均衡式架構(gòu)還是可取的。端視您的實(shí)際情況而定了。