一、DHCP服務是什么
DHCP稱為動態主機配置協議。DHCP服務允許工作站連接到網絡並且自動獲取一個IP地址。配置DHCP服務的服務器可以為每一個網絡客戶提供一個IP地址、子網掩碼、缺省網關、一個WINS服務器的IP地址,以及一個DNS服務器的IP地址。
二、DHCP服務在實際應用中的常見問題
1、在一個子網內是否可以存在多台DHCP服務器,如果存在的話,那么該子網中的客戶機能否正確獲取地址,將會獲取哪個DHCP服務器所分配的地址,是否能控制客戶機器能從管理人員所設置的DHCP服務器中獲取地址而不會從一些非法用戶自建的DHCP服務器中取得非法得IP?
2、如果網絡中存在多個子網,而子網的客戶機需要DHCP服務器提供地址配置,那么是采取在各個子網都安裝一台DHCP服務器,還是只在某一個子網中安裝DHCP服務器,讓它為多個子網的客戶機分配IP地址,應該如何實現?
3、如果采取在一個子網中安裝DHCP服務器,讓它為多個子網的客戶機分配IP地址,那么應該需要在一台DHCP服務器中創建多個不同范圍的作用域,而我們如何可以准確地保證相應范圍的地址峙涓嚶ψ油刂骰兀?
4、如果客戶機器無法從DHCP服務器中獲取IP地址,那么Windows2000客戶機器將會如何處理自己的TCP/IP設置?
三、DHCP的工作原理
要解析第二點中所提的問題,首先要搞清楚DHCP的實際的工作過程及原理,下面就對此做簡單介紹:DHCP是一個基於廣播的協議,它的操作可以歸結為四個階段,這些階段是IP租用請求、IP租用提供、IP租用選擇、IP租用確認。
1. 尋找Server。當DHCP客戶端第一次登錄網路的時候﹐也就是客戶發現本機上沒有任何IP資料設定﹐它會向網路發出一個DHCPDISCOVER封包。因為客戶端還不知道自己屬於哪一個網路﹐所以封包的來源地址會為0.0.0.0﹐而目的地址則為255.255.255.255﹐然后再附上DHCPdiscover的信息﹐向網路進行廣播。網絡上每一台安裝了TCP/IP協議的主機都會接收到這種廣播信息,但只有DHCP服務器才會做出響應.DHCPdiscover的等待時間預設為1秒也就是當客戶端將第一個DHCPdiscover封包送出去之后在1秒之內沒有得到回應的話就會進行第二次DHCPdiscover廣播。在得不到回應的情況下客戶端一共會有四次DHCPdiscover廣播(包括第一次在內)除了第一次會等待1秒之外其余三次的等待時間分別是9 13 16秒。如果都沒有得到DHCP服務器的回應客戶端則會顯示錯誤信息宣告DHCPdiscover的失敗。之后基於使用者的選擇系統會繼續在5分鍾之后再重一次DHCPdiscover的要求。
2. 提供IP租用位址。當DHCP服務器監聽到客戶端發出的DHCPdiscover廣播后﹐它會從那些還沒有租出的位址范圍內﹐選擇最前面的的空置IP,連同其它TCP/IP設定,回應給客戶端一個DHCPOFFER封包。由於客戶端在開始的時候還沒有IP位址﹐所以在其DHCPdiscover封包內會帶有其MAC位址信息﹐並且有一個XID編號來辨別該封包﹐DHCP服務器回應的DHCPoffer封包則會根據這些資料傳遞給要求租約的客戶。根據服務器端的設定﹐DHCPoffer封包會包含一個租約期限的信息。
3. 接受IP租約。如果客戶端收到網路上多台DHCP服務器的回應﹐只會挑選其中一個DHCPoffer(通常是最先抵達的那個)﹐並且會向網路發送一個DHCPrequest廣播封包﹐告訴所有DHCP服務器它將指定接受哪一台服務器提供的IP位址。之所以要以廣播方式回答,是為了通知所有的DHCP服務器,他將選擇某台DHCP服務器所提供的IP地址同時﹐客戶端還會向網路發送一個ARP封包﹐查詢網路上面有沒有其它機器使用該IP位址﹔如果發現該IP已經被占用﹐客戶端則會送出一個DHCPDECLINE封包給DHCP服務器﹐拒絕接受其DHCPoffer﹐並重新發送DHCPdiscover信息。事實上﹐並不是所有DHCP客戶端都會無條件接受DHCP服務器的offer﹐尤其這些主機安裝有其它TCP/IP相關的客戶軟件。客戶端也可以用DHCPrequest向服務器提出DHCP選擇﹐而這些選擇會以不同的號碼填寫在DHCPOptionField里面。換一句話說﹐在DHCP服務器上面的設定﹐未必是客戶端全都接受﹐客戶端可以保留自己的一些TCP/IP設定。而主動權永遠在客戶端這邊。
4. 確認階段。即DHCP服務器確認所提供的IP地址的階段。當DHCP服務器收到DHCP客戶機回答的DHCPrequest請求信息之后,它便向DHCP客戶機發送一個包含它所提供的IP地址和其他設置的DHCPack確認信息,告訴DHCP客戶機可以使用它所提供的IP地址。然后DHCP客戶機便將其TCP/IP協議與網卡綁定,另外,除DHCP客戶機選中的服務器外,其他的DHCP服務器都將收回曾提供的IP地址
5. 重新登錄。以后DHCP客戶機每次重新登錄網絡時,就不需要再發送DHCPdiscover發現信息了,而是直接發送包含前一次所分配的IP地址的DHCPrequest請求信息。當DHCP服務器收到這一信息后,它會嘗試讓DHCP客戶機繼續使用原來的IP地址,並回答一個DHCPack確認信息。如果此IP地址已無法再分配給原來的DHCP客戶機使用時(比如此IP地址已分配給其它DHCP客戶機使用),則DHCP服務器給DHCP客戶機回答一個DHCPnack否認信息。當原來的DHCP客戶機收到此DHCPnack否認信息后,它就必須重新發送DHCPdiscover發現信息來請求新的IP地址。
6. 更新租約。DHCP服務器向DHCP客戶機出租的IP地址一般都有一個租借期限,期滿后DHCP服務器便會收回出租的IP地址。如果DHCP客戶機要延長其IP租約,則必須更新其IP租約。DHCP客戶機啟動時和IP租約期限過一半時,DHCP客戶機都會自動向DHCP服務器發送更新其IP租約的信息。至於IP的租約期限卻是非常考究的﹐並非如我們租房子那樣簡單﹐DHCP客戶機除了在開機的時候發出DHCPrequest請求之外﹐在租約期限一半的時候也會發出DHCPrequest﹐如果此時得不到DHCP服務器的確認的話﹐工作站還可以繼續使用該IP﹔然后在剩下的租約期限的再一半的時候(即租約的75%)﹐還得不到確認的話﹐那么工作站就不能擁有這個IP了。要是您想退租,可以隨時送出DHCPLEREASE命令解約﹐就算您的租約在前一秒鍾才獲得的.
四、DHCP服務常見問題的解決方案
本文第二點中我們所提出的問題有四點,以下就此4個問題做相應的分析並給出我個人的一些解決方案,相信可以對學習DHCP服務的自學者會有一定的幫助,這些問題也是在實際教學中學生提出疑問最多的知識難點。
1、根據客戶計算機的IP租用原理可以知道,在一個子網內,如果存在多台DHCP服務器來提供地址配置信息,這是不違反請求、分配原則的,因為只要中有一台客戶計算機在該子網中提出IP地址租約請求,由於請求是廣播形式的,所以在子網中可以有任意數量的特定DHCP服務器響應一個IP租用請求,而客戶請求后選中的是這些任意特定DHCP服務器中的某一台,這個選擇具有隨機性,但有一點要注意的是客戶只能為每一張網絡接口卡接受一個租用提供,上面所謂特定的DHCP服務器是指那些經過系統授權的DHCP服務器,而非授權的DHCP服務器將無法在網絡中提供正常的地址分配服務,這一點非常重要,因為這樣一來客戶機器將只會在管理員設定的地址范圍中取得地址,Windows 2000操作系統的這一新增功能,通過對DHCP服務器進行認證避免了非法DHCP服務器分配非法IP地址造成的IP地址沖突,在實際應用中,客戶機器獲取非法的地址經常是造成網絡癱瘓和無法正常通訊的一大原因。綜合上面的分析可以做出第一個問題的結論:在一個子網中可以存在多台DHCP服務器來提供地址分配,但能夠作為地址提供的不是任意的DHCP服務器,而應該是經過系統認證的那些,客戶機請求地址時最終從那一台經過認證機器中獲取時隨機的。此外,從另一個角度看,在相同子網上使用多個 DHCP 服務器,將為它所服務的 DHCP 客戶機提供更強的容錯能力,如下圖所示,在一個子網內(網絡號為192.168.1.0 掩碼為255.255.255.0)共用兩個 DHCP 服務器,其中的DHCP服務器1不可用的話,DHCP服務器2可以取代它並繼續租用新的地址或續訂現有客戶機。可以建議采用的解決方案是使用 80/20 規則來划分兩個 DHCP 服務器之間的作用域地址,具體做法可以是將服務器 1 配置成可使用大多數地址(約 80%),服務器 2 可以配置成讓客戶機使用其他地址(約 20%)。
2、如果在一個網絡中存在多個子網,而多個子網的主機都需要DHCP服務器來提供地址配置信息,那么我們可以采用的方法是在每一個子網中安裝一台DHCP服務器,讓它們來為各個子網分配IP地址,但從節約資源利用出發,我們一般情況下不這樣做,可以采取在一個子網中安裝DHCP服務器,讓它來為多個子網分配IP地址,實現多子網地址分配可以借助DHCP的中繼代理功能實現,而作為中繼代理的設備可以是一台提供中繼代理程序的Windows2000服務器或是一個符合RFC1542規定的路由器,具備 DHCP/ BOOTP Relay Agent 的功能(DHCP relay agent能夠把 DHCP/BOOTP 廣播信息從一個網段轉播到另一個網段上)。以管理的局域網分為三個子網,用Win2000服務器連接。
下面是實現跨子網使用DHCP服務器的具體解決方案:
(1)安裝DHCP中繼代理程序:在Windows2000服務器的“路由和遠程訪問”窗口中,依次展開“本地服務器→IP路由選擇→常規”選項,右鍵點擊“常規”選項,在彈出的菜單中選擇“新增路由協議”,然后在“新路由協議”窗口中選擇“DHCP中繼代理程序”,接着點擊“確定”按鈕。
(2)指定DHCP服務器:右鍵點擊剛剛添加的“DHCP中繼代理程序”選項,在彈出菜單中選擇“屬性”,進入“DHCP中繼代理程序屬性”對話框,在“常規”標簽頁的“服務器地址”欄中輸入子網1中DHCP服務器的IP地址:192.168.1.2,然后點擊“添加”按鈕,最后點擊“確定”按鈕關閉該對話框。
(3)配置訪問接口:右鍵點擊“DHCP中繼代理程序”選項,在彈出菜單中選擇“新增接口”,然后在“DHCP中繼代理程序的新接口”對話框中的“接口”列表框中選中可以訪問子網1中的DHCP服務器的接口,這里新增的接口應該是接口二和接口三,接着點擊“確定”按鈕。然后在彈出的“DHCP中繼站屬性”對話框中,選中“中繼DHCP數據包”選項,這樣就啟用了它的中繼功能,最后點擊“確定”按鈕。
(4)DHCP服務器中配置一個超級作用域,其中包含三個普通作用域,作用域地址范圍可以分別設置為192.168.1.10~192.168.1.254(分配給子網1的PC使用);192.168.2.10~192.168.2.254(分配給子網2的PC使用);192.168.3.10~192.168.3.254(分配給子網3的PC使用),必須記住DHCP只能為每一個子網分配一個范圍。
完成以上配置后,子網2和子網3中的DHCP客戶機PC2及PC3就可以通過主機A的DHCP中繼代理程序訪問子網1中的DHCP服務器。
3、解決了單台DHCP服務器為多個子網分配IP地址后,我們還要搞清楚的一個問題是,如果某一個子網的PC如子網2中的PC2或子網3中的PC3發出地址請求信息后,主機A可以作為中繼代理對他們的請求傳達子網1中的DHCP服務器,但該DHCP服務器如何可以確定並准確地將作用域192.168.2.0網段的地址分給PC2而把作用域192.168.3.0網段的地址分給PC3呢?這個是多數學生可能存在的疑問,要搞清楚這個問題,可以參考以下的原理分析來找答案:以子網2中的主機PC2為例,DHCP 客戶機PC2在子網2 上廣播 DHCP/BOOTP discover 消息 (DHCPDISCOVER),廣播是將消息以 UDP (User Datagram Protocol)數據包的形式通過 67 端口發出,當中繼代理(relay agent)主機A接收到這個消息后,它檢查包含在這個消息報頭中的網關IP 地址,如果網關IP 地址為 0.0.0.0 ,則用 relay agent主機A的接口二的IP地址192.168.2.1替換它,然后將其轉發到 DHCP 服務器所在的子網1上(主機A還擔任路由器功能)。當在子網1中的 DHCP服務器收到這個消息后,它開始檢查消息中的網關IP地址,然后判斷該網關地址是否包含在DHCP的某一個作用域范圍內,從而決定它是否可以使用相應的作用域的地址來提供IP地址租約,當然,本例中DHCP服務器將會從作用域192.168.2.10~192.168.2.254選取一個地址來配置PC2;也就是說DHCP客戶機的請求地址消息中的網關IP地址 (GIADDR) 將是DHCP服務器用來確定從那個DHCP 范圍中挑選IP地址來配置客戶機的依據。
4、如果DHCP客戶機無法找到DHCP服務器,則它從微軟保留的 B 類網段 169.254.0.0 中挑選一個 IP 地址作為自己的 IP 地址,子網掩碼為 255.255.0.0 ,所挑選的地址由DHCP客戶機利用ARP 廣播來確定自己所挑選的 IP 地址是否已被網絡上的其它設備使用,如果該 IP 地址已被使用,那么客戶機會再挑選另一個IP地址重新進行測試,而且最多可以重試十個IP 地址,直到成功獲取配置。在此之后,客戶機會在后台繼續每隔 5 分鍾嘗試與DHCP服務器進行通信,一旦與服務器取得聯絡,則客戶機放棄自動設置的 IP 地址,而使用服務器分配的 IP 地址和其它配制信息。所以當你在某一天發現你的PC的IP地址是個B類的地址169.254.0.0/16網段的地址時,你就應該知道那是怎么一回事了吧。
至此,我們分析了幾個關於DHCP服務的應用方面的疑難問題,並且給出了相應的解決方案,對於DHCP服務在教學中我們還遇到許多一些其他問題,比如說DHCP服務器本身的地址是否一定要由管理員靜態指定,設置為自動獲取將會有什么后果?為什么把客戶機器向DHCP服務器請求地址稱為地址租用,租用時間的長短對網絡中IP地址的管理與應用有哪些幫助?如何可以使用DHCP服務讓一個自動獲取IP的主機能在任何時候都能取得指定的一個固定地址?這些問題都要求教師在教學當中要認真地去探究該服務的每一個細節的知識點,才可以對該知識點的原理以及在實際中的應用進行透徹的講授,也是我們熟練掌握和使用DHCP服務的前提。
