網絡互聯 DHCP/BOOTP
DHCP 是 Dynamic Host Configuration Protocol(動態主機分配協議)縮寫,它的前身是 BOOTP。BOOTP 原本是用於無磁盤主機連接的網絡上面的:網絡主機使用 BOOT ROM 而不是磁盤起動並連接上網絡,BOOTP 則可以自動地為那些主機設定 TCP/IP 環境。但 BOOTP 有壹個缺點:您在設定前須事先獲得客戶端的硬件地址,而且,與 IP 的對應是靜態的。換而言之,BOOTP 非常缺乏 "動態性" ,若在有限的 IP 資源環境中,BOOTP 的壹對壹對應會造成非常可觀的浪費。 DHCP 可以說是 BOOTP 的增強版本,它分為兩個部份:壹個是服務器端,而另壹個是客戶端。所有的 IP 網絡設定數據都由 DHCP 服務器集中管理,並負責處理客戶端的 DHCP 要求;而客戶端則會使用從服務器分配下來的IP環境數據。比較起 BOOTP ,DHCP 透過 "租約" 的概念,有效且動態的分配客戶端的 TCP/IP 設定,而且,作為兼容考慮,DHCP 也完全照顧了 BOOTP Client 的需求。 DHCP 的分配形式 首先,必須至少有壹臺 DHCP 工作在網絡上面,它會監聽網絡的 DHCP 請求,並與客戶端磋商 TCP/IP 的設定環境。它提供三種 IP 定位方式:
Manual Allocation
網絡管理員為某些少數特定的Host綁定固定IP地址,且地址不會過期
Automatic Allocation
自動分配,其情形是:壹旦 DHCP 客戶端第壹次成功的從 DHCP 服務器端租用到 IP
地址之後,就永遠使用這個地址。
Dynamic Allocation動態分配,當 DHCP 第壹次從 DHCP 服務器端租用到 IP 地址之後,並非永久的使用該地址,只要租約到期,客戶端就得釋放(release)這個 IP 地址,以給其它工作站使用。當然,客戶端可以比其它主機更優先的更新(renew)租約,或是租用其它的 IP 地址。 動態分配顯然比自動分配更加靈活,尤其是當您的實際 IP 地址不足的時候,例如:您是壹家 ISP ,只能提供 200 個IP地址用來給撥接客戶,但並不意味著您的客戶最多只能有 200 個。因為要知道,您的客戶們不可能全部同壹時間上網的,除了他們各自的行為習慣的不同,也有可能是電話線路的限制。這樣,您就可以將這 200 個地址,輪流的租用給撥接上來的客戶使用了。這也是為什麽當您查看 IP 地址的時候,會因每次撥接而不同的原因了(除非您申請的是壹個固定 IP ,通常的 ISP 都可以滿足這樣的要求,這或許要另外收費)。當然,ISP 不壹定使用 DHCP 來分配地址,但這個概念和使用 IP Pool 的原理是壹樣的。 DHCP 除了能動態的設定 IP 地址之外,還可以將壹些 IP 保留下來給壹些特殊用途的機器使用,它可以按照硬件地址來固定的分配 IP 地址,這樣可以給您更大的設計空間。同時,DHCP 還可以幫客戶端指定 router、netmask、DNS Server、WINS Server、等等項目,您在客戶端上面,除了將 CP 選項打勾之外,幾乎無需做任何的 IP 環境設定。
DHCP 的工作原理
根據客戶端是否第壹次登錄網絡,DHCP 的工作形式會有所不同。 第壹次登錄的時候:尋找 Server。當 DHCP 客戶端第壹次登錄網絡的時候,也就是客戶發現本機上沒有任何 IP 數據設定,它會向網絡發出壹個 DHCP DISCOVER 封包。因為客戶端還不知道自己屬於哪壹個網絡,所以封包的來源地址會為 0.0.0.0 ,而目的地址則為 255.255.255.255 ,然後再附上 DHCP discover 的信息,向網絡進行廣播。 在 Windows 的預設情形下,DHCP discover 的等待時間預設為 1 秒,也就是當客戶端將第壹個 DHCP discover 封包送出去之後,在 1 秒之內沒有得到響應的話,就會進行第二次 DHCP discover 廣播。若壹直得不到響應的情況下,客戶端壹共會有四次 DHCP discover 廣播(包括第壹次在內),除了第壹次會等待 1 秒之外,其余三次的等待時間分別是 9、13、16 秒。如果都沒有得到 DHCP 服務器的響應,客戶端則會顯示錯誤信息,宣告 DHCP discover 的失敗。之後,基於使用者的選擇,系統會繼續在 5 分鐘之後再重復壹次 DHCP discover 的過程。
提供 IP 租用地址。當 DHCP 服務器監聽到客戶端發出的 DHCP discover 廣播後,它會從那些還沒有租出的地址範圍內,選擇最前面的空置 IP ,連同其它
TCP/IP 設定,響應給客戶端壹個 DHCP OFFER 封包。 由於客戶端在開始的時候還沒有 IP 地址,所以在其 DHCP discover 封包內會帶有其 MAC 地址信息,並且有壹個 XID 編號來辨別該封包,DHCP 服務器響應的 DHCP offer 封包則會根據這些資料傳遞給要求租約的客戶。根據服務器端的設定,DHCP offer 封包會包含壹個租約期限的信息。
接受 IP 租約。如果客戶端收到網絡上多臺 DHCP 服務器的響應,只會挑選其中壹個 DHCP offer 而已(通常是最先抵達的那個),並且會向網絡發送壹個DHCP request廣播封包,告訴所有 DHCP 服務器它將指定接受哪壹臺服務器提供的 IP 地址。 同時,客戶端還會向網絡發送壹個 ARP 封包,查詢網絡上面有沒有其它機器使用該 IP 地址;如果發現該 IP 已經被占用,客戶端則會送出壹個 DHCPDECLINE 封包給 DHCP 服務器,拒絕接受其 DHCP offer ,並重新發送 DHCP discover 信息。 事實上,並不是所有 DHCP 客戶端都會無條件接受 DHCP 服務器的 offer ,尤其這些主機安裝有其它 TCP/IP 相關的客戶軟件。客戶端也可以用 DHCP request 向服務器提出 DHCP 選擇,而這些選擇會以不同的號碼填寫在 DHCP Option Field 裏面:換壹句話說,在 DHCP 服務器上面的設定,未必是客戶端全都接受,客戶端可以保留自己的壹些 TCP/IP 設定。而主動權永遠在客戶端這邊。
租約確認。當 DHCP 服務器接收到客戶端的 DHCP request 之後,會向客戶端發出壹個 DHCPACK 響應,以確認 IP 租約的正式生效,也就結束了壹個完整的 DHCP 工作過程。 DHCP 發放流程第壹次登錄之後: 壹旦 DHCP 客戶端成功地從服務器哪裏取得 DHCP 租約之後,除非其租約已經失效並且 IP 地址也重新設定回 0.0.0.0 ,否則就無需再發送 DHCP discover 信息了,而會直接使用已經租用到的 IP 地址向之前之 DHCP 服務器發出 DHCP request 信息,DHCP 服務器會盡量讓客戶端使用原來的 IP 地址,如果沒問題的話,直接響應DHCPack 來確認則可。如果該地址已經失效或已經被其它機器使用了,服務器則會響應壹個 DHCPNACK 封包給客戶端,要求其從新執行 DHCP discover。 至於 IP 的租約期限卻是非常考究的,並非如我們租房子那樣簡單, 以 NT 為例子:DHCP 工作站除了在開機的時候發出 DHCP request 請求之外,在租約期限壹半的時候也會發出 DHCP request ,如果此時得不到 DHCP 服務器的確認的話,工作站還可以繼續使用該 IP ;當租約期過了87.5%時,如果客戶機仍然無法與當初的DHCP服務器聯系上,它將與其它DHCP服務器通信。如果網絡上再沒有任何DHCP服務器在運行時,該客戶機必須停止使用該IP地址,並從發送壹個Dhcpdiscover數據包開始,再壹次重復整個過程。要是您想退租,可以隨時送出 DHCPRELEASE 命令解約,就算您的租約在前壹秒鐘才獲得的。
跨網絡的 DHCP 運作
從前面描述的過程中,我們不難發現:DHCDISCOVER 是以廣播方式進行的,其情形只能在同壹網絡之內進行,因為 router 是不會將廣播傳送出去的。但如果 DHCP 服務器安設在其它的網絡上面呢?由於 DHCP 客戶端還沒有 IP 環境設定,所以也不知道 Router 地址,而且有些 Router 也不會將 DHCP 廣播封包傳遞出去,因此這情形下 DHCP
DISCOVER 是永遠沒辦法抵達 DHCP服務器那端的,當然也不會發生 OFFER 及其它動作了。要解決這個問題,我們可以用 DHCP Agent (或 DHCP Proxy)主機來接管客戶的 DHCP 請求,然後將此請求傳遞給真正的 DHCP 服務器,然後將服務器的回復傳給客戶。這裏,Proxy主機必須自己具有路由能力,且能將雙方的封包互傳對方。 若不使用 Proxy,您也可以在每壹個網絡之中安裝 DHCP 服務器,但這樣的話,壹來設備成本會增加,而且,管理上面也比較分散。當然嘍,如果在壹個十分大型的網絡中,這樣的均衡式架構還是可取的。端視您的實際情況而定了。
DHCP封包格式
以下為各字段的簡要說明: OP若是 client 送給 server 的封包,設為 1 ,反向為 2 。
HTYPE
硬件類別,Ethernet 為 1 。HLEN硬件地址長度, Ethernet 為 6
。
HOPS
若封包需經過 router 傳送,每站加 1 ,若在同壹網內,為 0 。 TRANSACTION
ID
DHCP
REQUEST 時產生的數值,以作 DHCPREPLY 時的依據。SECONDS Client 端啟動時間(秒)。
FLAGS
從 0 到 15 共 16 bits ,最左壹 bit 為 1 時表示 server 將以廣播方式傳送封包給 client ,其余尚未使用。
ciaddr
要是 client 端想繼續使用之前取得之 IP 地址,則列於這裏。yiaddr從 server 送回 client 之 DHCP OFFER 與 DHCPACK 封包中,此欄填寫分配給 client 的 IP 地址。siaddr
若 client 需要透過網絡開機,從 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK 封包中,此欄填寫開機程序代碼所在 server 之地址。
giaddr
若需跨網域進行 DHCP 發放,此欄為 relay agent 的地址,否則為 0
。
chaddr
Client 之硬件地址。 sname Server 之名稱字符串,以 0x00
結尾。
file
若 client 需要透過網絡開機,此欄將指出開機程序名稱,稍後以 TFTP
傳送。
options
允許廠商定議選項(Vendor-Specific Area),以提供更多的設定信息(如:Netmask、Gateway、DNS、等等)。其長度可變,同時可攜帶多個選項,每壹選項之第壹個 byte
為信息代碼,其後壹個 byte 為該項數據長度,最後為項目內容。 CODE LEN VALUE 此字段完全兼容 BOOTP ,同時擴充了更多選項。其中,DHCP 封包可利用編碼為 0x53 之選項來設定封包類別:項值 類別
1 DHCP DISCOVER
2 DHCP OFFER
3 DHCP REQUEST
4 DHCPDECLINE
5 DHCPACK
6 DHCPNACK
7 DHCPRELEASE DHCP 的選項非常多,有空請查閱 RFC 或相關文獻,並好好理解,這裏不再敘述了。DHCP 協議之 RFC 文件
RFC-951、RFC-1084、RFC-1123、RFC-1533、RFC-1534、RFC-1497、RFC-1541
DHCP是可自動將IP位址指派給登入TCP/IP網絡的用戶端的壹種軟件,(此種IP位址稱為「動態IP位址」)。這種軟件通常是在路由器及其他網絡設備上執行的。依照預先設定,您的GateLock路由器設定為使用DHCP,因此就無須手動指派永久IP位址給網絡上的每個設備。建議不要改變這個設置,這樣您的個人電腦就可以被分辨為DHCP服務器。
--------------------------------------------------------------------------------
<A href="http://marke721.blog.51cto.com/31045/328811">http://marke721.blog.51cto.com/31045/32881
1
dhcpdiscover: 此為client開始DHCP過程中的第壹個請求報文
2 dhcpoffer : 此為server
對dhcpdiscover 報文的響應
3 dhcprequst : 此為client 對dihcpoffer 報文的響應
4
dhcpdeclient: 當client發現server 分配給它的IP地址無法使用,如
IP地址發生沖突時,將發出此報文讓server禁止使用這次分配的IP地址。
5 dhcpack : server對 dhcprequst
報文的響應,client收到此報文後才真正獲得了IP地址和相關配置信息。
6 dhcpnak :
此報文是server對client的dhcprequst報文的拒絕響應,client 收到此報文後,壹般會重新開始DHCP過程。
7
dhcprelease :此報文是 client主動釋放IP地址,當server 收到此報文後就可以收回IP地址分配給其他的client.
DHCP是BOOTP的擴展,是基於C/S模式的,它提供了壹種動態指定IP地址和配置參數的機制。這主要用於大型網絡環境和配置比較困難的地方。DHCP服務器自動為客戶機指定IP地址,指定的配置參數有些和IP協議並不相關,但這必沒有關系,它的配置參數使得網絡上的計算機通信變得方便而容易實現了。DHCP使IP地址的可以租用,對於許多擁有許多臺計算機的大型網絡來說,每臺計算機擁有壹個IP地址有時候可能是不必要的。租期從1分鐘到100年不定,當租期到了的時候,服務器可以把這個IP地址分配給別的機器使用。客戶也可以請求使用自己喜歡的網絡地址及相應的配置參數。
DHCP是對BOOTP的擴展,它的包格式和BOOTP也壹樣,這樣它就可以使用BOOTP的中轉發代理來發送DHCP包了,這使得BOOTP和DHCP之間可以實現互操作。對於BOOTP轉發代理來說,發的是DHCP包還是BOOTP包,它根本分不清楚。它們使用的服務器端口號是67和68,但是有些地方還有些不同:
DHCP定義了壹種可以使IP地址使用壹段有限時間的機制,在客戶期限到了的時候可以重新分配這個IP地址。
DHCP為用戶提供所有IP配置參數。
DHCP包長度比BOOTP包長度稍長。既然包比BOOTP的長,那也不是白帶的,這多出的長度裏包括了網絡配置參數。
DHCP的包都比BOOTP的長,那協議也復雜了。DHCP有七種消息類型,而BOOTP只有兩種。
下圖中我們可以清楚地看到客戶機請求獲得網絡地址和配置參數的最初幾個步驟:
第壹步的時候客戶發出包的名稱叫DHCPDISCOVER,而服務器返回包的名稱叫DHCPOFFER。
1.BOOTP轉發代理接收到請求包,並負責向DHCP其它網絡內的DHCP服務器轉發。
2.DHCP服務器以DHCPOFFER響應客戶的要求,這個包內包括可用的IP地址和參數。
3.BOOTP轉發代理接收包,並對它進行檢查。如果它覺得沒有問題,就向客戶轉發。
4.如果客戶在發出DHCPOFFER包後壹段時間內沒有接收到回應,它有機會重新發送請求10次,否則就通知用戶。客戶機可以同時接收到許多個服務器的應答,它可以自己決定用哪壹個。下圖是客戶決定了以後,向服務器發送應答時的情況。
5.當客戶選定了某個目標服務器後,它會廣播DHCPREQUEST包,用以通知選定的服務器和未選定的服務器。
6.轉發工作仍然由BOOTP轉發擔任。
7.收到DHCPREQUEST包服務器會檢查收到的包,如果包內的地址和提供的地址壹致,證明現在客戶機選擇的是這臺服務器提供的地址,如果不是,自己提供的地址被拒絕了。
8.被選定的服務器在接收到DHCPREQUEST包以後,因為某些原因可能不能向客戶提供這個網絡地址或參數,它可以向客戶發送DHCPNAK包,如果可以提供則可以發送DHCPACK包。
客戶在收到包後,檢查內部的網絡地址和租用時間,如果客戶覺得這個包有問題,它可以發送DHCPDECLINE包拒絕這個地址,然後重新發送DHCPDISCOVER包。如果覺得沒有問題,就可以接受這個配置參數。同樣當客戶接收到DHCPNAK包時,它也可以發送DHCPDISCOVER包。客戶可以在租期到期之前釋放網絡地址,這通過發送DHCPRELEASE包來實現。
用戶下壹次可以再次獲得相同的IP地址。在這壹過程中,許多步驟就可以不用麻煩了,老客戶當然要方便壹點了。
1.客戶在發送的DHCPREQUEST包內包括自己以前使用的IP地址。
2.此包由BOOTP轉發代理轉發。
3.DHCP服務器檢查DHCPREQUEST包內包括的配置參數。
4.它如果是原來提供這個網絡地址的參數的服務器,它會認出這些數來,並以DHCPACK包回應。
5.客戶接收到DHCPACK包後,它可以接收或拒絕,如果拒絕它可以申請新的網絡地址。
當然了,如果服務器覺得客戶的請求是無效的,服務器會以DHCPNAK包響應,客戶接收到這個包後,會重新會獲得網絡地址而發送DHCPDISCOVER包。
Windows 2003下DHCP服務器配置
安裝DHCP服務
在Windows Server
2003系統中默認沒有安裝DHCP服務,因此需要安裝DHCP服務。
第1步
在“控制面板”中雙擊“添加或刪除程序”圖標,在打開的窗口左側單擊“添加/刪除Windows組件”按鈕,打開“Windows組件向導”對話框。
第2步
在“組件”列表中找到並勾選“網絡服務”復選框,然後單擊“詳細信息”按鈕,打開“網絡服務”對話框。接著在“網絡服務的子組件”列表中勾選“動態主機配置協議(DHCP)”復選框,依次單擊“確定→下壹步”按鈕開始配置和安裝DHCP服務。最後單擊“完成”按鈕完成安裝。
提示:如果是在Active
Directory(活動目錄)域中部署DHCP服務器,還需要進行授權才能使DHCP服務器生效。本例的網絡基於工作組管理模式,因此無需進行授權操作即可進行創建IP作用域的操作。
創建IP作用域
要想為同壹子網內的所有客戶端電腦自動分配IP地址,首先要做就是創建壹個IP作用域,這也是事先確定壹段IP地址作為IP作用域的原因。下面開始創建IP作用域的操作。
第1步 依次單擊“開始→管理工具→DHCP”,打開“DHCP”控制臺窗口。在左窗格中右擊DHCP服務器名稱,執行“新建作用域”命令。
第2步
在打開的“新建作用域向導”對話框中單擊“下壹步”按鈕,打開“作用域名”向導頁。在“名稱”框中為該作用域鍵入壹個名稱(如“CCE”)和壹段描述性信息,單擊“下壹步”按鈕。
小提示:這裏的作用域名稱只起到壹個標識的作用,基本上沒有實際應用。
第3步
打開“IP地址範圍”向導頁,分別在“起始IP地址”和“結束IP地址”編輯框中鍵入事先確定的IP地址範圍(本例為“10.115.223.2~10.115.223.254”)。接著需要定義子網掩碼,以確定IP地址中用於“網絡/子網ID”的位數。由於本例網絡環境為城域網內的壹個子網,因此根據實際情況將“長度”微調框的值調整為“23”,單擊“下壹步”按鈕(圖3)。
第4步
在打開的“添加排除”向導頁中可以指定排除的IP地址或IP地址範圍。由於已經使用了幾個IP地址作為其它服務器的靜態IP地址,因此需要將它們排除。在“起始IP地址”編輯框中鍵入排除的IP地址並單擊“添加”按鈕。重復操作即可,接著單擊“下壹步”按鈕。
第5步 在打開的“租約期限”向導頁中,默認將客戶端獲取的IP地址使用期限限制為8天。如果沒有特殊要求保持默認值不變,單擊“下壹步”按鈕。
第6步
打開“配置DHCP選項”向導頁,保持選中“是,我想現在配置這些選項”單選框並單擊“下壹步”按鈕。在打開的“路由器(默認網關)”向導頁中根據實際情況鍵入網關地址(本例為“10.115.223.254”)並依次單擊“添加→下壹步”按鈕。
第7步
在打開的“域名稱和DNS服務器”向導頁中沒有做任何設置,這是因為網絡中沒有安裝DNS服務器且尚未升級成域管理模式.依次單擊“下壹步”按鈕,跳過“WINS服務器”向導頁打開“激活作用域”向導頁。保持“是,我想現在激活此作用域”單選框選中狀態,並依次單擊“下壹步”→“完成”按鈕結束配置。
設置DHCP客戶端
安裝了DHCP服務並創建了IP作用域後,
要想使用DHCP方式為客戶端電腦分配IP地址,除了網絡中有壹臺DHCP服務器外,還要求客戶端電腦應該具備自動向DHCP服務器獲取IP地址的能力,這些客戶端電腦就被稱作DHCP客戶端。
因此我們對壹臺運行Windows
XP的客戶端電腦面前進行了如下設置:在桌面上右擊“網上鄰居”圖標,執行“屬性”命令。在打開的“網絡連接”窗口中右擊“本地連接”圖標並執行“屬性”,打開“本地連接
屬性”對話框。然後雙擊“Internet協議(TCP/IP)”選項,點選“自動獲得IP地址”單選框,並依次單擊“確定”按鈕。
提示:默認情況下端電腦使用的都是自動獲取IP地址的方式,壹般無需進行修改,只需檢查壹下就行了。
至此,DHCP服務器端和客戶端已經全部設置完成了。在DHCP服務器正常運行的情況下,首次開機的客戶端會自動獲取壹個IP地址並擁有八天的使用期限。
如何創建壹個新的 DHCP 用戶或供應商類
創建新用戶或供應商選項類啟動 DHCP 管理器。 單擊控制臺樹中的適用的 DHCP
服務器分支。 右擊在的服務器,然後單擊創建新的用戶類的 定義用戶類 ,或者單擊 定義供應商類 創建壹個新的供應商類。 單擊 添加 。 在 新的類
的對話框鍵入壹個描述性的標識名稱,為新的選項,在 顯示名稱 框。 還可能會將其他信息添加到 說明 框。 鍵入數據以匹配的類 ID 由 ID 或
ASCII 下的
DHCP 客戶端提供 DHCP 服務器服務使用。 若要為十六進制字節數字值輸入數據,請單擊文本框的左側。 若要輸入信息交換
(ASCII)
文本字符值為美國標準碼數據,單擊文本框的右側。 單擊 確定 ,然後單擊 關閉 。使用新的類 ID 配置 DHCP 作用域在 DHCP
管理器,雙擊相應的
DHCP 作用域。 右鍵單擊 作用域選項 ,然後單擊 配置選項 。 單擊 高級 。
單擊以選中復選框或要使用新的供應商或用戶類在功能旁邊的框。 單擊 確定
。為客戶端計算機設置指定的 DHCP 類 ID 字符串連接到基於
Windows 2000 的 DHCP 服務器的客戶端計算機使用下面的命令可以設置指定的
DHCP 類別 ID 字符串: ipconfig /
setclassid adapter_name class_id
是例如配置名為"Local
Area
Connection"的適配器名為"myuserclass 用戶類 ID,請在命令提示符下鍵入 ipconfig / setclassid 本地連接
myuserclass ,,然後按 ENTER 鍵。
它標識"Local Area Connection"接口接收為"myuserclass"DHCP
服務器上配置的 DHCP 選項。
Manual Allocation
網絡管理員為某些少數特定的Host綁定固定IP地址,且地址不會過期
Automatic Allocation
自動分配,其情形是:壹旦 DHCP 客戶端第壹次成功的從 DHCP 服務器端租用到 IP
地址之後,就永遠使用這個地址。
Dynamic Allocation動態分配,當 DHCP 第壹次從 DHCP 服務器端租用到 IP 地址之後,並非永久的使用該地址,只要租約到期,客戶端就得釋放(release)這個 IP 地址,以給其它工作站使用。當然,客戶端可以比其它主機更優先的更新(renew)租約,或是租用其它的 IP 地址。 動態分配顯然比自動分配更加靈活,尤其是當您的實際 IP 地址不足的時候,例如:您是壹家 ISP ,只能提供 200 個IP地址用來給撥接客戶,但並不意味著您的客戶最多只能有 200 個。因為要知道,您的客戶們不可能全部同壹時間上網的,除了他們各自的行為習慣的不同,也有可能是電話線路的限制。這樣,您就可以將這 200 個地址,輪流的租用給撥接上來的客戶使用了。這也是為什麽當您查看 IP 地址的時候,會因每次撥接而不同的原因了(除非您申請的是壹個固定 IP ,通常的 ISP 都可以滿足這樣的要求,這或許要另外收費)。當然,ISP 不壹定使用 DHCP 來分配地址,但這個概念和使用 IP Pool 的原理是壹樣的。 DHCP 除了能動態的設定 IP 地址之外,還可以將壹些 IP 保留下來給壹些特殊用途的機器使用,它可以按照硬件地址來固定的分配 IP 地址,這樣可以給您更大的設計空間。同時,DHCP 還可以幫客戶端指定 router、netmask、DNS Server、WINS Server、等等項目,您在客戶端上面,除了將 CP 選項打勾之外,幾乎無需做任何的 IP 環境設定。
DHCP 的工作原理
根據客戶端是否第壹次登錄網絡,DHCP 的工作形式會有所不同。 第壹次登錄的時候:尋找 Server。當 DHCP 客戶端第壹次登錄網絡的時候,也就是客戶發現本機上沒有任何 IP 數據設定,它會向網絡發出壹個 DHCP DISCOVER 封包。因為客戶端還不知道自己屬於哪壹個網絡,所以封包的來源地址會為 0.0.0.0 ,而目的地址則為 255.255.255.255 ,然後再附上 DHCP discover 的信息,向網絡進行廣播。 在 Windows 的預設情形下,DHCP discover 的等待時間預設為 1 秒,也就是當客戶端將第壹個 DHCP discover 封包送出去之後,在 1 秒之內沒有得到響應的話,就會進行第二次 DHCP discover 廣播。若壹直得不到響應的情況下,客戶端壹共會有四次 DHCP discover 廣播(包括第壹次在內),除了第壹次會等待 1 秒之外,其余三次的等待時間分別是 9、13、16 秒。如果都沒有得到 DHCP 服務器的響應,客戶端則會顯示錯誤信息,宣告 DHCP discover 的失敗。之後,基於使用者的選擇,系統會繼續在 5 分鐘之後再重復壹次 DHCP discover 的過程。
提供 IP 租用地址。當 DHCP 服務器監聽到客戶端發出的 DHCP discover 廣播後,它會從那些還沒有租出的地址範圍內,選擇最前面的空置 IP ,連同其它
TCP/IP 設定,響應給客戶端壹個 DHCP OFFER 封包。 由於客戶端在開始的時候還沒有 IP 地址,所以在其 DHCP discover 封包內會帶有其 MAC 地址信息,並且有壹個 XID 編號來辨別該封包,DHCP 服務器響應的 DHCP offer 封包則會根據這些資料傳遞給要求租約的客戶。根據服務器端的設定,DHCP offer 封包會包含壹個租約期限的信息。
接受 IP 租約。如果客戶端收到網絡上多臺 DHCP 服務器的響應,只會挑選其中壹個 DHCP offer 而已(通常是最先抵達的那個),並且會向網絡發送壹個DHCP request廣播封包,告訴所有 DHCP 服務器它將指定接受哪壹臺服務器提供的 IP 地址。 同時,客戶端還會向網絡發送壹個 ARP 封包,查詢網絡上面有沒有其它機器使用該 IP 地址;如果發現該 IP 已經被占用,客戶端則會送出壹個 DHCPDECLINE 封包給 DHCP 服務器,拒絕接受其 DHCP offer ,並重新發送 DHCP discover 信息。 事實上,並不是所有 DHCP 客戶端都會無條件接受 DHCP 服務器的 offer ,尤其這些主機安裝有其它 TCP/IP 相關的客戶軟件。客戶端也可以用 DHCP request 向服務器提出 DHCP 選擇,而這些選擇會以不同的號碼填寫在 DHCP Option Field 裏面:換壹句話說,在 DHCP 服務器上面的設定,未必是客戶端全都接受,客戶端可以保留自己的壹些 TCP/IP 設定。而主動權永遠在客戶端這邊。
租約確認。當 DHCP 服務器接收到客戶端的 DHCP request 之後,會向客戶端發出壹個 DHCPACK 響應,以確認 IP 租約的正式生效,也就結束了壹個完整的 DHCP 工作過程。 DHCP 發放流程第壹次登錄之後: 壹旦 DHCP 客戶端成功地從服務器哪裏取得 DHCP 租約之後,除非其租約已經失效並且 IP 地址也重新設定回 0.0.0.0 ,否則就無需再發送 DHCP discover 信息了,而會直接使用已經租用到的 IP 地址向之前之 DHCP 服務器發出 DHCP request 信息,DHCP 服務器會盡量讓客戶端使用原來的 IP 地址,如果沒問題的話,直接響應DHCPack 來確認則可。如果該地址已經失效或已經被其它機器使用了,服務器則會響應壹個 DHCPNACK 封包給客戶端,要求其從新執行 DHCP discover。 至於 IP 的租約期限卻是非常考究的,並非如我們租房子那樣簡單, 以 NT 為例子:DHCP 工作站除了在開機的時候發出 DHCP request 請求之外,在租約期限壹半的時候也會發出 DHCP request ,如果此時得不到 DHCP 服務器的確認的話,工作站還可以繼續使用該 IP ;當租約期過了87.5%時,如果客戶機仍然無法與當初的DHCP服務器聯系上,它將與其它DHCP服務器通信。如果網絡上再沒有任何DHCP服務器在運行時,該客戶機必須停止使用該IP地址,並從發送壹個Dhcpdiscover數據包開始,再壹次重復整個過程。要是您想退租,可以隨時送出 DHCPRELEASE 命令解約,就算您的租約在前壹秒鐘才獲得的。
跨網絡的 DHCP 運作
從前面描述的過程中,我們不難發現:DHCDISCOVER 是以廣播方式進行的,其情形只能在同壹網絡之內進行,因為 router 是不會將廣播傳送出去的。但如果 DHCP 服務器安設在其它的網絡上面呢?由於 DHCP 客戶端還沒有 IP 環境設定,所以也不知道 Router 地址,而且有些 Router 也不會將 DHCP 廣播封包傳遞出去,因此這情形下 DHCP
DISCOVER 是永遠沒辦法抵達 DHCP服務器那端的,當然也不會發生 OFFER 及其它動作了。要解決這個問題,我們可以用 DHCP Agent (或 DHCP Proxy)主機來接管客戶的 DHCP 請求,然後將此請求傳遞給真正的 DHCP 服務器,然後將服務器的回復傳給客戶。這裏,Proxy主機必須自己具有路由能力,且能將雙方的封包互傳對方。 若不使用 Proxy,您也可以在每壹個網絡之中安裝 DHCP 服務器,但這樣的話,壹來設備成本會增加,而且,管理上面也比較分散。當然嘍,如果在壹個十分大型的網絡中,這樣的均衡式架構還是可取的。端視您的實際情況而定了。
DHCP封包格式
以下為各字段的簡要說明: OP若是 client 送給 server 的封包,設為 1 ,反向為 2 。
HTYPE
硬件類別,Ethernet 為 1 。HLEN硬件地址長度, Ethernet 為 6
。
HOPS
若封包需經過 router 傳送,每站加 1 ,若在同壹網內,為 0 。 TRANSACTION
ID
DHCP
REQUEST 時產生的數值,以作 DHCPREPLY 時的依據。SECONDS Client 端啟動時間(秒)。
FLAGS
從 0 到 15 共 16 bits ,最左壹 bit 為 1 時表示 server 將以廣播方式傳送封包給 client ,其余尚未使用。
ciaddr
要是 client 端想繼續使用之前取得之 IP 地址,則列於這裏。yiaddr從 server 送回 client 之 DHCP OFFER 與 DHCPACK 封包中,此欄填寫分配給 client 的 IP 地址。siaddr
若 client 需要透過網絡開機,從 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK 封包中,此欄填寫開機程序代碼所在 server 之地址。
giaddr
若需跨網域進行 DHCP 發放,此欄為 relay agent 的地址,否則為 0
。
chaddr
Client 之硬件地址。 sname Server 之名稱字符串,以 0x00
結尾。
file
若 client 需要透過網絡開機,此欄將指出開機程序名稱,稍後以 TFTP
傳送。
options
允許廠商定議選項(Vendor-Specific Area),以提供更多的設定信息(如:Netmask、Gateway、DNS、等等)。其長度可變,同時可攜帶多個選項,每壹選項之第壹個 byte
為信息代碼,其後壹個 byte 為該項數據長度,最後為項目內容。 CODE LEN VALUE 此字段完全兼容 BOOTP ,同時擴充了更多選項。其中,DHCP 封包可利用編碼為 0x53 之選項來設定封包類別:項值 類別
1 DHCP DISCOVER
2 DHCP OFFER
3 DHCP REQUEST
4 DHCPDECLINE
5 DHCPACK
6 DHCPNACK
7 DHCPRELEASE DHCP 的選項非常多,有空請查閱 RFC 或相關文獻,並好好理解,這裏不再敘述了。DHCP 協議之 RFC 文件
RFC-951、RFC-1084、RFC-1123、RFC-1533、RFC-1534、RFC-1497、RFC-1541
DHCP是可自動將IP位址指派給登入TCP/IP網絡的用戶端的壹種軟件,(此種IP位址稱為「動態IP位址」)。這種軟件通常是在路由器及其他網絡設備上執行的。依照預先設定,您的GateLock路由器設定為使用DHCP,因此就無須手動指派永久IP位址給網絡上的每個設備。建議不要改變這個設置,這樣您的個人電腦就可以被分辨為DHCP服務器。
--------------------------------------------------------------------------------
<A href="http://marke721.blog.51cto.com/31045/328811">http://marke721.blog.51cto.com/31045/32881
1
dhcpdiscover: 此為client開始DHCP過程中的第壹個請求報文
2 dhcpoffer : 此為server
對dhcpdiscover 報文的響應
3 dhcprequst : 此為client 對dihcpoffer 報文的響應
4
dhcpdeclient: 當client發現server 分配給它的IP地址無法使用,如
IP地址發生沖突時,將發出此報文讓server禁止使用這次分配的IP地址。
5 dhcpack : server對 dhcprequst
報文的響應,client收到此報文後才真正獲得了IP地址和相關配置信息。
6 dhcpnak :
此報文是server對client的dhcprequst報文的拒絕響應,client 收到此報文後,壹般會重新開始DHCP過程。
7
dhcprelease :此報文是 client主動釋放IP地址,當server 收到此報文後就可以收回IP地址分配給其他的client.
DHCP是BOOTP的擴展,是基於C/S模式的,它提供了壹種動態指定IP地址和配置參數的機制。這主要用於大型網絡環境和配置比較困難的地方。DHCP服務器自動為客戶機指定IP地址,指定的配置參數有些和IP協議並不相關,但這必沒有關系,它的配置參數使得網絡上的計算機通信變得方便而容易實現了。DHCP使IP地址的可以租用,對於許多擁有許多臺計算機的大型網絡來說,每臺計算機擁有壹個IP地址有時候可能是不必要的。租期從1分鐘到100年不定,當租期到了的時候,服務器可以把這個IP地址分配給別的機器使用。客戶也可以請求使用自己喜歡的網絡地址及相應的配置參數。
DHCP是對BOOTP的擴展,它的包格式和BOOTP也壹樣,這樣它就可以使用BOOTP的中轉發代理來發送DHCP包了,這使得BOOTP和DHCP之間可以實現互操作。對於BOOTP轉發代理來說,發的是DHCP包還是BOOTP包,它根本分不清楚。它們使用的服務器端口號是67和68,但是有些地方還有些不同:
DHCP定義了壹種可以使IP地址使用壹段有限時間的機制,在客戶期限到了的時候可以重新分配這個IP地址。
DHCP為用戶提供所有IP配置參數。
DHCP包長度比BOOTP包長度稍長。既然包比BOOTP的長,那也不是白帶的,這多出的長度裏包括了網絡配置參數。
DHCP的包都比BOOTP的長,那協議也復雜了。DHCP有七種消息類型,而BOOTP只有兩種。
下圖中我們可以清楚地看到客戶機請求獲得網絡地址和配置參數的最初幾個步驟:
第壹步的時候客戶發出包的名稱叫DHCPDISCOVER,而服務器返回包的名稱叫DHCPOFFER。
1.BOOTP轉發代理接收到請求包,並負責向DHCP其它網絡內的DHCP服務器轉發。
2.DHCP服務器以DHCPOFFER響應客戶的要求,這個包內包括可用的IP地址和參數。
3.BOOTP轉發代理接收包,並對它進行檢查。如果它覺得沒有問題,就向客戶轉發。
4.如果客戶在發出DHCPOFFER包後壹段時間內沒有接收到回應,它有機會重新發送請求10次,否則就通知用戶。客戶機可以同時接收到許多個服務器的應答,它可以自己決定用哪壹個。下圖是客戶決定了以後,向服務器發送應答時的情況。
5.當客戶選定了某個目標服務器後,它會廣播DHCPREQUEST包,用以通知選定的服務器和未選定的服務器。
6.轉發工作仍然由BOOTP轉發擔任。
7.收到DHCPREQUEST包服務器會檢查收到的包,如果包內的地址和提供的地址壹致,證明現在客戶機選擇的是這臺服務器提供的地址,如果不是,自己提供的地址被拒絕了。
8.被選定的服務器在接收到DHCPREQUEST包以後,因為某些原因可能不能向客戶提供這個網絡地址或參數,它可以向客戶發送DHCPNAK包,如果可以提供則可以發送DHCPACK包。
客戶在收到包後,檢查內部的網絡地址和租用時間,如果客戶覺得這個包有問題,它可以發送DHCPDECLINE包拒絕這個地址,然後重新發送DHCPDISCOVER包。如果覺得沒有問題,就可以接受這個配置參數。同樣當客戶接收到DHCPNAK包時,它也可以發送DHCPDISCOVER包。客戶可以在租期到期之前釋放網絡地址,這通過發送DHCPRELEASE包來實現。
用戶下壹次可以再次獲得相同的IP地址。在這壹過程中,許多步驟就可以不用麻煩了,老客戶當然要方便壹點了。
1.客戶在發送的DHCPREQUEST包內包括自己以前使用的IP地址。
2.此包由BOOTP轉發代理轉發。
3.DHCP服務器檢查DHCPREQUEST包內包括的配置參數。
4.它如果是原來提供這個網絡地址的參數的服務器,它會認出這些數來,並以DHCPACK包回應。
5.客戶接收到DHCPACK包後,它可以接收或拒絕,如果拒絕它可以申請新的網絡地址。
當然了,如果服務器覺得客戶的請求是無效的,服務器會以DHCPNAK包響應,客戶接收到這個包後,會重新會獲得網絡地址而發送DHCPDISCOVER包。
Windows 2003下DHCP服務器配置
安裝DHCP服務
在Windows Server
2003系統中默認沒有安裝DHCP服務,因此需要安裝DHCP服務。
第1步
在“控制面板”中雙擊“添加或刪除程序”圖標,在打開的窗口左側單擊“添加/刪除Windows組件”按鈕,打開“Windows組件向導”對話框。
第2步
在“組件”列表中找到並勾選“網絡服務”復選框,然後單擊“詳細信息”按鈕,打開“網絡服務”對話框。接著在“網絡服務的子組件”列表中勾選“動態主機配置協議(DHCP)”復選框,依次單擊“確定→下壹步”按鈕開始配置和安裝DHCP服務。最後單擊“完成”按鈕完成安裝。
提示:如果是在Active
Directory(活動目錄)域中部署DHCP服務器,還需要進行授權才能使DHCP服務器生效。本例的網絡基於工作組管理模式,因此無需進行授權操作即可進行創建IP作用域的操作。
創建IP作用域
要想為同壹子網內的所有客戶端電腦自動分配IP地址,首先要做就是創建壹個IP作用域,這也是事先確定壹段IP地址作為IP作用域的原因。下面開始創建IP作用域的操作。
第1步 依次單擊“開始→管理工具→DHCP”,打開“DHCP”控制臺窗口。在左窗格中右擊DHCP服務器名稱,執行“新建作用域”命令。
第2步
在打開的“新建作用域向導”對話框中單擊“下壹步”按鈕,打開“作用域名”向導頁。在“名稱”框中為該作用域鍵入壹個名稱(如“CCE”)和壹段描述性信息,單擊“下壹步”按鈕。
小提示:這裏的作用域名稱只起到壹個標識的作用,基本上沒有實際應用。
第3步
打開“IP地址範圍”向導頁,分別在“起始IP地址”和“結束IP地址”編輯框中鍵入事先確定的IP地址範圍(本例為“10.115.223.2~10.115.223.254”)。接著需要定義子網掩碼,以確定IP地址中用於“網絡/子網ID”的位數。由於本例網絡環境為城域網內的壹個子網,因此根據實際情況將“長度”微調框的值調整為“23”,單擊“下壹步”按鈕(圖3)。
第4步
在打開的“添加排除”向導頁中可以指定排除的IP地址或IP地址範圍。由於已經使用了幾個IP地址作為其它服務器的靜態IP地址,因此需要將它們排除。在“起始IP地址”編輯框中鍵入排除的IP地址並單擊“添加”按鈕。重復操作即可,接著單擊“下壹步”按鈕。
第5步 在打開的“租約期限”向導頁中,默認將客戶端獲取的IP地址使用期限限制為8天。如果沒有特殊要求保持默認值不變,單擊“下壹步”按鈕。
第6步
打開“配置DHCP選項”向導頁,保持選中“是,我想現在配置這些選項”單選框並單擊“下壹步”按鈕。在打開的“路由器(默認網關)”向導頁中根據實際情況鍵入網關地址(本例為“10.115.223.254”)並依次單擊“添加→下壹步”按鈕。
第7步
在打開的“域名稱和DNS服務器”向導頁中沒有做任何設置,這是因為網絡中沒有安裝DNS服務器且尚未升級成域管理模式.依次單擊“下壹步”按鈕,跳過“WINS服務器”向導頁打開“激活作用域”向導頁。保持“是,我想現在激活此作用域”單選框選中狀態,並依次單擊“下壹步”→“完成”按鈕結束配置。
設置DHCP客戶端
安裝了DHCP服務並創建了IP作用域後,
要想使用DHCP方式為客戶端電腦分配IP地址,除了網絡中有壹臺DHCP服務器外,還要求客戶端電腦應該具備自動向DHCP服務器獲取IP地址的能力,這些客戶端電腦就被稱作DHCP客戶端。
因此我們對壹臺運行Windows
XP的客戶端電腦面前進行了如下設置:在桌面上右擊“網上鄰居”圖標,執行“屬性”命令。在打開的“網絡連接”窗口中右擊“本地連接”圖標並執行“屬性”,打開“本地連接
屬性”對話框。然後雙擊“Internet協議(TCP/IP)”選項,點選“自動獲得IP地址”單選框,並依次單擊“確定”按鈕。
提示:默認情況下端電腦使用的都是自動獲取IP地址的方式,壹般無需進行修改,只需檢查壹下就行了。
至此,DHCP服務器端和客戶端已經全部設置完成了。在DHCP服務器正常運行的情況下,首次開機的客戶端會自動獲取壹個IP地址並擁有八天的使用期限。
如何創建壹個新的 DHCP 用戶或供應商類
創建新用戶或供應商選項類啟動 DHCP 管理器。 單擊控制臺樹中的適用的 DHCP
服務器分支。 右擊在的服務器,然後單擊創建新的用戶類的 定義用戶類 ,或者單擊 定義供應商類 創建壹個新的供應商類。 單擊 添加 。 在 新的類
的對話框鍵入壹個描述性的標識名稱,為新的選項,在 顯示名稱 框。 還可能會將其他信息添加到 說明 框。 鍵入數據以匹配的類 ID 由 ID 或
ASCII 下的
DHCP 客戶端提供 DHCP 服務器服務使用。 若要為十六進制字節數字值輸入數據,請單擊文本框的左側。 若要輸入信息交換
(ASCII)
文本字符值為美國標準碼數據,單擊文本框的右側。 單擊 確定 ,然後單擊 關閉 。使用新的類 ID 配置 DHCP 作用域在 DHCP
管理器,雙擊相應的
DHCP 作用域。 右鍵單擊 作用域選項 ,然後單擊 配置選項 。 單擊 高級 。
單擊以選中復選框或要使用新的供應商或用戶類在功能旁邊的框。 單擊 確定
。為客戶端計算機設置指定的 DHCP 類 ID 字符串連接到基於
Windows 2000 的 DHCP 服務器的客戶端計算機使用下面的命令可以設置指定的
DHCP 類別 ID 字符串: ipconfig /
setclassid adapter_name class_id
是例如配置名為"Local
Area
Connection"的適配器名為"myuserclass 用戶類 ID,請在命令提示符下鍵入 ipconfig / setclassid 本地連接
myuserclass ,,然後按 ENTER 鍵。
它標識"Local Area Connection"接口接收為"myuserclass"DHCP
服務器上配置的 DHCP 選項。