動態主機設置協定

主要協議,用於在IPv4網絡上分配IPv4地址

動態主機設置協定(英語:Dynamic Host Configuration Protocol,縮寫: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
Secs Flags
Ciaddr
Yiaddr
Siaddr
Giaddr
Chaddr (16 bytes)
Sname (64 bytes)
File (128 bytes)
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:可選參數欄位。參考定義選擇列表中的選擇檔案

技術細節

 
Schema of a typical DHCP session

DHCP統一使用兩個IANA分配的埠作為BOOTP伺服器端使用67/udp,客戶端使用68/udp。

DHCP執行分為四個基本過程,分別為請求IP租約、提供IP租約、選擇IP租約和確認IP租約。

客戶在獲得了一個IP位址以後,就可以傳送一個ARP請求來避免由於DHCP伺服器地址池重疊而引發的IP衝突。

DHCPDISCOVER
UDP Src=0.0.0.0
sPort=68
Dest=255.255.255.255
dPort=67
OP HTYPE HLEN HOPS
0x01 0x01 0x06 0x00
XID
0x3903F326
SECS FLAGS
0x0000 0x0000
CIADDR
0x00000000
YIADDR
0x00000000
SIADDR
0x00000000
GIADDR
0x00000000
CHADDR
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP Discover
DHCP option 50: 192.168.1.100 requested
DHCPOFFER
UDP Src=192.168.1.1
sPort=67
Dest=255.255.255.255
dPort=68
OP HTYPE HLEN HOPS
0x02 0x01 0x06 0x00
XID
0x3903F326
SECS FLAGS
0x0000 0x0000
CIADDR
0x00000000
YIADDR
0xC0A80164
SIADDR
0x00000000
GIADDR
0x00000000
CHADDR
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP Offer
DHCP option 1: 255.255.255.0 subnet mask
DHCP option 3: 192.168.1.1 router
DHCP option 51: 1 day IP lease time
DHCP option 54: 192.168.1.1 DHCP server


DHCPREQUEST
UDP Src=0.0.0.0
sPort=68
Dest=255.255.255.255
dPort=67
OP HTYPE HLEN HOPS
0x01 0x01 0x06 0x00
XID
0x3903F326
SECS FLAGS
0x0000 0x0000
CIADDR
0x00000000
YIADDR
0x00000000
SIADDR
0x00000000
GIADDR
0x00000000
CHADDR
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP Request
DHCP option 50: 192.168.1.100 requested
DHCP option 54: 192.168.1.1 DHCP server.
DHCPACK
UDP Src=192.168.1.1
sPort=67
Dest=192.168.1.100
dPort=68
OP HTYPE HLEN HOPS
0x02 0x01 0x06 0x00
XID
0x3903F326
SECS FLAGS
0x0000 0x0000
CIADDR (Client IP Address)
0x00000000
YIADDR (Your IP Address)
0xC0A80164
SIADDR (Server IP Address)
0x00000000
GIADDR (Gateway IP Address switched by relay)
0x00000000
CHADDR (Client Hardware Address)
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP ACK
DHCP option 1: 255.255.255.0 subnet mask
DHCP option 3: 192.168.1.1 router
DHCP option 51: 1 day IP lease time
DHCP option 54: 192.168.1.1 DHCP server

DHCP發現(DISCOVER)

client在物理子網絡上傳送廣播來尋找可用的伺服器。網絡管理員可以組態一個本地路由來轉發DHCP包給另一個子網絡上的DHCP伺服器。該client實現生成一個目的地址為255.255.255.255或者一個子網絡廣播地址的UDP包。

客戶也可以申請它使用的最後一個IP位址(在下面的例子裏為192.168.1.100)。如果該客戶所在的網絡中此IP仍然可用,伺服器就可以准許該申請。否則,就要看該伺服器是授權的還是非授權的。授權伺服器會拒絕請求,使得客戶立刻申請一個新的IP。非授權伺服器僅僅忽略掉請求,導致一個客戶端請求的逾時,於是客戶端就會放棄此請求而去申請一個新的IP位址。

DHCP提供(OFFER)

當DHCP伺服器收到一個來自客戶的IP租約請求時,它會提供一個IP租約。DHCP為客戶保留一個IP位址,然後通過網絡單播一個DHCPOFFER訊息給客戶。該訊息包含客戶的MAC地址、伺服器提供的IP位址、子網絡遮罩、租期以及提供IP的DHCP伺服器的IP。

伺服器基於在CHADDR欄位指定的客戶硬件地址來檢查組態。這裏的伺服器,192.168.1.1,將IP位址指定於YIADDR欄位。

DHCP請求(REQUEST)

當客戶PC收到一個IP租約提供時,它必須告訴所有其他的DHCP伺服器它已經接受了一個租約提供。因此,該客戶會傳送一個DHCPREQUEST訊息,其中包含提供租約的伺服器的IP。當其他DHCP伺服器收到了該訊息後,它們會收回所有可能已提供給該客戶的租約。然後它們把曾經給該客戶保留的那個地址重新放回到可用地址池中,這樣,它們就可以為其他電腦分配這個地址。任意數量的DHCP伺服器都可以響應同一個IP租約請求,但是每一個客戶網卡只能接受一個租約提供。

DHCP確認(Acknowledge,ACK)

當DHCP伺服器收到來自客戶的REQUEST訊息後,它就開始了組態過程的最後階段。這個響應階段包括傳送一個DHCPACK包給客戶。這個包包含租期和客戶可能請求的其他所有組態資訊。這時候,TCP/IP組態過程就完成了。

該伺服器響應請求並行送響應給客戶。整個系統期望客戶來根據選項來組態其網卡。

DHCP釋放(RELEASE)

客戶端向DHCP伺服器傳送一個請求以釋放DHCP資源,並註銷其IP位址。鑑於客戶端更多的時候並不清楚何時用戶會將其從網絡中移除,此協定不會寄存「DHCP釋放的傳送」。

DHCP NAK

伺服器回覆客戶,客戶要求的IP不能被分配。

客戶端組態參數

DHCP伺服器會提供一些選擇性的組態項目供DHCP客戶端設置。在RFC 2132檔案裏面有提到這個詳細的內容。[1]

設置選項

DHCP Option 60可以被DHCP客戶端用來做為辨識供應商及DHCP客戶端這邊的相容性識別[2]。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時造成差異。有些set-top的Boxes也會設置VCI去通知DHCP Server有關硬件和裝置的功能性資訊。所以結論是,這個選項的資訊會給予DHCP Server在做DHCP回應時必要附加訊息上面的提示。

參考資料

  1. ^ DHCP and BOOTP PARAMETERS. [2008-01-28]. (原始內容存檔於2010-03-16). 
  2. ^ RFC 2132, Section 9.13. [2008-01-28]. (原始內容存檔於2021-05-05). 

相關

外部連結