隨著網絡規模的不斷擴大和網絡複雜度的提高,計算機的數量經常超過可供分配的IP地址數量。同時隨著便攜機及無線網絡的廣泛使用,計算機的位置也經常變化,相應的IP地址也必須經常更新,從而導致網絡配置越來越複雜。DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)就是為解決這些問題而發展起來的。
DHCP采用客戶端/服務器通信模式,由客戶端向服務器提出配置申請,服務器返回為客戶端分配的IP地址等相應的配置信息,以實現IP地址等信息的動態配置。
在DHCP的典型應用中,一般包含一台DHCP服務器和多台客戶端(如PC和便攜機),如圖1所示。
圖1 DHCP典型應用
& 說明:
DHCP客戶端和DHCP服務器處於不同物理網段時,客戶端可以通過DHCP中繼與服務器通信,獲取IP地址及其他配置信息。
針對客戶端的不同需求,DHCP提供三種IP地址分配策略:
l 手工分配地址:由管理員為少數特定客戶端(如WWW服務器等)靜態綁定固定的IP地址。通過DHCP將配置的固定IP地址發給客戶端。
l 自動分配地址:DHCP為客戶端分配租期為無限長的IP地址。
l 動態分配地址:DHCP為客戶端分配具有一定有效期限的IP地址,到達使用期限後,客戶端需要重新申請地址。絕大多數客戶端得到的都是這種動態分配的地址。
圖2 IP地址動態獲取過程
如圖2所示,DHCP客戶端從DHCP服務器動態獲取IP地址,主要通過四個階段進行:
(1) 發現階段,即DHCP客戶端尋找DHCP服務器的階段。客戶端以廣播方式發送DHCP-DISCOVER報文。
(2) 提供階段,即DHCP服務器提供IP地址的階段。DHCP服務器接收到客戶端的DHCP-DISCOVER報文後,根據IP地址分配的優先次序選出一個IP地址,與其他參數一起通過DHCP-OFFER報文發送給客戶端。DHCP-OFFER報文的發送方式由DHCP-DISCOVER報文中的flag字段決定,具體請參見“DHCP報文格式”的介紹。
(3) 選擇階段,即DHCP客戶端選擇IP地址的階段。如果有多台DHCP服務器向該客戶端發來DHCP-OFFER報文,客戶端隻接受第一個收到的DHCP-OFFER報文,然後以廣播方式發送DHCP-REQUEST報文,該報文中包含DHCP服務器在DHCP-OFFER報文中分配的IP地址。
(4) 確認階段,即DHCP服務器確認IP地址的階段。DHCP服務器收到DHCP客戶端發來的DHCP-REQUEST報文後,隻有DHCP客戶端選擇的服務器會進行如下操作:如果確認將地址分配給該客戶端,則返回DHCP-ACK報文;否則返回DHCP-NAK報文,表明地址不能分配給該客戶端。
& 說明:
l 客戶端收到服務器返回的DHCP-ACK確認報文後,會以廣播的方式發送免費ARP報文,探測是否有主機使用服務器分配的IP地址,如果在規定的時間內沒有收到回應,客戶端才使用此地址。否則,客戶端會發送DHCP-DECLINE報文給DHCP服務器,並重新申請IP地址。
l 如果網絡中存在多個DHCP服務器,除DHCP客戶端選中的服務器外,其它DHCP服務器中本次未分配出的IP地址仍可分配給其他客戶端。
如果采用動態地址分配策略,則DHCP服務器分配給客戶端的IP地址有一定的租借期限,當租借期滿後服務器會收回該IP地址。如果DHCP客戶端希望繼續使用該地址,需要更新IP地址租約。
在DHCP客戶端的IP地址租約期限達到一半時間時,DHCP客戶端會向為它分配IP地址的DHCP服務器單播發送DHCP-REQUEST報文,以進行IP租約的更新。如果客戶端可以繼續使用此IP地址,則DHCP服務器回應DHCP-ACK報文,通知DHCP客戶端已經獲得新IP租約;如果此IP地址不可以再分配給該客戶端,則DHCP服務器回應DHCP-NAK報文,通知DHCP客戶端不能獲得新的租約。
如果在租約的一半時間進行的續約操作失敗,DHCP客戶端會在租約期限達到7/8時,廣播發送DHCP-REQUEST報文進行續約。DHCP服務器的處理方式同上,不再贅述。
DHCP有8種類型的報文,每種報文的格式相同,隻是某些字段的取值不同。DHCP報文格式基於BOOTP的報文格式,具體格式如圖3所示(括號中的數字表示該字段所占的字節)。
圖3 DHCP報文格式
各字段的解釋如下:
l op:報文的操作類型,分為請求報文和響應報文,1為請求報文;2為響應報文。具體的報文類型在option字段中標識。
l htype、hlen:DHCP客戶端的硬件地址類型及長度。
l hops:DHCP報文經過的DHCP中繼的數目。DHCP請求報文每經過一個DHCP中繼,該字段就會增加1。
l xid:客戶端發起一次請求時選擇的隨機數,用來標識一次地址請求過程。
l secs:DHCP客戶端開始DHCP請求後所經過的時間。目前沒有使用,固定為0。
l flags:第一個比特為廣播響應標識位,用來標識DHCP服務器響應報文是采用單播還是廣播方式發送,0表示采用單播方式,1表示采用廣播方式。其餘比特保留不用。
l ciaddr:DHCP客戶端的IP地址。
l yiaddr:DHCP服務器分配給客戶端的IP地址。
l siaddr:DHCP客戶端獲取IP地址等信息的服務器IP地址。
l giaddr:DHCP客戶端發出請求報文後經過的第一個DHCP中繼的IP地址。
l chaddr:DHCP客戶端的硬件地址。
l sname:DHCP客戶端獲取IP地址等信息的服務器名稱。
l file:DHCP服務器為DHCP客戶端指定的啟動配置文件名稱及路徑信息。
l option:可選變長選項字段,包含報文的類型、有效租期、DNS服務器的IP地址、WINS服務器的IP地址等配置信息。