正如我們前面看到的當(dāng)使用TCP/IP協(xié)定的時候如果要電腦之間能夠直接傳遞信息就必須使用相同的NetID和不同的HostID。這樣您就得為每臺電腦設(shè)定IP以及管理好紀(jì)錄。要是您想管理好一個比較大的網(wǎng)路或是電腦節(jié)點(diǎn)經(jīng)常改變(如撥接網(wǎng)路)這樣的工作可以說是非常令人煩厭的而且出錯的機(jī)會也比較多。另外如果在進(jìn)行IP重新規(guī)劃的時候其工作量也是相當(dāng)驚人的。
面對這些情形DHCP可以說您的菩薩了它不但救苦救難而且神通廣大。下面就讓我們一起揭開DHCP的神秘面紗
什麼是DHCP
DHCP是DynamicHostConfigurationProtocol之縮寫它的前身是BOOTP。BOOTP原本是用於無磁碟主機(jī)連接的網(wǎng)路上面的網(wǎng)路主機(jī)使用BOOTROM而不是磁碟起動并連接上網(wǎng)路BOOTP則可以自動地為那些主機(jī)設(shè)定TCP/IP環(huán)境。
DHCP可以說是BOOTP的增強(qiáng)版本它分為兩個部份一個是伺服器端而另一個是客戶端。所有的IP網(wǎng)路設(shè)定資料都由DHCP伺服器集中管理并負(fù)責(zé)處理客戶端的HDCP要求而客戶端則會使用從伺服器分配下來的IP環(huán)境資料。
DHCP的功能
首先必須有一臺DHCP工作在網(wǎng)路上面它會監(jiān)聽網(wǎng)路的DHCP請求它提供兩種IP定位方式
AutomaticAllocation
自動分配其情形是一旦DHCP客戶端第一次成功的從DHCP伺服器端租用到IP位址之後就永遠(yuǎn)使用這個位址。
DynamicAllocation
動態(tài)分配當(dāng)DHCP第一次從HDCP伺服器端租用到IP位址之後并非永久的使用該位址只要租約到期客戶端就得釋放(release)這個IP位址以給其它工作站使用。當(dāng)然客戶端也可以延續(xù)(renew)租約或是租用其它的IP位址。
動態(tài)分配顯然比自動分配更加靈活尤其是當(dāng)您的實(shí)際IP位址不足的時候例如您是一家ISP只能提供200個IP位址用來給撥接客戶但并不意味著您的客戶最多只能有200個。因?yàn)橐滥目蛻魝儾豢赡苋客粫r間上網(wǎng)的除了他們各自的行為習(xí)慣的不同也有可能是電話線路的限制。這樣您就可以將這200個地址輪流的租用給撥接上來的客戶使用了。這也是為什麼當(dāng)您用winipcfg來查看您的IP地址的時候會因每次接撥而不同的原因了(除非您申請的是一個固定IP通常的ISP都可以滿足這樣的要求當(dāng)然可能要另外收費(fèi)啦)。當(dāng)然ISP不一定使用DHCP來分配地址但和使用IPPool的原理是一樣的。
DHCP除了能動態(tài)的設(shè)定IP位址之外還可以將一些IP保留下來給一些特殊用途的機(jī)器使用也可以按照MAC地址來分配固定的IP地址這樣可以給您更大的設(shè)計空間。同時DHCP還可以幫客戶端指定網(wǎng)路網(wǎng)關(guān)routerNetMaskDNS伺服器WINS伺服器等等項(xiàng)目您在客戶端上面除了將DHCP選項(xiàng)打勾之外幾乎無需做任何的IP環(huán)境設(shè)定。
DHCP的工作形式
視乎客戶端是否第一次登錄網(wǎng)路DHCP的工作形式會有所不同。
第一次登錄的時候
IP租用要求當(dāng)DHCP客戶端第一次登錄網(wǎng)路的時候也就是客戶發(fā)現(xiàn)本機(jī)上沒有任何IP資料設(shè)定它會向網(wǎng)路發(fā)出一個Dhcpdiscover封包。因?yàn)榭蛻舳诉€不知道自己屬於哪一個網(wǎng)路所以封包的來源地址會為0.0.0.0而目的地址則為255.255.255.255然後再附上Dhcpdiscover的信息向網(wǎng)路進(jìn)行廣播。
Dhcpdiscover的等待時間預(yù)設(shè)為1秒也就是當(dāng)客戶端將第一個Dhcpdiscover封包送出去之後在1秒之內(nèi)沒有得到回應(yīng)的話就會進(jìn)行第二次Dhcpdiscover廣播。在得不到回應(yīng)的情況下客戶端一共會有四次Dhcpdiscover廣播(包括第一次在內(nèi))除了第一次會等待1秒之外其余三次的等待時間分別是91316秒。如果都沒有得到DHCP伺服器的回應(yīng)客戶端則會顯示錯誤信息宣告Dhcpdiscover的失敗。之後基於使用者的選擇系統(tǒng)會繼續(xù)在5分鐘之後再重一次Dhcpdiscover的要求。
提供IP租用位址當(dāng)DHCP伺服器監(jiān)聽到客戶端發(fā)出的Dhcpdiscover廣播後它會從那些還沒有租出的位址圍內(nèi)選擇最前面的的空置IP回應(yīng)給客戶端一個Dhcpoffer封包。
由於客戶端在開始的時候還沒有IP地址所以在其Dhcpdiscover封包內(nèi)會帶有其MAC地址信息并且有一個XID編號來辨別該封包DHCP伺服器回應(yīng)的Dhcpoffer封包則會根據(jù)這些資料傳遞給要求租約的客戶。根據(jù)伺服器端的設(shè)定Dhcpoffer封包會包含一個租約期限的信息。
接受IP租約如果客戶端收到網(wǎng)路上多臺DHCP伺服器的回應(yīng)只理會最先收到的Dhcpoffer并且會向網(wǎng)路發(fā)送一個Dhcprequest廣播封包告訴所有DHCP伺服器它將指定接受哪一臺伺服器提供的IP地址。
同時客戶端還會向網(wǎng)路發(fā)送一個ARP(AddressResolutionProtocol我們將會在下面碰到)封包查詢網(wǎng)路上面有沒有其它機(jī)器使用該IP地址如果發(fā)現(xiàn)該IP已經(jīng)被占用客戶端則會送出一個Dhcpdeclient封包給DHCP伺服器拒絕接受其Dhcpoffer并重新發(fā)送Dhcpdiscover信息。
事實(shí)上并不是所有DHCP客戶端都會無條件接受DHCP伺服器的offer尤其這些主機(jī)安裝有其它TCP/IP相關(guān)的客戶軟體。客戶端也可以用Dhcprequest向伺服器提出DHCP選擇而這些選擇會以不同的號碼填寫在DHCPOptionField里面
號碼代表意思
01Sub-netMask
03RouterAddress
06DNSServerAddress
0FDomainName
2CWINS/NBNSServerAddress
2EWINS/NBTNodeType
2FNetBIOSScopeID
換一句話說在DHCP伺服器上面的設(shè)定未必和所有客戶端都一致客戶端可以保留自己的一些TCP/IP設(shè)定。
IP租約確認(rèn)當(dāng)DHCP伺服器接收到客戶端的Dhcprequest之後會向客戶端發(fā)出一個Dhcpack回應(yīng)以確認(rèn)IP租約的正式生效也就結(jié)束了一個完整的DHCP工作過程。
第一次登錄之後
一旦DHCP客戶端成功地從伺服器哪里取得DHCP租約之後除非其租約已經(jīng)失效并且IP地址也重新設(shè)定回0.0.0.0否則就無需再發(fā)送Dhcpdiscover信息了而會直接使用已經(jīng)租用到的IP地址向DHCP伺服器發(fā)出Dhcprequest信息DHCP伺服器會量讓客戶端使用原來的IP地址如果沒問題的話直接回應(yīng)Dhcpack來確認(rèn)則可。如果該地址已經(jīng)失效或已經(jīng)被其它機(jī)器使用了伺服器則會回應(yīng)一個Dhcpnack封包給客戶端要求其從新執(zhí)行Dhcpdiscover。
至於IP的租約期限卻是非常考究的并非如我們租房子那樣簡單以NT為例子DHCP工作站除了在開機(jī)的時候發(fā)出dhcprequest請求之外在租約期限一半的時候也會發(fā)出dhcprequest如果此時得不到DHCP伺服器的確認(rèn)的話工作站還可以繼續(xù)使用該IP然後在剩下的租約期限的再一半的時候(即租約的75%)還得不到確認(rèn)的話那麼工作站就不能擁有這個IP了。至於為什麼不是到租約期限完全結(jié)束才放棄IP呢對不起小弟也是不學(xué)無術(shù)之人沒有去深究了只知道要回答MCSE問題的時候您一定要記得NT是這麼工作的就是了。
當(dāng)然您也可以隨時使用命令將DHCP租約release掉啦就算您的租約在前一秒鐘才獲得的。
跨網(wǎng)路的DHCP運(yùn)作
以上的情形是在同一網(wǎng)路之內(nèi)進(jìn)行的但如果DHCP伺服器安設(shè)在其它的網(wǎng)路上面呢由DHCP客戶端還沒有IP環(huán)境設(shè)定所以也不知道Router地址而且有些Router也不一定會將DHCP廣播封包傳遞出去這時候我們可以用DHCPAgent(或DHCPProxy)主機(jī)來接管客戶的DHCP請求然後將此請求傳遞給真正的DHCP伺服器然後將伺服器的回覆傳給客戶。這里Proxy主機(jī)必須自己具有routing能力。
當(dāng)然您也可以在每一個網(wǎng)路之中安裝DHCP伺服器但這樣的話一來設(shè)備成本會增加而且管理上面也比較分散。當(dāng)然如果在一個十分大型的網(wǎng)路中這樣的均衡式架構(gòu)還是可取的。


