670 likes | 927 Views
第 14 章. DHCP. 本章重點. 14-1 DHCP 的基礎知識 14-2 DHCP 運作流程 14-3 DHCP 封包格式 14-4 實作練習:擷取 DHCP 封包. DHCP. 在 TCP/IP 的網路中 , 每一台電腦都必須有至少一個 IP 位址 , 而且這個 IP 位址必須是唯一的 , 不可和網路中其它電腦重複!因此 , 對於網路管理員而言 , 如何確保每台電腦 IP 位址的唯一性 , 實在是讓人傷透腦筋。
E N D
第 14 章 DHCP
本章重點 • 14-1 DHCP 的基礎知識 • 14-2 DHCP 運作流程 • 14-3 DHCP 封包格式 • 14-4 實作練習:擷取 DHCP 封包
DHCP • 在 TCP/IP 的網路中, 每一台電腦都必須有至少一個 IP 位址, 而且這個 IP 位址必須是唯一的, 不可和網路中其它電腦重複!因此, 對於網路管理員而言, 如何確保每台電腦 IP 位址的唯一性, 實在是讓人傷透腦筋。 • 另外, 如果要變更 TCP/IP 的相關設定時, 也必須到每台電腦去修改。如果網路中只有一、二十台電腦, 這尚可接受; 但若是上百台電腦的網路, 要如何維護每台電腦的 TCP/IP 設定, 絕對是個令人頭疼的問題。
DHCP • DHCP (Dynamic Host Configuration Protocol, 動態主機設定協定) 的出現,可以有效解決這個問題。DHCP 可以動態的分配 IP 位址給網路上的每台電腦, 而且也能指定 TCP/IP 的其它參數, 大幅減少網路管理員的負擔。
14-1 DHCP 的基礎知識 • 14-1-1 DHCP 原理 • 14-1-2 採用DHCP 服務的優點
14-1-1 DHCP 原理 • 當 DHCP 用戶端開機時, 會透過廣播方式尋找 DHCP 伺服器並要求指派 IP 位址, 這時伺服器就會傳回一個尚未被使用的 IP 位址, 同時也可以將相關參數一併傳送給用戶端。
DHCP 原理 • 當 DHCP 用戶端獲得一個 IP 位址時, 並不能永久使用 (除非 DHCP 伺服器有特別設定)。在正常的情況下, 每個分配給 DHCP 用戶端的 IP 位址都有使用期限,這個期限就是 IP 位址的租約期限 (Lease Time)。租約期限長短是依各家的 DHCP伺服器而異。
14-1-2 採用DHCP 服務的優點 • DHCP 服務的用途如同本章一開始所言, 可以自動地分配 IP 位址給予 DHCP用戶端, 但其實另一項更大的好處在於方便管理。基於以下幾點原因, 就可以很清楚地了解在網路中佈署 DHCP 伺服器, 的確可以讓我們在管理上有事半功倍之效果。
採用DHCP 服務的優點 • 不易出錯 因為 DHCP 伺服器每出租一個 IP 位址時, 都會在資料庫中建立一筆相對應的租用資料, 因此幾乎不可能發生 IP 重複租用的狀況。而且這個出租、登記作業, 不需要人力介入, 更可以避免人為的錯誤 (例如:輸入錯誤)。
採用DHCP 服務的優點 • 易於維護 DHCP 不但可以自動分配 I P 位址, 而且還可以指定各項 TCP/ I P 參數(例如:DNS 伺服器和預設閘道的 IP 位址), 因此, 當我們要變更相關的參數時,只要從 DHCP 伺服器上修改, 就可以讓所有 DHCP 用戶端都自動更新, 大幅節省維護成本。
採用DHCP 服務的優點 • 用戶端不需要繁瑣的設定 只要 DHCP 伺服器設定妥當, 用戶端只需設定為使用 DHCP 取得 IP 位址, 即可完成 TCP/IP 的設定, 快速又方便。 • IP 位址可重複使用 每當 DHCP 用戶端開機時, DHCP 伺服器便會分配 1 個 IP 位址給予使用, 當用戶端租約到期或取消租約後, 伺服器又可以將此 IP 位址分配給其他的 DHCP用戶端使用, 能有效的節省 IP 位址的用量。
14-2 DHCP 運作流程 • 從 DHCP 用戶端向 DHCP 伺服器要求租用 IP 位址開始, 直到完成用戶端的TCP/IP 設定, 簡單來說是由 4 個階段所組成。
DHCP 運作流程 • 以下將逐一說明運作流程中的 4 個步驟。
1.要求租用 IP 位址 • 當我們將電腦設定成 DHCP 用戶端後, 第一次啟動電腦時即會進入此階段。首先由 DHCP 用戶端廣播一個 DHCPDiscover (尋找) 封包, 要求任一部 DHCP 伺服器提供 IP 租約。
2.提供可租用的 IP 位址 • 因為 DHCPDiscover 是以廣播方式送出, 所以網路上所有的 DHCP 伺服器都會收到此封包, 而每一台 DHCP 伺服器收到此封包時, 都會從本身所管理的 IP 位址中, 找出一個可用的 IP 位址, 設定租約期限後記錄在 DHCPOffer (提議) 封包, 再以廣播方式送給用戶端。
3.確認 IP 租約 • 因為每一台 DHCP 伺服器都會送出 DHCPOffer 封包, 因此 DHCP 用戶端會收到多個 DHCPOffer 封包, 用戶端預設會回應最先收到的 DHCPOffer 封包, 其他陸續收到的 DHCPOffer 封包則不予理會。 • 用戶端接著以廣播方式送出 DHCPRequest (要求) 封包, 除了向選定的伺服器申請租用 IP 位址之外, 也讓其他曾送出 DHCPOffer 封包、但未雀屏中選的伺服器知道:「你們所提供的 IP 位址落選了。不必為我保留, 可以租用給其它的用戶端啦!」
3.確認 IP 租約 • 不過, 如果 DHCP 用戶端不接受 DHCPOffer 封包所提供的參數, 就會廣播一個 DHCPDecline (拒絕) 封包, 告知伺服器:「我不接受你建議的 IP 位址 (或租用期限…等)。」然後回到第一階段, 再度廣播 DHCPDiscover 封包, 重新執行整個取得租約的流程。 • 用戶端為何會不同意呢?最常見的原因是 IP 位址重複。因為用戶端收到伺服器建議的 IP 位址時, 通常會以 ARP 協定檢查該位址是否已被使用, 倘若有其它粗心的使用者, 手動設定 IP 位址時也佔用了相同的位址, 用戶端當然就要拒絕租用此 IP 位址。
4.同意 IP 租約 • 當被選中的 DHCP 伺服器收到 DHCPRequest 封包時, 假如同意用戶端的租用要求, 便會廣播 DHCPAck (承認) 封包給 DHCP 用戶端, 告知可以將設定值寫入TCP/IP 中, 並開始計算租用的時間。 • 當然, 可能也會出現伺服器不同意的狀況, 倘若 DHCP 伺服器不能給予 DHCP用戶端所要求的資訊 (例如:要求租用的 IP 已被佔用, 或者不能給予用戶端所要求的租約期限等) , 則會發出 DHCPNa ck (拒絕承認) 封包。當用戶端收到DHCPNack 封包時, 便直接回到第一階段, 重新執行整個流程。
更新租約 • 取得 IP 租約後, DHCP 用戶端必須定期更新 (Renew) 租約, 否則當租約到期,就不能再使用此 IP 位址。依照 RFC 2131 的敘述, 每當租用時間超過租約期限的1/2 (50%) 及 7/8 (87.5%) 時, 用戶端就必須發出 DHCPRequest 封包, 向 DHCP 伺服器要求更新租約。 • 但是各家廠商在設計產品時, 未必遵守 RFC 2131 的建議, 因此每種產品的更新租約期限可能不同。
更新租約 • 此外還要注意一點,更新租約時是以單點傳送(Unicast)方式發出 DHCPRequest封包, 也就是會指名那一台 DHCP 伺服器應該要處理此封包, 和前面確認 IP 租約階段中, 使用廣播方式發送 DHCPRequest 封包是不同的! • 以 Windows Server 2003 DHCP伺服器為例, 預設的租約期限為 8 天, 當租用時間超過 4 天時, DHCP 用戶端會向 DHCP伺服器要求續約, 將租約期限再恢復為原本的期限 (也就是 8 天)。
更新租約 • 若不幸在重試 3 次之後, 依然無法取得 DHCP伺服器的回應 (也就是無法和 DHCP 伺服器取得連繫), 則 DHCP 用戶端將會繼續使用此租約, 直到租用時間超過 7 天時, 會再度向 DHCP伺服器要求續約, 若仍然無法取得續約的訊息 (一樣會重試 3 次), 則 DHCP 用戶端改以廣播方式送出 DHCPRequest封包, 要求 DHCP 伺服器的服務。 • 當然, 用戶端也可以在租約期限內, 手動更新租約。在 Windows NT/2000/XP/2003/Vista/2008 中, 手動更新租約的方式是在命令提示字元模式下, 執行ipconfig /renew命令即可進行更新。
撤銷租約 • 再以 Windows 作業系統為例, 除了在重新啟動、關機均會送出 DHCPRelease封包撤銷租約外, 在命令提示字元模式下執行 ipconfig/release命令, 也會送出DHCPRelease 封包撤銷租約。 • 在 Windows Vista 下要撤銷租約時, 必須執行 『開始/所有程式/附屬應用程式』命令, 然後在命令提示字元項目上按滑鼠右鈕, 執行 『以系統管理員身份執行』命令,開啟命令提示字元視窗。
撤銷租約 • 但如果我們的 Windows Vista 電腦安裝了多張網路卡 , 直接執行 ipconfig /release命令時 , 預設是會撤銷所有網路卡的 IP 租約。若只想要撤銷特定網路卡的 IP租約 , 則請執行 ipconfig / release 連線名稱命令。 • 連線名稱指的是我們在網路連線視窗中看到的連線名稱 , 例如:『區域連線』、『區域連線 2 』等名稱。
14-3 DHCP 封包格式 • DHCP 封包在傳輸層(Transport Layer ) 是採用UDP 協定。當用戶端傳送給封包給伺服器時, 是送往 UDP 67 Port;而從伺服器傳送給用戶端則是送到 UDP 68 Port 。DHCP 的封包格式如右圖。
14-3-1 封包欄位說明 • 以下我們擇要說明各重要欄位的意義, 至於某些目前已經罕用的欄位, 請讀者自行參考 RFC 2131 和 RFC 2939 。 • Op Code (Op) 若為 1, 表示這個封包是從用戶端送出的, 若為 2, 表示此封包是由伺服器所送出的。 • Hardware Type (Htype) 表示網路類型, 例如:1 表示乙太網路, 7 代表 ARCNET 。其它代碼請參閱 RFC1700 關於 ARP 的部分。
封包欄位說明 • Hardware Address Length (Hlen) MAC 位址的長度, 以 Byte 為單位, 以乙太網路來說, 其欄位值為 6。 • Hops (Hops) 當 DHCP 用戶端將封包送出時, 會將此欄位值設為 0 。而 Relay Agent 要轉送封包到 DHCP 伺服器時, 則將此值加 1 。
DHCP Relay Agent 的用途 • 在第 3 章介紹路由器時曾提到, 路由器會阻隔廣播封包。所以若 DHCP 用戶端和 DHCP 伺服器分別位於路由器兩邊的區域網路時, DHCP 用戶端要尋找伺服器的廣播封包將會被路由器擋住, 導致用戶端無法取得 DHCP 伺服器的服務。 • 解決方法之一就是在路由器兩邊都架設 DHCP 伺服器;若不想多架設一台 DHCP 伺服器,則可使用 Relay Agent (轉送代理伺服器) 的方式。
DHCP Relay Agent 的用途 • Relay Agent 會記錄路由器另一端的DHCP 伺服器的 IP 位址, 當 Relay Agent 發現區域網路中有 DHCPDiscover 或 DHCPRequest 廣播封包時, 它會收下該封包, 並將封包的目的位址改成 DHCP 伺服器的 IP 位址重新送出,此修改過的封包屬於單點傳送封包, 將可通過路由器而到達 DHCP 伺服器。
封包欄位說明 • Transaction ID (Xid) 當用戶端傳送封包時, 會隨機分配一組數字置於此欄位中。伺服器收到封包並回覆時, 會將此欄位值原封不動的寫在回覆封包裡, 而用戶端就是藉由此組數字分辨伺服器所回應的是那一個封包。 • Client IP Address (Ciaddr) 目前用戶端所使用的 IP 位址。 • Your IP Address (Yiaddr) 伺服器傳送 DHCPOffer、DHCPAck 封包時, 會將欲分配給用戶端的 IP 位址填入此欄位。
封包欄位說明 • Server IP Address (Siaddr) 當伺服器回應 DHCPDiscover 封包時, 會將自己的 IP 位址填入此欄位, 讓用戶端可以在稍後的 Request 封包中, 將此 IP 位址填入 Option Field 中的Server Identifier 欄位。 • RelayIP Address (Giaddr) 若伺服器和用戶端需透過 Relay Agent 交換封包時, Relay Agent 會在此欄位填入自己的 IP 位址。 • Client Ethernet Address (Chaddr) 此欄位值為 DHCP 用戶端的 MAC Address 。
封包欄位說明 • Server Host Name (Sname) 此欄位存放的是 DHCP 伺服器的名稱, 但 Windows 2000 不使用此欄位。 • Boot File Name (File) 這是當用戶端為 Diskless Workstation (無磁碟工作站) 時才會用到的欄位。此欄位由伺服器提供, 填入用戶端開機所需要的檔案名稱, 讓用戶端利用檔案傳輸工具下載此檔案, 並藉以完成開機程序。 • Option Field (Options) 上一節所提過的租約期限等重要資訊, 都是放在這個欄位中, 請參見以下的說明。
14-3-2 Option Field (非必要性欄位) • Option Field 不是單指一個欄位, 而是代表一組欄位。這組欄位由許多欄位組成, 它們有個共同特性-非必要性(Optional)。換言之, 不是每個 DHCP 封包都會有完整的整組欄位, 大部份只是有其中的部份欄位。 • 例如:DHCPDiscover 封包和 DHCPAck 封包均有 IP Address Lease Time (租約期限) 欄位, 但其它封包則沒有該欄位。我們根據 RFC 2131 整理出下列兩份表格, 說明這些 Option Field在各種封包出現的時機。
Option Field (非必要性欄位) • 所謂『可以使用』, 是允許軟體廠商在實作時, 自行決定是否要使用該欄位;『應該使用』則是建議使用此欄位。因為有蠻大的彈性, 所以各家的 DHCP 軟體也會有差異。 • 現在我們針對每個欄位加以說明: • Requested Address 用戶端希望獲得的特定 IP 位址或是要更新 IP 租約時, 會在此欄位填入 IP 位址。通常這個欄位會在回覆 DHCPOffer 封包的 DHCPRequest 封包, 及重開機時發出的 DHCPRequest 封包中出現。
Option Field (非必要性欄位) 這 3 個欄位分別代表租約期限、更新租約時間 (T1, 預設是租約期限的 1/2) 及最後更新時間 (T2, 預設是租約期限的 7/8)。 • IP Address Lease Time (含 T1 、T2) 其實這是由 3 個欄位組成:IP Address Lease Time、Renewal Time Value (T1)、Rebinding Time Value (T2)。
Option Field (非必要性欄位) • Option Overload 當 Option 欄位的資料過多, 超過規定的最大長度時 (312 Bytes), 可以利用此欄位去設定借用 Sname 和 File 這兩個欄位的空間。欄位值為 1 時, 表示借用 File 欄, 欄位值為 2 時, 表示借用 Sname 欄, 若為 3, 表示兩個欄位都借來使用。 • DHCP Message Type 此欄位值表示目前所使用的是那一種封包類型, 欄位值與封包類型的對照表如右。
Option Field (非必要性欄位) • Parameter Request List 用戶端可以利用此欄位要求伺服器提供所需要的參數, 例如:要求 DNS 伺服器的IP 位址等。
Option Field (非必要性欄位) • Message 用來告知對方額外的訊息, 通常是錯誤訊息。 • Server Identifier 伺服器的 IP 位址, 當用戶端還未取得 IP 租約時, 所有的封包都是採用廣播方式傳送, 所以需要此欄位來辨識那一台 DHCP伺服器才是要配合的伺服器。另外,在 DHCP Release 封包中也會包含此欄位。 • Client Identifier 用戶端的 MAC 位址, 讓伺服器知道是那一台用戶端發出租用 IP 位址的要求。
Option Field (非必要性欄位) • Maximum Message Size 用戶端告知伺服器自己可以接受的封包長度, 通常是伺服器和用戶端分別位在異質的網路, 例如:乙太網路與 ATM 網路, 才會使用到此欄位。 • 其實 Option Field這部分, 各家廠商在實作時, 或多或少都會有改變, 因此, 讀者在使用不同軟體實作時, 若發現與上述有所出入, 皆屬正常現象, 不必懷疑。
Option Field (非必要性欄位) • 另外, 上述提到的封包類型有 7 種, 但依照 RFC 文件所定義, 在 DHCP 運作時,還有一種封包型態-DHCPInform。 • 這種封包通常用在當用戶端已經有 IP 位址 (通常是手動設定了一個 IP 位址), 但是其他相關的參數卻必需使用 DHCP 分派 (例如:DNS 伺服器的 IP 位址、預設閘道的 IP位址等資訊), 這時候用戶端便會利用DHCPInform 封包告知伺服器它所需要的參數, 而伺服器便會回應 DHCPAck 或DHCPNack 的封包, 回覆或拒絕用戶端的要求。
Option Field (非必要性欄位) • 不過這種封包很少使用, 因此本書並未加以介紹, 若要了解此封包, 請讀者自行參閱 RFC 相關文件。
14-4 實作練習:擷取 DHCP 封包 • 本節我們以 3Com 的 3CRWE554G72T 頻寬分享器擔任 DHCP 伺服器, IP位址為 192.168.1.1;以 Windows Vista 為 DHCP 用戶端, 擷取 DHCP 運作流程中的封包。
14-4-1 首次租用 IP 位址 • 將 DHCP 用戶端設定為自動取得 IP 位址, 而後重新開機, 擷取圖 14-02 運作流程中 4 個步驟的封包。
首次租用 IP 位址 • 完整的 4 個步驟包含這 4 種封包。 • 在 4 個步驟裡都是發送廣播封包。 • 這 4 個封包都是針對用戶端的同一次要求, 所以 Transaction ID 都一樣。 • 1 代表此封包是由用戶端發出的要求封包。 • 所處的網路環境為乙太網路。 • 因為是乙太網路, 所以 MAC 位址的長度為 6 Bytes 。 • 目前用戶端尚無 IP 位址, 所以為 0。
首次租用 IP 位址 • 用戶端的 MAC 位址。 • 此封包為 DHCPDiscover 封包。 • MSFT 5.0 代表用戶端為 Windows 2000/XP/Vista/2008;若為 MSFT 98 則表示用戶端為 Windows 98/Me 。 • DHCP 伺服器收到 DHCPDiscover 封包後, 送出 DHCPOffer 封包回覆用戶端的要求。