D HCP協定


正如我們前面看到的﹐當使用TCP/IP協定的時候﹐如果要電腦之間能夠直接傳遞信息﹐就必須使用相同的Net ID和不同的Host ID。這樣﹐您就得為每台電腦設定IP﹐以及管理好紀錄。要是您想管理好一個比較大的網路﹐或是電腦節點經常改變(如撥接網路)﹐這樣的工作可以說是非常令人煩厭的﹐而且出錯的機會也比較多。另外﹐如果在進行IP重新規劃的時候﹐其工作量也是相當驚人的。

面對這些情形﹐DHCP可以說您的菩薩了﹕它不但救苦救難﹐而且神通廣大。下面就讓我們一起揭開DHCP的神秘面紗﹕

什麼是DHCP﹖

DHCP是Dynamic Host Configuration Protocol之縮寫﹐它的前身是BOOTP。BOOTP原本是用於無磁碟主機連接的網路上面的﹕網路主機使用BOOT ROM而不是磁碟起動並連接上網路﹐BOOTP則可以自動地為那些主機設定TCP/IP環境。

DHCP可以說是BOOTP的增強版本﹐它分為兩個部份﹕一個是伺服器端﹐而另一個是客戶端。所有的IP網路設定資料都由DHCP伺服器集中管理﹐並負責處理客戶端的HDCP要求﹔而客戶端則會使用從伺服器分配下來的IP環境資料。

DHCP的功能

首先﹐必須有一台DHCP工作在網路上面﹐它會監聽網路的DHCP請求﹐它提供兩種IP定位方式﹕

Automatic Allocation
自動分配﹐其情形是﹕一旦DHCP客戶端第一次成功的從DHCP伺服器端租用到IP位址之後﹐就永遠使用這個位址。

Dynamic Allocation
動態分配﹐當DHCP第一次從HDCP伺服器端租用到IP位址之後﹐並非永久的使用該位址﹐只要租約到期﹐客戶端就得釋放(release)這個IP位址﹐以給其它工作站使用。當然﹐客戶端也可以延續(renew)租約﹐或是租用其它的IP位址。
動態分配顯然比自動分配更加靈活﹐尤其是當您的實際IP位址不足的時候﹐例如﹕您是一家ISP﹐只能提供200個IP位址用來給撥接客戶﹐但並不意味著您的客戶最多只能有200個。因為要知道﹐您的客戶們不可能全部同一時間上網的﹐除了他們各自的行為習慣的不同﹐也有可能是電話線路的限制。這樣﹐您就可以將這200個地址﹐輪流的租用給撥接上來的客戶使用了。這也是為什麼當您用winipcfg來查看您的IP地址的時候﹐會因每次接撥而不同的原因了(除非您申請的是一個固定IP﹐通常的ISP都可以滿足這樣的要求﹐當然﹐可能要另外收費啦)。當然﹐ISP 不一定使用 DHCP 來分配地址﹐但和使用 IP Pool 的原理是一樣的。

DHCP除了能動態的設定IP位址之外﹐還可以將一些IP保留下來給一些特殊用途的機器使用﹐也可以按照MAC地址來分配固定的IP地址﹐這樣可以給您更大的設計空間。同時﹐DHCP還可以幫客戶端指定網路、網關、router、Net Mask、DNS伺服器、WINS伺服器、等等項目﹐您在客戶端上面﹐除了將DHCP選項打勾之外﹐幾乎無需做任何的IP環境設定。

DHCP的工作形式

視乎客戶端是否第一次登錄網路﹐DHCP的工作形式會有所不同。

第一次登錄的時候

  1. IP租用要求﹐當DHCP客戶端第一次登錄網路的時候﹐也就是客戶發現本機上沒有任何IP資料設定﹐它會向網路發出一個Dhcpdiscover封包。因為客戶端還不知道自己屬於哪一個網路﹐所以封包的來源地址會為0.0.0.0﹐而目的地址則為255.255.255.255﹐然後再附上Dhcpdiscover的信息﹐向網路進行廣播。

    Dhcpdiscover的等待時間預設為1秒﹐也就是當客戶端將第一個Dhcpdiscover封包送出去之後﹐在1秒之內沒有得到回應的話﹐就會進行第二次Dhcpdiscover廣播。在得不到回應的情況下﹐客戶端一共會有四次Dhcpdiscover廣播(包括第一次在內)﹐除了第一次會等待1秒之外﹐其余三次的等待時間分別是9、13、16秒。如果都沒有得到DHCP伺服器的回應﹐客戶端則會顯示錯誤信息﹐宣告Dhcpdiscover的失敗。之後﹐基於使用者的選擇﹐系統會繼續在5分鐘之後再重複一次Dhcpdiscover的要求。

  2. 提供IP租用位址﹐當DHCP伺服器監聽到客戶端發出的Dhcpdiscover廣播後﹐它會從那些還沒有租出的位址範圍內﹐選擇最前面的的空置IP回應給客戶端一個Dhcpoffer封包。

    由於客戶端在開始的時候還沒有IP地址﹐所以在其Dhcpdiscover封包內會帶有其MAC地址信息﹐並且有一個XID編號來辨別該封包﹐DHCP伺服器回應的Dhcpoffer封包則會根據這些資料傳遞給要求租約的客戶。根據伺服器端的設定﹐Dhcpoffer封包會包含一個租約期限的信息。

  3. 接受IP租約﹐如果客戶端收到網路上多台DHCP伺服器的回應﹐只理會最 先收到的Dhcpoffer﹐並且會向網路發送一個Dhcprequest廣播封包﹐告訴所有DHCP伺服器它將指定接受哪一台伺服器提供的IP地址。

    同時﹐客戶端還會向網路發送一個ARP (Address Resolution Protocol﹐我們將會在下面碰到)封包﹐查詢網路上面有沒有其它機器使用該IP地址﹔如果發現該IP已經被佔用﹐客戶端則會送出一個Dhcpdeclient封包給DHCP伺服器﹐拒絕接受其Dhcpoffer﹐並重新發送Dhcpdiscover信息。

    事實上﹐並不是所有DHCP客戶端都會無條件接受DHCP伺服器的offer﹐尤其這些主機安裝有其它TCP/IP相關的客戶軟體。客戶端也可以用Dhcprequest向伺服器提出DHCP選擇﹐而這些選擇會以不同的號碼填寫在DHCP Option Field裡面﹕

    號碼 代表意思
    01 Sub-net Mask
    03 Router Address
    06 DNS Server Address
    0F Domain Name
    2C WINS/NBNS Server Address
    2E WINS/NBT Node Type
    2F NetBIOS Scope ID

    換一句話說﹐在DHCP伺服器上面的設定﹐未必和所有客戶端都一致﹐客戶端可以保留自己的一些TCP/IP設定。

  4. IP租約確認﹐當DHCP伺服器接收到客戶端的Dhcprequest之後﹐會向客戶端發出一個Dhcpack回應﹐以確認IP租約的正式生效﹐也就結束了一個完整的DHCP工作過程。

第一次登錄之後

一旦DHCP客戶端成功地從伺服器哪裡取得DHCP租約之後﹐除非其租約已經失效並且IP地址也重新設定回0.0.0.0﹐否則就無需再發送Dhcpdiscover信息了﹐而會直接使用已經租用到的IP地址向DHCP伺服器發出Dhcprequest信息﹐DHCP伺服器會儘量讓客戶端使用原來的IP地址﹐如果沒問題的話﹐直接回應Dhcpack來確認則可。如果該地址已經失效或已經被其它機器使用了﹐伺服器則會回應一個Dhcpnack封包給客戶端﹐要求其從新執行Dhcpdiscover。

至於IP的租約期限卻是非常考究的﹐並非如我們租房子那樣簡單﹐ 以NT為例子﹕DHCP工作站除了在開機的時候發出dhcprequest請求之外﹐在租約期限一半的時候也會發出dhcprequest﹐如果此時得不到DHCP伺服器的確認的話﹐工作站還可以繼續使用該IP﹔然後在剩下的租約期限的再一半的時候(即租約的75%)﹐還得不到確認的話﹐那麼工作站就不能擁有這個IP了。至於為什麼不是到租約期限完全結束才放棄IP呢﹖﹐對不起﹐小弟也是不學無術之人﹐沒有去深究了﹐只知道要回答MCSE問題的時候﹐您一定要記得NT是這麼工作的就是了。

當然﹐您也可以隨時使用命令將DHCP租約release掉啦﹐就算您的租約在前一秒鐘才獲得的。

跨網路的DHCP運作

以上的情形是在同一網路之內進行的﹐但如果DHCP伺服器安設在其它的網路上面呢﹖由于DHCP客戶端還沒有IP環境設定﹐所以也不知道Router地址﹐而且有些Router也不一定會將DHCP廣播封包傳遞出去﹐這時候我們可以用 DHCP Agent (或DHCP Proxy)主機來接管客戶的DHCP請求﹐然後將此請求傳遞給真正的DHCP伺服器﹐然後將伺服器的回覆傳給客戶。這裡﹐Proxy主機必須自己具有routing能力。

當然﹐您也可以在每一個網路之中安裝DHCP伺服器﹐但這樣的話﹐一來設備成本會增加﹐而且﹐管理上面也比較分散。當然﹐如果在一個十分大型的網路中﹐這樣的均衡式架構還是可取的。

 

 

 


© 2000 Netman 網中人
Last Updated: March 28, 2000