動態主機配置協議(dynamic host configuration protocol, dhcp)是一種流行的客戶機/伺服器(c/s)協議。幾乎所有常用的客戶端作業系統和大量的嵌入式裝置(例如網路印表機和voip**)都支援dhcp。這些裝置通常使用dhcp獲得ip位址、子網掩碼、路由器的ip位址、dns伺服器的ip位址。其他服務的相關資訊(例如使用voip的sip伺服器)也可通過dhcp傳輸。實際上dhcp的更準確說法應該是dhcpv4,因為dhcp的最初設想是供ipv4使用,而ipv6使用的dhcp版本是dhcpv6。
dhcp的設計基於一種早期協議——internet引導程式協議(bootstrap protocol, bootp)。bootp為客戶提供有限的配置資訊,並且沒有提供一種機制來支援改變已提供的資訊。dhcp使用租用的概念來擴充套件bootp模型,並且可提供主機操作所需的所有資訊。租用允許客戶機使用乙個商定的時間來配置資訊。客戶機可向dhcp伺服器請求續訂租約,並繼續操作。在這個意義上,bootp和dhcp是向後相容的,純bootp客戶端可使用dhcp伺服器,dhcp客戶端也可使用純bootp伺服器。因此兩者都使用udp/ip,客戶機使用埠68,伺服器使用埠67。
dhcp主要由兩個主要部分組成:位址管理和配置資料交付。位址管理用於ip位址的動態分配,並為客戶機提供位址租用。配置資料交付包括dhcp協議的訊息格式和狀態機。
dhcp伺服器可配置為提供三種位址分配:自動分配、動態分配和手動分配。三者之間的差異是位址分配是否基於客戶機身份,以及該位址是否可撤銷或變更。在動態分配中,客戶機從伺服器配置的位址池(通常為乙個預定義的範圍)中獲得乙個可撤銷的ip位址,這也是最常用的位址分配方式。自動分配使用的是與動態分配相同的方法,但位址不可撤銷。在手動分配中,dhcp用於傳輸位址,但位址對於請求的客戶機是不變的(即它不是由伺服器維護的可分配位址池的一部分)。手動分配的作用如同bootp。
在動態分配中,dhcp客戶機請求分配乙個位址,伺服器從可用的位址池中選擇乙個位址作為響應。在通常情況下,位址池是專門為dhcp用途而分配的乙個連續的ip位址範圍。分配給客戶機的位址只在一段時間內有效,這段時間稱為租用期。客戶機可使用分配到的位址一直到租用期到期,但客戶機可提出延長租期的請求,以續訂租約。
租用期是dhcp伺服器的乙個重要配置引數,確定租用期的最佳數值需要對預期客戶數、位址池大小和位址穩定性等因素加以權衡。較長的租用期通常會較快耗盡可用的位址池,但能提供更穩定的位址和減小網路開銷(因為續租請求較少)。較短的租用期為其他客戶提供可用性更高的位址池,但隨之而來的是穩定性減小和網路流量負荷增大。客戶機在租用期過半時開始嘗試續訂租約。
當傳送dhcp請求時,客戶機需要向伺服器提供資訊。這些資訊可包括客戶機名稱、請求的租用期等引數。dhcp伺服器接收到客戶機的請求時,可利用客戶機提供的資訊並結合其他從外部獲得的資訊,決定在相應中提供的位址和配置資訊。租用請求成功後,伺服器將租用資訊儲存在永續性儲存器中。
dhcp擴充套件了bootp,因此dhcp訊息格式的定義採用擴充套件bootp的方式,以保持兩種協議之間的相容性,這樣即使在沒有安裝dhcp伺服器的網路中,bootp客戶機仍可使用dhcp伺服器和bootp中繼**支援dhcp服務。訊息格式包括乙個固定長度的初始部分和乙個可變長度的尾部。如圖所示
dhcp是對bootp的擴充套件,dhcp需要的有些欄位在bootp設計之初是不存在的,這些欄位可通過選項來攜帶。其中dhcp訊息型別選項(53)是1位元組長的選項,dhcp訊息一定會使用它。它有以下可能值:dhcpdiscover (1)、dhcpoffer(2)、dhcprequest(3)、dhcpdecline(4)、dhcpack(5)、dhcpnak(6)、dhcprelease(7)、dhcpinform(8)、dhcpforce-renew(9)、dhcpleasequery(10)、dhcpleaseunassigned(11)、dhcpleaseunknown(12)和dhcpleaseactive(13)。
選項可由dhcp訊息中的選項字段攜帶,也可以由前面提到的伺服器名和引導檔案名字段攜帶。當選項攜帶在後兩者中時,稱為選項超載,將包含乙個特殊的超載選項(52)來表明哪些字段適合攜帶選項。另外對於長度超過255位元組的選項還定義了一種特殊的長選項機制。實際上,如果同一選項在同一訊息中重複出現多次,它們的內容按出現在訊息中的順序組合,並將結果作為乙個選項來處理。如果乙個長選項用於表示選項超載,這時的處理順序是從後向前:選項字段、引導檔案名字段和伺服器名字段。
當一台新的客戶機連線到網路時,它首先發現可用的dhcp伺服器,並傳送廣播請求位址分配。然後,它從接收到的應答中決定使用哪台伺服器和哪個位址,並向該位址的伺服器傳送請求(同時將其選擇通知所有伺服器)。除非伺服器在此期間已將該位址分配出去,否則它通過確認將位址分配給請求的客戶機。過程如下圖:
在最簡單的網路中,乙個dhcp伺服器可供同一區域網中的客戶機使用。但是,在更複雜的網路中,可通過乙個或更多dhcp中繼**來中繼dhcp流量。dhcp中繼如圖所示:
中繼**用於將dhcp操作擴充套件到跨越多個網段。在一般情況下,中繼不會參與客戶機與伺服器之間的所有dhcp流量交換,中繼**僅**訊息,而且是那些廣播訊息(或ipv6的組播)。這種訊息通常在客戶機首次獲得自己的位址時交換。當一台客戶機獲得乙個ip位址,並且伺服器的ip位址使用伺服器標識選項時,它可與伺服器進行單播通訊而不經過中繼。中繼**在傳統上是第3層(網路層)裝置,並且通常結合了路由功能。
dhcp和dns互動
當一台dhcp客戶機獲得乙個ip位址時,它接收的配置資訊的重要部分是一台dns伺服器的ip位址。它允許客戶機系統將dns名稱轉換為ipv4和/或ipv6位址,該位址是進行傳輸層連線時協議實現所需要的。如果沒有dns伺服器或其他方式將網域名稱對映為ip位址,使用者會難以訪問網際網路。如果本地dns工作正常,它將internet作為乙個整體來提供位址對映,但如果配置正確,也可針對本地的專用網路(如.home)。
由於本地專用網路的dns對映通常採用煩瑣的手工管理,因此,將指定的dhcp位址與相應位址的dns對映更新方法結合起來會方便許多。這可通過組合dhcp/dns伺服器或動態dns來實現。
組合dhcp/dns伺服器是乙個伺服器程式,它可配置為提供ip位址租約以及其他資訊,也可讀取乙個dhcprequest訊息中的客戶機識別符號或網域名稱,並在使用dhcpack訊息進行響應之前,通過「名稱到位址」的繫結來更新內部dns資料庫。這樣,由dhcp客戶機或與相同dns伺服器互動的其他系統發起任何後續dns請求,能夠在客戶機名稱和新分配的ip位址之間轉換。
本文內容摘自《tcp/ip詳解 卷1:協議(中文版)第2版》,有改動
DHCP 動態主機配置協議
dhcp dynamic host configuration protocol,動態主機配置協議,工作在osi的應用層,是一種幫助計算機從指定的dhcp伺服器獲取它們的配置資訊的自舉協議,其最重要的功能是動態分配。dhcp的工作流程 發現階段,即dhcp客戶機尋找dhcp伺服器的階段。dhcp客戶...
動態主機配置協議DHCP
一.產生的原因?通常我們的協議都是固定在程式裡,一旦編寫好就不希望老是改動,但有很多時候為了軟體協議便於移植,往往並不把協議的所有細節都固定在源 中。我們希望可以在很多計算機上使用同乙個經過編譯的 在軟體執行之前,對軟體協議的莫些字段進行引數的賦值。在協議軟體中給這些引數賦值的動作叫做協議配置。乙個...
動態主機配置協議DHCP
dhcp提供一種動態指定 ipdhcp基於 c s模式,主要用於大型網路。dhcp用來自動給客戶端分配 tcp ip 資訊的網路協議,如 ip位址 閘道器 子網掩碼等資訊。每個dhcp 客戶端通過廣播連線到區域內的 dhcp 伺服器,該伺服器會響應請求,返回包括 ip位址 閘道器和其他網路配置資訊。...