動態主機配置協議DHCP(DHCPv4)

一、DHCP簡介

動態主機配置協議DHCP(Dynamic Host Configuration Protocol)是一種用於集中對用戶IP地址進行動態管理和配置的技術。

DHCP採用客戶端/服務器通信模式,由客戶端(DHCP Client)向服務器(DHCP Server)提出配置申請,服務器返回爲客戶端分配的配置信息(包括IP地址、缺省網關、DNS Server、WINS Server等參數),可以實現IP地址動態分配,以及其他網絡參數的集中配置管理。

DHCP的發展:

BOOTP(Bootstrap Protocol,引導程序協議)是一種引導協議,基於IP/UDP協議,也稱自舉協議,是DHCP協議的前身。BOOTP用於無盤工作站的局域網中,可以讓無盤工作站從一箇中心服務器上獲得IP地址。通過BOOTP協議可以爲局域網中的無盤工作站分配動態IP地址,這樣就不需要管理員去爲每個用戶去設置靜態IP地址。

DHCP是在BOOTP(BOOTstrap Protocol)基礎上發展而來,但BOOTP運行在相對靜態(每臺主機都有固定的網絡連接)的環境中,管理員爲每臺主機配置專門的BOOTP參數文件,該文件會在相當長的時間內保持不變。DHCP從以下兩方面對BOOTP進行了擴展:

  • DHCP加入了對重新使用的網絡地址的動態分配和附加配置選項的功能,可使計算機僅用一個消息就獲取它所需要的所有配置信息。
  • DHCP允許計算機動態地獲取IP地址,而不是靜態爲每臺主機指定地址。

DHCP技術實現用戶地址和配置信息的動態分配和集中管理,使企業可以動態地爲企業用戶分配和管理地址,避免繁瑣的手工配置,可以快速適應網絡的變化。

二、DHCP報文:

DHCP報文類型:

DHCP Discover 由客戶端來查找可用的服務器
DHCP offer 服務器用來響應客戶端的DHCP Discover報文,並指定相應的配置參數
DHCP Request 由客戶端發送給服務器來請求配置參數或者請求配置確認或者續借租期
DHCP ACK 由服務器到客戶端,含有配置參數包括IP地址。
DHCP Decline 當客戶端發現地址已經被使用時,用來通知服務器。
DHCP Inform 客戶端已經有IP地址時用它來向服務器請求其他的配置參數
DHCP NAK 由服務器發送給客戶端來報名客戶端的地址請求不正確或者租期已過期
DHCP Release 客戶端要釋放地址時用來通知服務器

DHCP報文是承載於UDP上的高層協議報文,採用67(DHCP服務器)和68(DHCP客戶端)兩個端口號。

DHCP報文格式

在這裏插入圖片描述

DHCP報文中各字段的含義

字段 長度/字節 含義
OP (op code) 1 表示報文的類型:1.客戶端請求報文、2.服務器響應報文
htype (hardware type) 1 表示硬件地址的類型。對於以太網,該類型的值爲“1”。
Hops 1 表示當前的DHCP報文經過的DHCP中繼的數目。該字段由客戶端或服務器設置爲0,每經過一個DHCP中繼時,該字段加1。此字段的作用是限制DHCP報文所經過的DHCP中繼數目。
xid 4 事務ID,由客戶端選擇的一個隨機數,被服務器和客戶端用來在它們之間交流請求和響應,客戶端用它對請求和應答進行匹配。該ID由客戶端設置並由服務器返回,爲32位整數。
secs (seconds) 2 由客戶端填充,表示從客戶端開始獲得IP地址或IP地址續借後所使用了的秒數。
flags 2 此字段在BOOTP中保留未用,在DHCP中表示標誌字段。只有標誌字段的最高位纔有意義,其餘的位均被置爲0。最左邊的字段被解釋爲廣播響應標誌位,0:客戶端請求服務器以單播形式發送響應報文1:客戶端請求服務器以廣播形式發送響應報文
ciaddr (client ip address) 4 表示客戶端的IP地址。可以是服務器分配給客戶端的IP地址或者客戶端已有的IP地址。客戶端在初始化狀態時沒有IP地址,此字段爲0.0.0.0。IP地址0.0.0.0僅在採用DHCP方式的系統啓動時允許本主機利用它進行臨時的通信,不是有效目的地址。
yiaddr (your client ip address) 4 表示服務器分配給客戶端的IP地址。當服務器進行DHCP響應時,將分配給客戶端的IP地址填入此字段。
siaddr (server ip address) 4 DHCP客戶端獲得啓動配置信息的服務器的IP地址。
giaddr (gateway ip address) 4 該字段表示第一個DHCP中繼的IP地址(注意:不是地址池中定義的網關)。當客戶端發出DHCP請求時,如果服務器和客戶端不在同一個網絡中,那麼第一個DHCP中繼在轉發這個DHCP請求報文時會把自己的IP地址填入此字段。服務器會根據此字段來判斷出網段地址,從而選擇爲用戶分配地址的地址池。服務器還會根據此地址將響應報文發送給此DHCP中繼,再由DHCP中繼將此報文轉發給客戶端。若在到達DHCP服務器前經過了不止一個DHCP中繼,那麼第一個DHCP中繼後的中繼不會改變此字段,只是把Hops的數目加1。
chaddr (client hardware address) 16 該字段表示客戶端的MAC地址,此字段與前面的“Hardware Type”和“Hardware Length”保持一致。當客戶端發出DHCP請求時,將自己的硬件地址填入此字段。對於以太網,當“Hardware Type”和“Hardware Length”分別爲“1”和“6”時,此字段必須填入6字節的以太網MAC地址。
sname (server host name) 64 該字段表示客戶端獲取配置信息的服務器名字。此字段由DHCP Server填寫,是可選的。如果填寫,必須是一個以0結尾的字符串。
file (file name) 128 該字段表示客戶端的啓動配置文件名。此字段由DHCP Server填寫,是可選的,如果填寫,必須是一個以0結尾的字符串。
options 可變 該字段表示DHCP的選項字段,至少爲312字節,格式爲"代碼+長度+數據"。DHCP通過此字段包含了服務器分配給終端的配置信息,如網關IP地址,DNS服務器的IP地址,客戶端可以使用IP地址的有效租期等信息。

DHCP Opthion字段選項

DHCP報文中的Options字段可以用來存放普通協議中沒有定義的控制信息和參數。如果用戶在DHCP服務器端配置了Options字段,DHCP客戶端在申請IP地址的時候,會通過服務器端迴應的DHCP報文獲得Options字段中的配置信息。

Options字段由Type、Length和Value三部分組成。這三部分的表示含義如下所示:

字段 長度 含義
Type 1字節 該字段表示信息類型
Length 1字節 該字段表示後面信息內容的長度
Value 其長度爲Length字段所指定 該字段表示信息內容

常見Options字段
DHCP Options選項的取值範圍爲1~255。

Option id 描述
1 設置子網掩碼選項
3 設置網關地址選項
6 設置DNS服務器地址選項
7 設置日誌服務器地址選項
12 設置DHCP客戶端的主機名選項
15 設置域名後綴選項
33 設置靜態路由選項。該選項中包含一組有分類靜態路由(即目的地址的掩碼固定爲自然掩碼,不能劃分子網),客戶端收到該選項後,將在路由表中添加這些靜態路由。如果存在Option121,則忽略該選項。
44 設置NetBios服務器選項
46 設置NetBios節點類型選項
50 設置請求IP地址選項
51 設置IP地址租約時間選項
52 設置Option附加選項
53 設置DHCP消息類型,長度爲1字節,1-DHCP DISCOVER、2-DHCP OFFER、3-DHCP REQUEST、4-DHCP DECLINE、5-DHCP ACK、6-DHCP NAK、7-DHCP RELEASE、8-DHCP INFORM
54 4字節,用來設置服務器標識
55 設置請求參數列表選項。客戶端利用該選項指明需要從服務器獲取哪些網絡配置參數。該選項內容爲客戶端請求的參數對應的選項值
58 設置續約T1時間,一般是租期時間的50%。
59 設置續約T2時間。一般是租期時間的87.5%。
60 設置廠商分類信息選項,用於標識DHCP客戶端的類型和配置。華爲自定義:可配置該終端設備在發起DHCP請求時,通過Option 60攜帶域信息。收到DHCP報文時,可根據Option 60中攜帶的域信息來分配IP地址。
61 設置客戶端標識選項
66 設置TFTP服務器名選項,用來指定爲客戶端分配的TFTP服務器的域名
67 設置啓動文件名選項,用來指定爲客戶端分配的啓動文件名
82 華爲自定義:作爲DHCP Relay,在中繼用戶DHCP報文時,可在Option 82中填寫用戶的物理位置信息,通知DHCP服務器按物理位置信息對爲用戶分配IP地址。
121 設置無分類路由選項。該選項中包含一組無分類靜態路由(即目的地址的掩碼爲任意值,可以通過掩碼來劃分子網),客戶端收到該選項後,將在路由表中添加這些靜態路由。

根據Options選項功能的不同,此字段的作用對象也不同。

主要記憶50~60Option id的作用。

三、DHCP原理描述

DHCP角色:

  • DHCP客戶端:通過DHCP協議請求獲取IP地址等網絡參數的設備。例如,IP電話、PC、手機、無盤工作站等。
  • DHCP服務器:負責爲DHCP客戶端分配網絡參數的設備。
  • (可選)DHCP中繼:負責轉發DHCP服務器和DHCP客戶端之間的DHCP報文,協助DHCP服務器向DHCP客戶端動態分配網絡參數的設備。

DHCP客戶端廣播發送請求報文(即目的IP地址爲255.255.255.255),位於同一網段內的DHCP服務器能夠接收請求報文。如果DHCP客戶端和DHCP服務器不在同一個網段,DHCP服務器無法接收來自客戶端的請求報文,此時,需要通過DHCP中繼來轉發DHCP報文。不同於傳統的IP報文轉發,DHCP中繼接收到DHCP請求或應答報文後,會重新修改報文格式並生成一個新的DHCP報文再進行轉發。

在企業網絡中,如果需要規劃較多網段,且網段中的終端都需要通過DHCP自動獲取IP地址等網絡參數時,可以部署DHCP中繼。這樣,不同網段的終端可以共用一個DHCP服務器,節省了服務器資源,方便統一管理。

DHCP報文是基於UDP協議傳輸的。
DHCP客戶端向DHCP服務器發送報文時採用67端口號,DHCP服務器向DHCP客戶端發送報文時採用68端口號。

DHCP服務器給首次接入網絡的客戶端分配網絡參數的工作原理:

無中繼場景時DHCP客戶端首次接入網絡的工作原理:

在這裏插入圖片描述

  1. 發現階段——DHCP客戶端發現DHCP服務器的階段。

    DHCP客戶端發送DHCP DISCOVER報文來發現DHCP服務器。由於DHCP客戶端不知道DHCP服務器的IP地址,所以DHCP客戶端以廣播方式發送DHCP DISCOVER報文(目的IP地址爲255.255.255.255,臨時源IP爲0.0.0.0),同一網段內所有DHCP服務器或中繼都能收到此報文。DHCP DISCOVER報文中攜帶了客戶端的MAC地址(DHCP DISCOVER報文中的chaddr/clint hardware address字段)、需要請求的參數列表選項(Option55中填充的內容,標識了客戶端需要從服務器獲取的網絡配置參數)、廣播標誌位(DHCP DISCOVER報文中的flags字段,表示客戶端請求服務器以單播或廣播形式發送響應報文)等信息。
    DHCP DISCOVER報文中的Option字段定義了網絡參數信息,不同Option值代表了不同的參數。例如,Option3表示客戶端的網關地址選項(當客戶端發送的DHCP DISCOVER報文的Option55中填充了選項值3,就表示客戶端希望從服務器獲取網關地址);Option53表示DHCP報文類型(例如,DHCP DISCOVER報文)。Option選項分爲知名選項和自定義選項,關於知名選項的含義請參見RFC2132。除了RFC2132裏面定義的知名選項,不同廠商可以根據需求自己定義自定義選項,例如,Option43爲廠商特定信息選項。
    RFC2131中定義了DHCP報文的廣播標誌字段(flags),當標誌字段的最高位爲0時,表示客戶端希望服務器以單播方式發送DHCP OFFER/DHCP ACK報文;當標誌字段的最高位爲1時,表示客戶端希望服務器以廣播方式發送DHCP OFFER/DHCP ACK報文。

  2. 提供階段——DHCP服務器提供網絡配置信息的階段。

    位於同一網段的DHCP服務器都會接收到DHCP DISCOVER報文,每個DHCP服務器上可能會部署多個地址池,服務器通過地址池來管理可供分配的IP地址等網絡參數。服務器接收到DHCP DISCOVER報文後,選擇跟接收DHCP DISCOVER報文接口的IP地址處於同一網段的地址池,並且從中選擇一個可用的IP地址,然後通過DHCP OFFER報文發送給DHCP客戶端。DHCP OFFER報文裏面攜帶了希望分配給指定MAC地址客戶端的IP地址(DHCP報文中的yiaddr/your client ip address字段)及其租期等配置參數

    通常,DHCP服務器的地址池中會指定IP地址的租期,如果DHCP客戶端發送的DHCP DISCOVER報文中攜帶了期望租期,服務器會將客戶端請求的期望租期與其指定的租期進行比較,選擇其中時間較短的租期分配給客戶端

    選擇IP地址的優先順序:

    • DHCP服務器上已配置的與客戶端MAC地址靜態綁定的IP地址。
    • 客戶端發送的DHCP DISCOVER報文中Option50字段(請求IP地址選項)指定的地址。
    • DHCP服務器上記錄的曾經分配給客戶端的IP地址。
    • 按照IP地址從大到小的順序查詢,選擇最先找到的可供分配的IP地址。
    • 如果未找到可供分配的IP地址,則依次查詢超過租期、處於衝突狀態的IP地址,如果找到可用的IP地址,則進行分配;否則,發送DHCP NAK報文作爲應答,通知DHCP客戶端無法分配IP地址。DHCP客戶端需要重新發送DHCP DISCOVER報文來申請IP地址。

    爲了防止分配出去的IP地址跟網絡中其他客戶端的IP地址衝突,DHCP服務器在發送DHCP OFFER報文前可以通過發送源地址和目的地址都爲預分配出去IP地址的ICMP ECHO REQUEST報文對分配的IP地址進行地址衝突探測。如果在指定的時間內沒有收到應答報文,表示網絡中沒有客戶端使用這個IP地址,可以分配給客戶端;如果指定時間內收到應答報文,表示網絡中已經存在使用此IP地址的客戶端,則把此地址列爲衝突地址,然後等待重新接收到DHCP DISCOVER報文後按照前面介紹的選擇IP地址的優先順序重新選擇可用的IP地址。

    此階段DHCP服務器分配給客戶端的IP地址不一定是最終確定使用的IP地址,因爲DHCP OFFER報文發送給客戶端等待16秒後如果沒有收到客戶端的響應,此地址就可以繼續分配給其他客戶端。通過下面的選擇階段和確認階段後才能最終確定客戶端可以使用的IP地址。

  3. 請求階段——DHCP客戶端選擇IP地址的階段。

    因爲DHCP DISCOVER報文是廣播發送的,所以如果同一網段內存在多個DHCP服務器,接收到DHCP DISCOVER報文的服務器都會迴應DHCP OFFER報文。如果有多個DHCP服務器向DHCP客戶端迴應DHCP OFFER報文,則DHCP客戶端一般只接收第一個收到的DHCP OFFER報文,然後以廣播方式發送DHCP REQUEST報文,該報文中包含客戶端想選擇的DHCP服務器標識符(即Option54)和分配給客戶端IP地址(即Option50,填充了接收的DHCP OFFER報文中yiaddr字段的IP地址)。

    以廣播方式發送DHCP REQUEST報文,是爲了通知所有的DHCP服務器,它將選擇某個DHCP服務器提供的IP地址,其他DHCP服務器可以重新將曾經分配給客戶端的IP地址分配給其他客戶端。

  4. 確認階段——DHCP服務器確認所分配IP地址的階段。

    當DHCP服務器收到DHCP客戶端發送的DHCP REQUEST報文後,DHCP服務器迴應DHCP ACK報文,表示DHCP REQUEST報文中請求的IP地址(Opton50填充的)分配給客戶端使用。

    DHCP客戶端收到DHCP ACK報文,會廣播發送免費ARP(FARP)報文,探測本網段是否有其他終端使用服務器分配的IP地址,如果在指定時間內沒有收到迴應,表示客戶端可以使用此地址。如果收到了迴應,說明有其他終端使用了此地址,客戶端會向服務器發送DHCP DECLINE報文,並重新向服務器請求IP地址,同時,服務器會將此地址列爲衝突地址。當服務器沒有空閒地址可分配時,再選擇衝突地址進行分配,儘量減少分配出去的地址衝突。

    當DHCP服務器收到DHCP客戶端發送的DHCP REQUEST報文後,如果DHCP服務器由於某些原因(例如協商出錯或者由於發送REQUEST過慢導致服務器已經把此地址分配給其他客戶端)無法分配DHCP REQUEST報文中Opton50填充的IP地址,則發送DHCP NAK報文作爲應答,通知DHCP客戶端無法分配此IP地址。DHCP客戶端需要重新發送DHCP DISCOVER報文來申請新的IP地址。

有中繼場景時DHCP客戶端首次接入網絡的工作原理:

在這裏插入圖片描述

  1. 發現階段

    1. 由於DHCP客戶端不知道DHCP服務器的IP地址,所以DHCP客戶端以廣播方式發送DHCP DISCOVER報文(目的IP地址爲255.255.255.255,臨時源IP爲0.0.0.0),同一網段內所有DHCP服務器或中繼都能收到此報文。

    2. 檢查DHCP報文中的hops字段,如果大於16,則丟棄DHCP報文;否則,將hops字段加1(表明經過一次DHCP中繼),並繼續下面的操作。

    3. DHCP報文中的hops字段表示DHCP報文經過的DHCP中繼的數目,該字段由客戶端或服務器設置爲0,每經過一個DHCP中繼時,該字段加1。hops字段的作用是限制DHCP報文所經過的DHCP中繼的數目。目前,設備最多支持DHCP客戶端與服務器之間有存在16箇中繼。

    4. 檢查DHCP報文中的giaddr(gateway ip address)字段。如果是0,將giaddr字段設置爲接收DHCP DISCOVER報文的接口IP地址。如果不是0,則不修改該字段,繼續下面的操作。

    5. DHCP報文中的giaddr字段標識客戶端網關的IP地址。如果服務器和客戶端不在同一個網段且中間存在多個DHCP中繼,當客戶端發出DHCP請求時,第一個DHCP中繼會把自己的IP地址填入此字段,後面的DHCP中繼不修改此字段內容,DHCP服務器會根據此字段來判斷出客戶端所在的網段地址,從而爲客戶端分配該網段的IP地址

    6. 將DHCP報文的目的IP地址改爲DHCP服務器或下一跳中繼的IP地址,源地址改爲中繼連接客戶端的接口地址,通過路由轉發將DHCP報文單播發送到DHCP服務器或下一跳中繼

    如果DHCP客戶端與DHCP服務器之間存在多個DHCP中繼,後面的中繼接收到DHCP DISCOVER報文的處理流程同前面所述。

  2. 提供階段

    1. DHCP服務器接收到DHCP DISCOVER報文後,選擇與報文中giaddr字段爲同一網段的地址池,併爲客戶端分配IP地址等參數然後向giaddr字段標識的DHCP中繼單播發送DHCP OFFER報文。

    2. 檢查報文中的giaddr字段,如果不是接口的地址,則丟棄該報文;否則,繼續下面的操作。

    3. DHCP中繼檢查報文的廣播標誌位。如果廣播標誌位爲1,則將DHCP OFFER報文廣播發送給DHCP客戶端;否則將DHCP OFFER報文單播發送給DHCP客戶端。

  3. 選擇階段

  4. 確認階段

選擇階段和確認階段的過程同無中繼場景。

DHCP客戶端重用曾經使用的地址的工作原理:

DHCP客戶端非首次接入網絡時,可以重用曾經使用過的地址。
在這裏插入圖片描述

  1. 客戶端廣播發送包含前一次分配的IP地址的DHCP REQUEST報文,報文中的Option50(請求的IP地址選項)字段填入曾經使用過的IP地址。
  2. DHCP服務器收到DHCP REQUEST報文後,根據DHCP REQUEST報文中攜帶的MAC地址來查找有沒有相應的租約記錄,如果有則返回DHCP ACK報文,通知DHCP客戶端可以繼續使用這個IP地址。否則,保持沉默,等待客戶端重新發送DHCP DISCOVER報文請求新的IP地址。

DHCP客戶端更新租期的工作原理:

DHCP服務器採用動態分配機制給客戶端分配IP地址時,分配出去的IP地址有租期限制。DHCP客戶端向服務器申請地址時可以攜帶期望租期,服務器在分配租期時把客戶端期望租期和地址池中租期配置比較,分配其中一個較短的租期給客戶端。租期時間到後服務器會收回該IP地址,收回的IP地址可以繼續分配給其他客戶端使用。這種機制可以提高IP地址的利用率,避免客戶端下線後IP地址繼續被佔用。如果DHCP客戶端希望繼續使用該地址,需要更新IP地址的租期(如延長IP地址租期)。

  • 當租期達到50%(T1)時,DHCP客戶端會自動以單播的方式向DHCP服務器發送DHCP REQUEST報文,請求更新IP地址租期。如果收到DHCP服務器迴應的DHCP ACK報文,則租期更新成功(即租期從0開始計算);如果收到DHCP NAK報文,則重新發送DHCP DISCOVER報文請求新的IP地址。
  • 當租期達到87.5%(T2)時,如果仍未收到DHCP服務器的應答,DHCP客戶端會自動以廣播的方式向DHCP服務器發送DHCP REQUEST報文,請求更新IP地址租期。如果收到DHCP服務器迴應的DHCP ACK報文,則租期更新成功(即租期從0開始計算);如果收到DHCP NAK報文,則重新發送DHCP DISCOVER報文請求新的IP地址。
  • 如果租期時間到時都沒有收到服務器的迴應,客戶端停止使用此IP地址,重新發送DHCP DISCOVER報文請求新的IP地址。

客戶端在租期時間到之前,如果用戶不想使用分配的IP地址(例如客戶端網絡位置需要變更),會觸發DHCP客戶端向DHCP服務器發送DHCP RELEASE報文,通知DHCP服務器釋放IP地址的租期。DHCP服務器會保留這個DHCP客戶端的配置信息,將IP地址列爲曾經分配過的IP地址中,以便後續重新分配給該客戶端或其他客戶端

客戶端可以通過發送DHCP INFORM報文向服務器請求更新配置信息。

四、DHCP的優缺點

優點

  • 提供安全而可靠的配置。DHCP避免了由於需要手動在每個計算機上鍵入值而引起的配置錯誤。DHCP還有助於防止由於在網絡上配置新的計算機時重用以前指派的IP地址而引起的地址衝突。
  • 可以減少配置管理。使用DHCP服務器可以大大降低用於配置和重新配置網上計算機的時間。可以配置服務器以便在指派地址租約時提供其他配置值的全部範圍。這些值是使用DHCP選項指派的。
  • DHCP租約續訂過程還有助於確保客戶端計算機配置需要經常更新的情況(如使用移動或便攜式計算機頻繁更改位置的用戶),通過客戶端計算機直接與DHCP服務器通訊可以高效、自動地進行這些更改。
  • IP地址採用租用方式,需要時向DHCP服務器申請IP,用完後釋放,使IP地址可以再利用。
  • DHCP服務器數據庫是一個動態數據庫,向客戶端提供租約或釋放租約時會自動更新,降低了管理IP地址的難度,所有DHCP客戶的設置和變更都由客戶端和服務器自動完成,不需人工干涉。

缺點:

  • DHCP不能發現網絡上非DHCP客戶端已經在使用的IP地址。
  • DHCP服務器對於用戶的接入沒有限制,任何一臺電腦只要連接到網絡上,就能夠通過DHCP服務器獲得正確的網絡配置,從而訪問網絡。這樣使得非法的用戶很容易進入內部網絡,帶來安全隱患。
  • 當網絡上存在多個DHCP服務器時,尤其是存在私設的冒充DHCP服務器時,一個DHCP服務器不能查出已被其它服務器租出去的IP地址,這樣將會給網絡造成混亂。
  • DHCP服務器不能跨路由器與客戶端通信,除非路由器允許BOOTP轉發。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章