1. 程式人生 > >DHCP協議原理及應用

DHCP協議原理及應用

DHCP: 動態主機配置協議 
  TCP/IP協議想要執行正常的話,網路中的主機和路由器不可避免地需要配置一些資訊(如介面的IP地址等)。有了這些配置資訊主機/路由器才能提供/使用特定的網路服務。 
  主機資訊的必要元素有:IP地址、子網掩碼、DNS伺服器IP地址 
  TCP/IP協議配置主機資訊主要有三種方法: 
1. 手動配置 
2. 動態獲取 
3. 根據特定演算法計算。 
  在網路中,我們把主機分為兩大類,伺服器主機和客戶端主機, 
+ 伺服器主機: 一般採用手動配置 
+ 客戶端主機: 一般採用動態獲取 
  伺服器一般採用手動配置,而客戶端一般動態獲取。主要基於以下原因: 
1. 客戶主機比服務主機移動更頻繁 
2. 服務主機需要提供更可靠的服務,其配置資訊應該減少對其他系統/主機的依賴 
3. 客戶主機比服務主機的數量要多得多。 
4. 客戶主機使用者的網路配置知識比服務主機的使用者低

  DHCP有Bootp協議發展而來。Bootp協議提供了有限的主機資訊配置,且主機資訊已經配置就很難被修改。DHCP提供 幾乎所有的主機資訊的配置,且引入了租約等概念,使得主機資訊能夠動態發生變化。 DHCP向後相容Bootp。 
  DHCP基於UDP/IP傳輸。DHCP伺服器使用埠號67,DHCP 客戶端使用埠號68.

DHCP 協議內容

DHCP 主要分為兩部分: 地址的管理 和 配置資訊的傳遞 
地址管理: 地址管理處理IP‘地址的動態分配、向客戶端提供地址租約 
配置資訊的傳遞: 包含DHCP報文格式、狀態機

DHCP 地址管理

地址池 與 地址租約

  在IP地址的動態分配中,DHCP客戶端想DHCP伺服器傳送IP地址請求。DHCP伺服器會維護一個 IP地址池,DHCP從地址池從取出一個IP迴應給DHCP客戶端。在地址分配時,DHCP伺服器也會指定迴應給DHCP客戶端的IP地址的租約期,該地址只有在該租約期內可用,不過DHCP客戶端可用在租約期內請求延長租約(更新租約期)。

DHCP協議採用UDP作為傳輸協議,主機發送請求訊息到DHCP伺服器的67號埠,DHCP伺服器迴應應答訊息給主機的68號埠。詳細的互動過程如下圖。
  1. DHCP Client以廣播的方式發出DHCP Discover報文。
  2. 所有的DHCP Server都能夠接收到DHCP Client傳送的DHCP Discover報文,所有的DHCP Server都會給出響應,向DHCP Client傳送一個DHCP Offer報文。 DHCP Offer報文中“Your(Client) IP Address”欄位就是DHCP Server能夠提供給DHCP Client使用的IP地址,且DHCP Server會將自己的IP地址放在“option”欄位中以便DHCP Client區分不同的DHCP Server。DHCP Server在發出此報文後會存在一個已分配IP地址的紀錄。
  3. DHCP Client只能處理其中的一個DHCP Offer報文,一般的原則是DHCP Client處理最先收到的DHCP Offer報文。 DHCP Client會發出一個廣播的DHCP Request報文,在選項欄位中會加入選中的DHCP Server的IP地址和需要的IP地址。
  4. DHCP Server收到DHCP Request報文後,判斷選項欄位中的IP地址是否與自己的地址相同。如果不相同,DHCP Server不做任何處理只清除相應IP地址分配記錄;如果相同,DHCP Server就會向DHCP Client響應一個DHCP ACK報文,並在選項欄位中增加IP地址的使用租期資訊。
  5. DHCP Client接收到DHCP ACK報文後,檢查DHCP Server分配的IP地址是否能夠使用。如果可以使用,則DHCP Client成功獲得IP地址並根據IP地址使用租期自動啟動續延過程;如果DHCP Client發現分配的IP地址已經被使用,則DHCP Client向DHCPServer發出DHCP Decline報文,通知DHCP Server禁用這個IP地址,然後DHCP Client開始新的地址申請過程。
  6. DHCP Client在成功獲取IP地址後,隨時可以通過傳送DHCP Release報文釋放自己的IP地址,DHCP Server收到DHCP Release報文後,會回收相應的IP地址並重新分配。
在使用租期超過50%時刻處,DHCP Client會以單播形式向DHCP Server傳送DHCPRequest報文來續租IP地址。如果DHCP Client成功收到DHCP Server傳送的DHCP ACK報文,則按相應時間延長IP地址租期;如果沒有收到DHCP Server傳送的DHCP ACK報文,則DHCP Client繼續使用這個IP地址。 在使用租期超過87.5%時刻處,DHCP Client會以廣播形式向DHCP Server傳送DHCPRequest報文來續租IP地址。如果DHCP Client成功收到DHCP Server傳送的DHCP ACK報文,則按相應時間延長IP地址租期;如果沒有收到DHCP Server傳送的DHCP ACK報文,則DHCP Client繼續使用這個IP地址,直到IP地址使用租期到期時,DHCP Client才會向DHCP Server傳送DHCP Release報文來釋放這個IP地址,並開始新的IP地址申請過程。 需要說明的是:DHCP客戶端可以接收到多個DHCP伺服器的DHCPOFFER資料包,然後可能接受任何一個DHCPOFFER資料包,但客戶端通常只接受收到的第一個DHCPOFFER資料包。另外,DHCP伺服器DHCPOFFER中指定[1]的地址不一定為最終分配的地址,通常情況下,DHCP伺服器會保留該地址直到客戶端發出正式請求。 正式請求DHCP伺服器分配地址DHCPREQUEST採用廣播包,是為了讓其它所有傳送DHCPOFFER資料包的DHCP伺服器也能夠接收到該資料包,然後釋放已經OFFER(預分配)給客戶端的IP地址。 如果傳送給DHCP客戶端的地址已經被其他DHCP客戶端使用,客戶端會向伺服器傳送DHCPDECLINE資訊包拒絕接受已經分配的地址資訊。 在協商過程中,如果DHCP客戶端傳送的REQUEST訊息中的地址資訊不正確,如客戶端已經遷移到新的子網或者租約已經過期,DHCP伺服器會發送DHCPNAK訊息給DHCP客戶 端,讓客戶端重新發起地址請求過程。


DHCP 報文

這裡寫圖片描述 
Op: 報文型別,分為 兩大類: Request(1) 和 Reply(2) 
HW Type: 硬體型別,一般是乙太網:1 
HW Len: 硬體地址長度,單位位元組。對應乙太網:6(mac地址長度為6位元組48bit) 
Transaction ID:事務ID,隨機數,有客戶端生成,伺服器Reply時,會把Request中的Transaction拷貝到Reply報文中。 
Secs: 距離第一次發射IP請求或Renew請求過去的秒數 
Flags:標誌位,目前僅第一個bit有使用,置1 標明廣播 
Client IP Address:當前客戶端的IP地址,如果當前客戶端沒有IP地址,則置0 
Your IP Address: 伺服器想客戶端提供IP地址時,會把IP地址填入本欄位 
(Next)Server IP Address:客戶端引導時需要的另一個伺服器的IP地址 
Gateway (Relay) IP Address: 閘道器(中繼)IP地址,有DHCP 中繼器在轉發DHCP報文的時候填入 
Server Name: Server名字,有64bytes,一般不使用,填充為0 
Boot File name: boot file的路徑,128bytes, 一般不使用,填充為0 
Option: 選項,不定長度。 DHCP報文中比較重要的欄位,後面會有比較詳細的介紹。

DHCP Option

  DHCP從Bootp拓展而來,DHCP報文也是有Bootp報文發展而來。但是DHCP在Bootp之上添加了許多功能,其報文也需要有一定的拓展。如果Bootp報文不能滿足的內容,就以Option的形式存在於DHCP報文中。 
  DHCP協議其實就是攜帶許多Option的Bootp 
  DHCP有許多型別的Option,長度不一(但都是整數字節)。Option遵循以下格式 
+ 如果Option沒有值,則只有標誌位之類的內容,則以一個位元組表示 
+ 如果Opiton有值,即Opiton是以下name-value對,則Opiton需要多個位元組表示,其中第一個位元組表示 option的名字,第二位元組表示value的長度,第三個位元組開始表示value。

  DHCP支援大量的Option(Bootp也支援其中的部分),下面列舉一些常用的

Option 名稱 描述
0 Pad 填充位
1 Subnet Mask 子網 掩碼
3 Router Address 路由器地址
6 DNS DNS server
15 DN 域名
50 Requested IP Address 請求的IP地址
51 Address Lease Time 地址租約時間
53 DHCP Message Type DHCP 訊息型別,如Discover、Request、Offer、ACK等
54 Server Identifier 伺服器標識
55 Parameter Request List 引數請求列表
56 DHCP Error Message DHCP 錯誤訊息
58 Lease Renewal Time 租約續期時間
59 Lease Rebinding Time 租約重新設定的時間
61 Client Identifier 客戶標識
119 Domain Search List 域名查詢列表
255 End 結束

上面是常用的Option,DHCP報文與Option 255標識報文的結束。 
在DHCP Option中,我們著重看下DHCP Message Type(53),DHCP Message Type標識DHCP訊息型別,主要有一下型別

DHCP 訊息型別 對應的Option值
DHCPDISCOVER 1
DHCPOFFER 2
DHCPREQUEST 3
DHCPDECLINE 4
DHCPACK 5
DHCPNAK 6
DHCPRELEASE 7
DHCPINFORM 8
DHCPFORCERENEW 9
DHCPLEASEQUERY 10
DHCPLEASEUNASSIGNED 11
DHCPLEASEUNKNOWN 12
DHCPLEASEACTIVE 13

DHCP 協議 操作流程

主機新加入網路時,獲取IP的流程 
1. 新的client加入網路時,會使用0.0.0.0作為源地址,傳送discover廣播報文,查詢網路上有哪些DHCP server,以及這些DHCP server 能Offer哪些IP地址 
2. DHCP伺服器接收到DHCP Discover報文後,迴應Offer報文,提供IP地址(可能包含DNS等其他資訊)給client 
3. client 根據收到的Offer報文,選擇一個DHCP server,並選擇它提供的IP地址。然後廣播Request報文,想DHCP Server請求該IP地址,同時想本地網路(尤其是其他DHCP Server)公告自己已經選擇了某個DHCP Server的某個IP地址。 
4. DHCP Server 迴應ACK報文,將IP地址分配給Client端 (特殊情況:DHCP Server在傳送Offer報文和接收到Request的短暫時間內把IP分配給了其他主機) 
5. DHCP Client 收到ACK報文後,會針對獲得的IP地址傳送ARP Request,進行IP地址衝突檢測。 
6. 如果IP地址已經被其他主機使用,則Client放棄該IP地址,想Server傳送DHCP DECLINE報文告訴Server該地址不能使用。然後一段時間後(一般10s)再此嘗試獲取該IP地址 
7. 如果Client仍然無法使用該IP地址,則傳送DHCP RELEASE報文,放棄該地址。

主機已經有IP地址,只想更新租約 
1. 此時可以跳過DHCP Discover報文和DHCP Offer報文 
2. Client傳送攜帶當前IP地址的Request報文 
3. 如果Server同意Client續約,則傳送DHCP ACK報文。如果拒絕續約,則傳送DHCPNAK報文。

* 主機只想更新IP地址以外的資訊* 
用DHCPINFORM 取代 DHCP Request報文。

1.      抓包分析:

(1)DHCP discover階段:


(2)DHCP offer階段:


(3)DHCP request階段:


(4)DHCP ack階段:


2.      總結:

階段

源MAC

目標MAC

源IP

目標IP

Discover

PC機的MAC

全FF

0.0.0.0

255.255.255.255

Offer

Dhcp伺服器或者中繼器路由的MAC

Dhcp客戶機的MAC

Dhcp伺服器或者中繼路由器的IP地址

準備分配的IP地址

Request

PC機的MAC

全FF

0.0.0.0

255.255.255.255

Ack

Dhcp伺服器或者中繼器路由的MAC

Dhcp客戶機的MAC

Dhcp伺服器或者中繼路由器的IP地址

準備分配的IP地址

3.DHCPTransaction  ID是由客戶機產生一個隨機數獲得,不同MAC地址產生的Transaction ID不同,Transaction  ID是區分不同DHCP請求的標識