動態主機設置協議

128px
動態主機設定協定（Dynamic Host Configuration Protocol，縮寫：DHCP），又稱動態主機組態協定，是一個用於IP網絡的網絡協議，位於OSI模型的應用層，使用UDP協議工作，主要有兩個用途：- 用於內部網路或網絡服務供應商自動分配IP地址給用戶- 用於內部網路管理員對所有電腦作中央管理

**適用性**
DHCP用一臺或一組DHCP服務器來管理網絡參數的分配，這種方案具有容錯性。即使在一個僅擁有少量機器的網絡中，DHCP仍然是有用的，因為一臺機器可以幾乎不造成任何影響地被增加到本地網絡中。
甚至對於那些很少改變地址的伺服器來說，DHCP仍然被建議用來設置它們的地址。如果服務器需要被重新分配地址（RFC 2071）的時候，就盡可能不去做更改。對於一些設備，如路由器和防火牆，則不應使用DHCP。
DHCP也可用於直接為服務器和桌面計算機分配地址，並且透過一個點對點協議代理，也可為撥接及寬頻的主機，以及住宅NAT網關和路由器分配地址。DHCP一般不適用於使用在無邊際路由器和DNS服務器上。

**歷史**
DHCP於1993年10月成為標準協議，其前身是BOOTP協議。當前的DHCP定義可以在 RFC 2131 中找到，而基於IPv6的DHCPv6可以在 RFC 3315 中找到。

**原理**
動態主機設定協定（DHCP）是一種使網絡管理員能夠集中管理和自動分配IP網絡地址的通信協議。在IP網絡中，每個連接Internet的設備都需要分配唯一的IP地址。DHCP使網絡管理員能從中心結點監控和分配IP地址。當某臺計算機移到網絡中的其它位置時，能自動收到新的IP地址。
DHCP使用了租約的概念，或稱為計算機IP地址的有效期。租用時間是不定的，主要取決於用戶在某地連接Internet需要多久，這對於教育行業和其它用戶頻繁改變的環境是很實用的。透過較短的租期，DHCP能夠在一個計算機比可用IP地址多的環境中動態地重新配置網絡。DHCP支持為計算機分配靜態地址，如需要永久性IP地址的Web服務器。
DHCP和另一個網絡IP管理協議BOOTP類似。目前兩種配置管理協議都得到了普遍使用，其中DHCP更為先進。某些操作系統，如Windows Server，帶有DHCP服務器。

**協議結構**
 Op：消息操作代碼，既可以是引導請求（BOOTREQUEST）也可以是引導答覆（BOOTREPLY）- Htype：硬件地址類型- Hlen：硬件地址長度- Xid：處理ID- Secs：從獲取到IP地址或者續約過程開始到現在所消耗的時間- Flags：標記- Ciaddr：客戶機IP地址- Yiaddr：“你的”（客戶機）IP地址- Siaddr：在bootstrap中使用的下一臺服務器的IP地址- Giaddr：用於導入的接替代理IP地址- Chaddr：客戶機硬件- Sname：任意服務器主機名稱，空終止符- File：DHCP發現協議中的引導文件名、空終止符、屬名或者空，DHCP供應協議中的受限目錄路徑名- Options：可選參數字段。參考定義選擇列表中的選擇文件

**技術細節**
Schema of a typical DHCP session
DHCP統一使用兩個IANA分配的端口作為BOOTP：服務器端使用67/udp，客戶端使用68/udp。
DHCP運行分為四個基本過程，分別為請求IP租約、提供IP租約、選擇IP租約和確認IP租約。
客戶在獲得了一個IP地址以後，就可以發送一個ARP請求來避免由於DHCP服務器地址池重疊而引發的IP衝突。

**DHCP發現（DISCOVER）**
client在物理子網上發送廣播來尋找可用的服務器。網絡管理員可以配置一個本地路由來轉發DHCP包給另一個子網上的DHCP服務器。該client實現生成一個目的地址為255.255.255.255或者一個子網廣播地址的UDP包。
客戶也可以申請它使用的最後一個IP地址（在下面的例子裡為192.168.1.100）。如果該客戶所在的網絡中此IP仍然可用，服務器就可以准許該申請。否則，就要看該服務器是 授權的還是非授權的。授權服務器會拒絕請求，使得客戶立刻申請一個新的IP。非授權服務器僅僅忽略掉請求，導致一個客戶端請求的超時，於是客戶端就會放棄此請求而去申請一個新的IP地址。

**DHCP提供（OFFER）**
當DHCP服務器收到一個來自客戶的IP租約請求時，它會提供一個IP租約。DHCP為客戶保留一個IP地址，然後通過網絡單播一個DHCPOFFER消息給客戶。該消息包含客戶的MAC地址、服務器提供的IP地址、子網掩碼、租期以及提供IP的DHCP服務器的IP。
服務器基於在CHADDR字段指定的客戶硬件地址來檢查配置。這裡的服務器，192.168.1.1，將IP地址指定於YIADDR字段。

**DHCP請求（REQUEST）**
當客戶PC收到一個IP租約提供時，它必須告訴所有其他的DHCP服務器它已經接受了一個租約提供。因此，該客戶會發送一個DHCPREQUEST消息，其中包含提供租約的服務器的IP。當其他DHCP服務器收到了該消息後，它們會收回所有可能已提供給該客戶的租約。然後它們把曾經給該客戶保留的那個地址重新放回到可用地址池中，這樣，它們就可以為其他計算機分配這個地址。任意數量的DHCP服務器都可以響應同一個IP租約請求，但是每一個客戶網卡只能接受一個租約提供。

**DHCP確認（Acknowledge，ACK）**
當DHCP服務器收到來自客戶的REQUEST消息後，它就開始了配置過程的最後階段。這個響應階段包括發送一個DHCPACK包給客戶。這個包包含租期和客戶可能請求的其他所有配置信息。這時候，TCP/IP配置過程就完成了。
該服務器響應請求併發送響應給客戶。整個系統期望客戶來根據選項來配置其網卡。

**DHCP釋放（RELEASE）**
客戶端向DHCP服務器發送一個請求以釋放DHCP資源，並註銷其IP地址。鑑於客戶端更多的時候並不清楚何時用戶會將其從網絡中移除，此協議不會託管“DHCP釋放的發送”。

**DHCP NAK**
服務器回覆客戶，客戶要求的IP不能被分配。

**客戶端配置參數**
DHCP伺服器會提供一些選擇性的配置項目供DHCP客戶端設定。在RFC 2132文件裡面有提到這個詳細的內容。。

**設定選項**
DHCP Option 60可以被DHCP客戶端用來做為辨識供應商及DHCP客戶端這邊的相容性識別。DHCP的協定裡頭有提供預設路由的選項，Option 60則是供應商的識別ID。基於這個選項，可在CPE方提供給STB方一些特定的選擇。這樣做最大的好處是在使用Option 60的時候，不用去定義橋接或路由的埠號。橋接是基於Option 60的MAC位址，如此一來switch可以連到STB上面，如同在PC及STB上面擁有同一個介面。
Option 60這個訊息會是一個長度會變動的字串也有可能依供應商提供的八進位數字的一個集合。DHCP客戶端通常會用來溝通的一個方式是在送出DHCP要求的時候按硬體或韌體的型別來設定這個資訊，這個資訊會被稱之為供應商Class識別（VCI Vendor Class Identifier）／（Option 60）。這個方式可能因DHCP Server之間的不同而會在兩種 CMs或兩種 modems之間進行DHCP request時造成差異。有些set-top的Boxes也會設定VCI去通知DHCP Server有關硬體和裝置的功能性資訊。所以結論是，這個選項的資訊會給予DHCP Server在做DHCP回應時必要附加訊息上面的提示。

**參考資料**

**相關**
PPPoE
*DHCPv6

**外部連結**
  DHCP協議詳細資料 date=20210119222423 -  DHCP option清單 date=20211006053433