動態主機配置協議DHCP


DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是一個區域網的網路協議,使用UDP協議工作, 主要有兩個用途:給內部網路或網路服務供應商自動分配IP地址,給用戶或者內部網路管理員作為對所有計算機作中央管理的手段,在RFC 2131中有詳細的描述。DHCP有3個埠,其中UDP67和UDP68為正常的DHCP服務埠,分別作為DHCP Server和DHCP Client的服務埠。

DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)通常被應用在大型的區域網絡環境中,主要作用是集中的管理、分配IP地址,使網路環境中的主機動態的獲得IP地址、Gateway地址、DNS伺服器地址等信息,並能夠提升地址的使用率。

Advertisements

DHCP協議採用客戶端/伺服器模型,主機地址的動態分配任務由網路主機驅動。當DHCP伺服器接收到來自網路主機申請地址的信息時,才會向網路主機發送相關的地址配置等信息,以實現網路主機地址信息的動態配置。DHCP具有以下功能:

1. 保證任何IP地址在同一時刻只能由一台DHCP客戶機所使用。

2. DHCP應當可以給用戶分配永久固定的IP地址。

3. DHCP應當可以同用其他方法獲得IP地址的主機共存(如手工配置IP地址的主機)。

4. DHCP伺服器應當向現有的BOOTP客戶端提供服務。

DHCP有三種機制分配IP地址:

1) 自動分配方式(Automatic Allocation),DHCP伺服器為主機指定一個永久性的IP地址,一旦DHCP客戶端第一次成功從DHCP伺服器端租用到IP地址后,就可以永久性的使用該地址。

Advertisements

2) 動態分配方式(Dynamic Allocation),DHCP伺服器給主機指定一個具有時間限制的IP地址,時間到期或主機明確表示放棄該地址時,該地址可以被其他主機使用。

3) 手工分配方式(Manual Allocation),客戶端的IP地址是由網路管理員指定的,DHCP伺服器只是將指定的IP地址告訴客戶端主機。

三種地址分配方式中,只有動態分配可以重複使用客戶端不再需要的地址。

在整個DHCP伺服器為DHCP客戶端初次提供IP地址自動分配過程中,一共經過了以下四個階段:發現階段(DHCP客戶端在網路中廣播發送DHCP DISCOVER請求報文,發現DHCP伺服器,請求IP地址租約)、提供階段(DHCP伺服器通過DHCP OFFER報文向DHCP客戶端提供IP地址預分配)、選擇階段(DHCP客戶端通過DHCP REQUEST報文確認選擇第一個DHCP伺服器為它提供IP地址自動分配服務)和確認階段(被選擇的DHCP伺服器通過DHCP ACK報文把在DHCP OFFER報文中準備的IP地址租約給對應DHCP客戶端)。

發現階段:即DHCP客戶端獲取網路中DHCP伺服器信息的階段。在客戶端配置了DHCP客戶端程序並啟動后,以廣播方式發送DHCP Discover報文尋找網路中的DHCP伺服器。此廣播報文採用傳輸層的UDP 68號埠發送(封裝的目的埠為UDP 68號埠),經過網路層IP協議封裝后,源IP地址為0.0.0.0(因為此時還沒有分配IP地址),目的IP地址為255.255.255.255(有限廣播IP地址)。如下是一個DHCP DISCOVER報文封裝的IP報頭示例,可以看到 Destination Address(目的地址)是 255.255.255.255,而 Source Address(源地址)是 0.0.0.0。

DHCP發現報文格式:


DHCP發現報文

op,報文類型,1表示請求報文,2表示回應報文。

htype,硬體地址類型,1表示10Mb/s的乙太網的硬體地址。

hlen,硬體地址長度,乙太網中該值為6。

hops,跳數。客戶端設置為0,也能被一個代理伺服器設置。

xid,事務ID,由客戶端選擇的一個隨機數,被伺服器和客戶端用來在它們之間交流請求和響應,客戶端用它對請求和應答進行匹配。該ID由客戶端設置並由伺服器返回,為32位整數。

secs,由客戶端填充,表示從客戶端開始獲得IP地址或IP地址續借后所使用了的秒數。

flags,標誌欄位。這個16比特的欄位,目前只有最左邊的一個比特有用,該位為0,表示單播,為1表示廣播。

ciaddr,客戶端的IP地址。只有客戶端是Bound、Renew、Rebinding狀態,並且能響應ARP請求時,才能被填充。

yiaddr,"你自己的"或客戶端的IP地址。

siaddr,表明DHCP協議流程的下一個階段要使用的伺服器的IP地址。

giaddr,DHCP中繼器的IP地址。//注意:不是地址池中定義的網關

chaddr,客戶端硬體地址。客戶端必須設置它的"chaddr"欄位。UDP數據包中的乙太網幀首部也有該欄位,但通常通過查看UDP數據包來確定乙太網幀首部中的該欄位獲取該值比較困難或者說不可能,而在UDP協議承載的DHCP報文中設置該欄位,用戶進程就可以很容易地獲取該值。

sname,可選的伺服器主機名,該欄位是空結尾的字元串,由伺服器填寫。

file,啟動文件名,是一個空結尾的字元串。DHCP Discover報文中是"generic"名字或空字元,DHCP Offer報文中提供有效的目錄路徑全名。

options,可選參數域,格式為"代碼+長度+數據"。

option選項:

option選項

DHCP客戶端請求地址時,並不知道DHCP伺服器的位置,因此DHCP客戶端會在本地網路內以廣播方式發送請求報文,這個報文成為Discover報文,目的是發現網路中的DHCP伺服器,所有收到Discover報文的DHCP伺服器都會發送回應報文,DHCP客戶端據此可以知道網路中存在的DHCP伺服器的位置。

在以上DHCP Discover報文中IP報頭中的目的地址(Destination Address)是255.255.255.255這個有限廣播地址。這個有限廣播地址就是代表任意一個IPv4子網的廣播地址,當然是發送報文的主機所在的子網和DHCP伺服器所在子網的廣播地址,但因為此時DHCP客戶端並不知道DHCP伺服器所在的是哪個子網。下面所有其他DHCP報文中的255.255.255.255地址的含義也是一樣的。

至於IP報頭中的源地址(Source Address),由於當前DHCP客戶端主機並未分配具體的IP地址,所以只能用具有任意代表功能的0.0.0.0地址來表示了。下面所有其他DHCP報文中指定的0.0.0.0地址的含義也是一樣的。

提供階段:即DHCP伺服器向DHCP客戶端提供預分配IP地址的階段。網路中的所有DHCP伺服器接收到客戶端的DHCP Discover報文後,都會根據自己地址池中IP地址分配的優先次序選出一個IP地址,然後與其他參數一起通過傳輸層的UDP 67號埠,在DHCP Offer報文中以廣播方式發送給客戶端(目的埠是DHCP客戶端的UDP 68號埠)。客戶端通過封裝在幀中的目的MAC地址(也就在DHCP Discover報文中的CHADDR欄位值)的比對來確定是否接收該幀。但這樣一來,理論上DHCP客戶端可能會收到多個DHCP Offer報文(當網路中存在多個DHCP伺服器時),但DHCP客戶端只接受第一個到來的DHCP Offer報文。

DHCP提供階段報文格式

提供報文IP報頭示例

在DHCP Offer報文中,Ciaddr欄位值仍為0.0.0.0,因為客戶端仍沒有分配到IP地址;Yiaddr欄位已有值了,這是DHCP伺服器為該客戶端預分配的IP地址;因為此時仍沒有得到客戶端確認,所以Siaddr欄位值仍為0.0.0.0;因為沒有經過DHCP中繼伺服器,所以Giaddr欄位值仍為0.0.0.0。另外,在 DHCP可選項部分,可以看到由伺服器隨 IP 地址一起發送的各種選項。在這種情況下,伺服器發送的是子網掩碼、默認網關(路由器)、租約時間、WINS 伺服器地址(NetBIOS 名稱服務)和 NetBIOS 節點類型。

OFFER報文示例

版權所有權歸卿萃科技,轉載請註明出處

作者:卿萃科技ALIFPGA

原文地址:卿萃科技FPGA極客空間 微信公眾號

Advertisements

你可能會喜歡