什麼是DHCP?為什麼要用DHCP?
動態主機設定協定DHCP(Dynamic Host Configuration Protocol)是一種網路管理協議,用於集中對使用者IP位址進行動態管理和設定。
DHCP於1993年10月成為標準協議,其前身為BOOTP協議。 DHCP協定由RFC 2131定義,採用客戶端/伺服器通訊模式,由客戶端(DHCP Client)向伺服器(DHCP Server)提出設定申請,DHCP Server為網路上的每個裝置動態分配IP位址、子網路遮罩、預設網關位址,網域名稱伺服器(DNS)位址和其他相關設定參數,以便可以與其他IP網路通訊。
01 為什麼要使用DHCP?
在IP網路中,每個連接Internet的設備都需要分配唯一的IP位址。 DHCP使網路管理員能從中心結點監控並分配IP位址。當某台電腦移到網路中的其它位置時,能自動收到新的IP位址。 DHCP實現的自動化分配IP位址不僅降低了配置和部署設備的時間,同時也降低了發生設定錯誤的可能性。另外DHCP伺服器可以管理多個網段的設定訊息,當某個網段的設定發生變化時,管理員只需要更新DHCP伺服器上的相關設定即可,實現了集中化管理。
整體來看,DHCP帶來瞭如下優勢:
準確的IP配置:IP位址配置參數必須準確,並且在處理「 192.168.XXX.XXX」之類的輸入時,很容易出錯。另外印刷錯誤通常很難解決,使用DHCP伺服器可以最大程度地降低這種風險。
減少IP位址衝突:每個連接的設備都必須有一個IP位址。但是,每個位址只能使用一次,重複的位址將導致無法連接一個或兩個裝置的衝突。當手動分配位址時,尤其是在存在大量僅定期連接的端點(例如行動裝置)時,可能會發生這種情況。 DHCP的使用可確保每個位址僅使用一次。
IP位址管理的自動化:如果沒有DHCP,網路管理員將需要手動指派和撤銷位址。追蹤哪個設備具有什麼位址可能是徒勞無功的,因為幾乎無法理解設備何時需要存取網路以及何時需要離開網路。 DHCP允許將其自動化和集中化,因此網路專業人員可以從一個位置管理所有位置。
高效率的變更管理:DHCP的使用使更改位址,範圍或端點變得非常簡單。例如,組織可能希望將其IP尋址方案從一個範圍變更為另一個範圍。 DHCP伺服器配置有新訊息,該訊息將傳播到新端點。同樣,如果升級並更換了網路設備,則不需要網路配置。
02 DHCP是怎麼運作的?
DHCP協定採用UDP作為傳輸協議,DHCP客戶端發送請求訊息到DHCP伺服器的68號端口,DHCP伺服器回應應答訊息給DHCP客戶端的67號端口。只有跟DHCP客戶端在同一個網段的DHCP伺服器才能收到DHCP客戶端廣播的DHCP DISCOVER封包。當DHCP客戶端與DHCP伺服器不在同一個網段時,必須部署DHCP中繼來轉送DHCP客戶端與DHCP伺服器之間的DHCP封包。在DHCP客戶端看來,DHCP中繼就像DHCP伺服器;在DHCP伺服器看來,DHCP中繼就像DHCP客戶端。
2.1 無中繼場景時DHCP客戶端首次接取網路的工作原理
如下圖所示,在沒有部署DHCP中繼的場景下,首次接取網路DHCP用戶端與DHCP伺服器的封包互動過程,此流程稱為DHCP封包四步驟互動。
無中繼場景時DHCP用戶端首次接取網路的封包互動示意圖
第一步:發現階段
首次接取網路的DHCP用戶端不知道DHCP伺服器的IP位址,為了學習到DHCP伺服器的IP位址,DHCP用戶端以廣播方式發送DHCP DISCOVER封包(目的IP位址為255.255.255.255)給同一網段內的所有設備(包括DHCP伺服器或中繼)。 DHCP DISCOVER封包中攜帶了客戶端的MAC位址(chaddr欄位)、需要請求的參數清單選項(Option55)、廣播標誌位元(flags欄位)等資訊。
第二步:提供階段
與DHCP客戶端位於同一網段的DHCP伺服器都會接收到DHCP DISCOVER封包,DHCP伺服器選擇跟接收DHCP DISCOVER封包介面的IP位址處於同一網段的位址池,並且從中選擇一個可用的IP位址,然後透過DHCP OFFER封包傳送給DHCP客戶端。
通常,DHCP伺服器的位址池中會指定IP位址的租期,如果DHCP用戶端發送的DHCP DISCOVER封包中攜帶了期望租期,伺服器會將客戶端請求的期望租期與其指定的租期進行比較,選擇其中時間較短的租期分配給客戶端。 DHCP伺服器在位址池中為客戶端分配IP位址的順序如下:
DHCP伺服器上已設定的與客戶端MAC位址靜態綁定的IP位址。
用戶端所傳送的DHCP DISCOVER封包中Option50(請求IP位址選項)指定的位址。
在位址池內尋找「Expired」狀態的IP位址,即曾經指派給客戶端的超過租期的IP位址。
在位址池內隨機尋找一個「Idle」狀態的IP位址。
如果找不到可供指派的IP位址,則位址池會依序自動回收超過租期的(「Expired」狀態)和處於衝突狀態(「Conflict」狀態)的IP位址。回收後如果找到可用的IP位址,則進行分配;否則,DHCP客戶端等待應答逾時後,重新發送DHCP DISCOVER封包申請IP位址。
設備支援在位址池中排除某些無法透過DHCP機制進行分配的IP位址。例如,客戶端所在網段已經手動設定了位址為192.168.1.100/24的DNS伺服器,DHCP伺服器上設定的網段為192.168.1.0/24的位址池中需要將192.168.1.100的IP位址排除,不能透過DHCP分配此位址,否則,會造成位址衝突。
為了防止分配出去的IP位址跟網路中其他客戶端的IP位址衝突,DHCP伺服器在發送DHCP OFFER封包前透過發送來源位址為DHCP伺服器IP位址、目的位址為預分配出去IP位址的ICMP ECHO REQUEST封包對分配的IP位址進行位址衝突探測。如果在指定的時間內沒有收到應答封包文,表示網路中沒有客戶端使用這個IP位址,可以指派給客戶端;如果指定時間內收到應答封包文,表示網路中已經存在使用此IP位址的用戶端,則把此位址列為衝突位址,然後等待重新接收到DHCP DISCOVER封包後依照前面介紹的選擇IP位址的優先順序重新選擇可用的IP位址。
此階段DHCP伺服器分配給客戶端的IP位址不一定是最終確定使用的IP位址,因為DHCP OFFER封包發送給客戶端等待16秒後如果沒有收到客戶端的回應,此位址就可以繼續分配給其他客戶端。透過下面的選擇階段和確認階段後才能最終確定客戶端可以使用的IP位址。
第三步:選擇階段
如果有多個DHCP伺服器向DHCP客戶端回應DHCP OFFER報文,則DHCP客戶端一般只接收第一個收到的DHCP OFFER報文,然後以廣播方式發送DHCP REQUEST報文,該報文中包含客戶端想要選擇的DHCP伺服器識別碼(即Option54)和客戶端IP位址(即Option50,填入了接收的DHCP OFFER封包中yiaddr欄位的IP位址)。
DHCP客戶端廣播發送DHCP REQUEST封包通知所有的DHCP伺服器,它將選擇某個DHCP伺服器提供的IP位址,其他DHCP伺服器可以重新將曾經指派給客戶端的IP位址指派給其他用戶端。
第四步:確認階段
當DHCP伺服器收到DHCP客戶端發送的DHCP REQUEST封包後,DHCP伺服器回應DHCP ACK封包,表示DHCP REQUEST封包中請求的IP位址(Option50填入的)指派給客戶端使用。
DHCP用戶端收到DHCP ACK封包,會廣播發送免費ARP封包,偵測本網段是否有其他終端使用伺服器指派的IP位址,若在指定時間內未收到回應,表示用戶端可使用此位址。如果收到了回應,表示有其他終端使用了此位址,用戶端會向伺服器發送DHCP DECLINE封包,並重新向伺服器請求IP位址,同時,伺服器會將此位址列為衝突位址。當伺服器沒有空閒位址可分配時,再選擇衝突位址進行分配,盡量減少分配出去的位址衝突。當DHCP伺服器收到DHCP客戶端發送的DHCP REQUEST封包後,如果DHCP伺服器由於某些原因(例如協商出錯或由於發送REQUEST過慢導致伺服器已經把此位址分配給其他客戶端)無法分配DHCP REQUEST報文中Option50填入的IP位址,則發送DHCP NAK封包作為應答,通知DHCP用戶端無法指派此IP位址。 DHCP客戶端需要重新傳送DHCP DISCOVER封包來申請新的IP位址。
2.2 有中繼場景時DHCP客戶端首次接取網路的工作原理
有DHCP中繼的場景中,首次接取網路的DHCP用戶端和DHCP伺服器的工作原理與無中繼場景時DHCP用戶端首次接取網路的工作原理相同。主要差異是DHCP中繼在DHCP伺服器和DHCP客戶端之間轉送DHCP封包,以確保DHCP伺服器和DHCP用戶端可以正常互動。以下僅針對DHCP中繼的工作原理進行介紹。
如下圖所示,在部署DHCP中繼的場景下,首次接取網路DHCP用戶端與DHCP伺服器的封包互動過程。
有中繼場景時DHCP用戶端首次接取網路的封包互動示意圖
第一步:發現階段
DHCP中繼接收DHCP用戶端廣播發送的DHCP DISCOVER封包後,請先進行如下處理:
檢查DHCP封包中的hops字段,如果大於16,則丟棄DHCP封包;否則,將hops欄位加1(表示經過一次DHCP中繼),並繼續下面的操作。
檢查DHCP封包中的giaddr欄位。如果是0,將giaddr欄位設定為接收DHCP DISCOVER封包的介面IP位址。如果不是0,則不修改該字段,繼續下面的操作。
將DHCP封包的目的IP位址改為DHCP伺服器或下一跳中繼的IP位址,來源位址改為中繼連接客戶端的介面位址,透過路由轉送將DHCP封包單播傳送到DHCP伺服器或下一跳中繼。
如果DHCP客戶端與DHCP伺服器之間存在多個DHCP中繼,後面的中繼接收到DHCP DISCOVER封包的處理流程同前面所述。
第二步:提供階段
DHCP伺服器接收DHCP DISCOVER封包後,選擇與封包中giaddr欄位為同一網段的位址池,並為客戶端指派IP位址等參數,然後向giaddr欄位識別的DHCP中繼單播傳送DHCP OFFER報文。
DHCP中繼收到DHCP OFFER封包後,會進行以下處理:
檢查封包中的giaddr字段,如果不是介面的位址,則丟棄該封包;否則,繼續下面的操作。
DHCP中繼檢查封包的廣播標誌位。如果廣播標誌位元為1,則將DHCP OFFER封包廣播傳送給DHCP用戶端;否則將DHCP OFFER封包單播傳送給DHCP用戶端。
第三步:選擇階段
中繼接收到來自客戶端的DHCP REQUEST封包的處理過程同無中繼場景下的選擇階段。
第四步:確認階段
中繼接收到來自伺服器的DHCP ACK封包的處理過程同無中繼場景下的確認階段。
Comments
Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/html/wwwroot/itrenzheng.hk/wp-includes/class-wp-comment-query.php on line 399
Tell me what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!