動態主機設定協定（，縮寫：DHCP），又稱動態主機組態協定，是一個用於 IP 網路的網路協議，位於 OSI 模型的應用層，使用 UDP 協議工作，主要有兩個用途： 用於內部網路或網路服務供應商自動分配 IP 地址給使用者 用於內部網路管理員對所有電腦作中央管理 適用性 DHCP 用一臺或一組 DHCP 伺服器來管理網路引數的分配，這種方案具有容錯性。即使在一個僅擁有少量機器的網路中，DHCP 仍然是有用的，因為一臺機器可以幾乎不造成任何影響地被增加到本地網路中。 甚至對於那些很少改變地址的伺服器來說，DHCP 仍然被建議用來設定它們的地址。如果伺服器需要被重新分配地址（RFC 2071）的時候，就盡可能不去做更改。對於一些裝置，如路由器和防火牆，則不應使用 DHCP。 DHCP 也可用於直接為伺服器和桌面計算機分配地址，並且透過一個 PPP 代理，也可為撥接及寬頻的主機，以及住宅 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 伺服器。 協議結構 協議結構 8 bits 16 bits 24 bits 32 bits Op Htype Hlen Hops Xid Xid Xid Xid Secs Secs Flags Flags Ciaddr Ciaddr Ciaddr Ciaddr Yiaddr Yiaddr Yiaddr Yiaddr Siaddr Siaddr Siaddr Siaddr Giaddr Giaddr Giaddr Giaddr Chaddr 16 bytes Chaddr 16 bytes Chaddr 16 bytes Chaddr 16 bytes Sname 64 bytes Sname 64 bytes Sname 64 bytes Sname 64 bytes File 128 bytes File 128 bytes File 128 bytes File 128 bytes Option variable Option variable Option variable Option variable 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：可選引數欄位。參考定義選擇列表中的選擇檔案 技術細節 DHCP 統一使用兩個 IANA 分配的埠作為 BOOTP：伺服器端使用 67udp，客戶端使用 68udp。 DHCP 執行分為四個基本過程，分別為請求 IP 租約、提供 IP 租約、選擇 IP 租約和確認 IP 租約。 客戶在獲得了一個 IP 地址以後，就可以傳送一個 ARP 請求來避免由於 DHCP 伺服器地址池重疊而引發的 IP 衝突。 classwikitable UDP Src0000 sPort68 Dest255255255255 dPort67 UDP Src0000 sPort68 Dest255255255255 dPort67 UDP Src0000 sPort68 Dest255255255255 dPort67 UDP Src0000 sPort68 Dest255255255255 dPort67 OP HTYPE HLEN HOPS 0x01 0x01 0x06 0x00 XID XID XID XID 0x3903F326 0x3903F326 0x3903F326 0x3903F326 SECS SECS FLAGS FLAGS 0x0000 0x0000 0x0000 0x0000 CIADDR CIADDR CIADDR CIADDR 0x00000000 0x00000000 0x00000000 0x00000000 YIADDR YIADDR YIADDR YIADDR 0x00000000 0x00000000 0x00000000 0x00000000 SIADDR SIADDR SIADDR SIADDR 0x00000000 0x00000000 0x00000000 0x00000000 GIADDR GIADDR GIADDR GIADDR 0x00000000 0x00000000 0x00000000 0x00000000 CHADDR CHADDR CHADDR CHADDR 0x00053C04 0x00053C04 0x00053C04 0x00053C04 0x8D590000 0x8D590000 0x8D590000 0x8D590000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 192 octets of 0s BOOTP legacy 192 octets of 0s BOOTP legacy 192 octets of 0s BOOTP legacy 192 octets of 0s BOOTP legacy Magic Cookie Magic Cookie Magic Cookie Magic Cookie 0x63825363 0x63825363 0x63825363 0x63825363 DHCP Options DHCP Options DHCP Options DHCP Options DHCP option 53 DHCP Discover DHCP option 53 DHCP Discover DHCP option 53 DHCP Discover DHCP option 53 DHCP Discover DHCP option 50 1921681100 requested DHCP option 50 1921681100 requested DHCP option 50 1921681100 requested DHCP option 50 1921681100 requested DHCP 發現（DISCOVER） client 在物理子網上傳送廣播來尋找可用的伺服器。網路管理員可以配置一個本地路由來轉發 DHCP 包給另一個子網上的 DHCP 伺服器。該 client 實現生成一個目的地址為 255255255255 或者一個子網廣播地址的 UDP 包。 客戶也可以申請它使用的最後一個 IP 地址（在下面的例子裡為 1921681100）。如果該客戶所在的網路中此 IP 仍然可用，伺服器就可以准許該申請。否則，就要看該伺服器是授權的還是非授權的。授權伺服器會拒絕請求，使得客戶立刻申請一個新的 IP。非授權伺服器僅僅忽略掉請求，導致一個客戶端請求的超時，於是客戶端就會放棄此請求而去申請一個新的 IP 地址。 DHCP 提供（OFFER） 當 DHCP 伺服器收到一個來自客戶的 IP 租約請求時，它會提供一個 IP 租約。DHCP 為客戶保留一個 IP 地址，然後透過網路單播一個 DHCPOFFER 訊息給客戶。該訊息包含客戶的 MAC 地址、伺服器提供的 IP 地址、子網掩碼、租期以及提供 IP 的 DHCP 伺服器的 IP。 伺服器基於在 CHADDR 欄位指定的客戶硬體地址來檢查配置。這裡的伺服器，19216811，將 IP 地址指定於 YIADDR 欄位。 DHCP 請求（REQUEST） 當客戶 PC 收到一個 IP 租約提供時，它必須告訴所有其他的 DHCP 伺服器它已經接受了一個租約提供。因此，該客戶會發送一個 DHCPREQUEST 訊息，其中包含提供租約的伺服器的 IP。當其他 DHCP 伺服器收到了該訊息後，它們會收回所有可能已提供給該客戶的租約。然後它們把曾經給該客戶保留的那個地址重新放回到可用地址池中，這樣，它們就可以為其他計算機分配這個地址。任意數量的 DHCP 伺服器都可以響應同一個 IP 租約請求，但是每一個客戶網絡卡只能接受一個租約提供。 DHCP 確認（Acknowledge，ACK） 當 DHCP 伺服器收到來自客戶的 REQUEST 訊息後，它就開始了配置過程的最後階段。這個響應階段包括傳送一個 DHCPACK 包給客戶。這個包包含租期和客戶可能請求的其他所有配置資訊。這時候，TCPIP 配置過程就完成了。 該伺服器響應請求併發送響應給客戶。整個系統期望客戶來根據選項來配置其網絡卡。 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 時造成差異。有些 settop 的 Boxes 也會設定 VCI 去通知 DHCP Server 有關硬體和裝置的功能性資訊。所以結論是，這個選項的資訊會給予 DHCP Server 在做 DHCP 回應時必要附加訊息上面的提示。 參考資料 相關 PPPoE DHCPv6 外部連結 DHCP 協議詳細資料 DHCP option 清單 Category 網路協議 Category 網際協議 Category 應用層協議