在 TCP/IP 網路環境中,若要讓電腦之間順利通訊,每台裝置都必須擁有相同的網路識別碼與唯一的主機識別碼。這意味著管理員得為每台電腦手動設定 IP 位址並妥善記錄,一旦網路規模龐大或節點頻繁變動(如撥接網路),管理負擔極重且極易出錯;若需重新規劃 IP 架構,工作量更是驚人。
DHCP(Dynamic Host Configuration Protocol,動態主機設定協定)正是為了解決這些痛點而生。它源自 BOOTP 協定,早期用於無磁碟工作站的網路開機與 TCP/IP 環境自動設定。DHCP 可視為 BOOTP 的增強版,採用 Client-Server 架構:所有 IP 設定參數集中由 DHCP 伺服器管理,客戶端自動向伺服器請求並取得 IP 位址、子網路遮罩、預設閘道、DNS、WINS 等完整網路環境資訊,客戶端幾乎無需任何手動設定。
客戶端首次成功向 DHCP 伺服器租用 IP 後,將永久保有該位址,不再釋放。
IP 位址附有租約期限。租約到期前,客戶端可嘗試續約;到期後必須釋放 IP 供其他裝置使用。此機制極具彈性,特別適合 IP 資源有限的情境。例如 ISP 僅擁有 200 個公網 IP,卻可服務遠超 200 位撥接用戶,因為用戶不可能同時全上線。這也是為何每次撥號取得的 IP 往往不同的原因(除非申請固定 IP)。
此外,DHCP 尚支援依 MAC 位址保留特定 IP、排除特定 IP 範圍供伺服器/網路設備靜態使用,提供極大的網路設計彈性。
客戶端啟動時無 IP 設定,以廣播封包發送 DHCPDISCOVER(來源 0.0.0.0,目的 255.255.255.255),攜帶自身 MAC 位址與交易 ID (XID)。預設等待 1 秒無回應則重試,間隔依序為 9、13、16 秒,共四次嘗試失敗後報錯,5 分鐘後再重試。
DHCP 伺服器收到請求後,從未出租的 IP 池中挑選最前端的可用位址,回覆 DHCPOFFER 封包,內含租約期限等資訊,依據 MAC 位址與 XID 將封包傳回對應客戶端。
若多台伺服器回應,客戶端只接受最先收到的 DHCPOFFER,並廣播 DHCPREQUEST 告知所有伺服器其選擇。同時以 ARP 偵測該 IP 是否已被佔用;若衝突則發送 DHCPDECLINE 拒絕並重新發起發現程序。客戶端亦可在 DHCPREQUEST 中透過 Option Field 指定需求的參數(如選項 01 子網路遮罩、03 路由器、06 DNS、0F 網域名稱、2C/2E/2F WINS 相關設定),保留部分自有 TCP/IP 設定。
被選中的伺服器收到 DHCPREQUEST 後,回覆 DHCPACK 正式生效租約,完成一個完整的 DHCP 交易。
取得租約後,客戶端重新登入網路時直接以原 IP 發送 DHCPREQUEST,伺服器確認無誤回覆 DHCPACK;若 IP 已失效或被佔用則回覆 DHCPNACK,迫使客戶端重走發現流程。關於租約更新,Windows 系統會在租約期限 50% 與 75% 時點自動發送續約請求;若 75% 時點仍無法取得確認,客戶端必須放棄該 IP。管理員亦可隨時以指令手動釋放租約。
若 DHCP 伺服器部署於不同網段,客戶端廣播封包無法穿越路由器。此時需部署 DHCP Relay Agent(或稱 DHCP Proxy),代理轉發客戶端請求至遠端伺服器,並將回應轉回客戶端。Proxy 主機必須具備路由能力。雖然也可在每個網段各架設一台 DHCP 伺服器,但會增加設備成本與管理複雜度;大型網路若採分散式架構則可達負載平衡效果。