DHCP協議及應用 原文:https://blog.csdn.net/weixin_41010318

DHCP: 動態主機配置協議 
  TCP/IP協議想要運行正常的話,網絡中的主機和路由器不可避免地需要配置一些信息(如接口的IP地址等)。有了這些配置信息主機/路由器才能提供/使用特定的網絡服務。 
  主機信息的必要元素有:IP地址、子網掩碼、DNS服務器IP地址 
  TCP/IP協議配置主機信息主要有三種方法: 

  1. 手動配置 
  2. 動態獲取 
  3. 根據特定算法計算。 
      在網絡中,我們把主機分爲兩大類,服務器主機和客戶端主機, 
    • 服務器主機: 一般採用手動配置 
    • 客戶端主機: 一般採用動態獲取 
        服務器一般採用手動配置,而客戶端一般動態獲取。主要基於以下原因: 
  4. 客戶主機比服務主機移動更頻繁 
  5. 服務主機需要提供更可靠的服務,其配置信息應該減少對其他系統/主機的依賴 
  6. 客戶主機比服務主機的數量要多得多。 
  7. 客戶主機使用者的網絡配置知識比服務主機的使用者低

  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號端口。詳細的交互過程如下圖。
DHCP Client以廣播的方式發出DHCP Discover報文。
所有的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地址的紀錄。
DHCP Client只能處理其中的一個DHCP Offer報文,一般的原則是DHCP Client處理最先收到的DHCP Offer報文。
DHCP Client會發出一個廣播的DHCP Request報文,在選項字段中會加入選中的DHCP Server的IP地址和需要的IP地址。
DHCP Server收到DHCP Request報文後,判斷選項字段中的IP地址是否與自己的地址相同。如果不相同,DHCP Server不做任何處理只清除相應IP地址分配記錄;如果相同,DHCP Server就會向DHCP Client響應一個DHCP ACK報文,並在選項字段中增加IP地址的使用租期信息。
DHCP Client接收到DHCP ACK報文後,檢查DHCP Server分配的IP地址是否能夠使用。如果可以使用,則DHCP Client成功獲得IP地址並根據IP地址使用租期自動啓動續延過程;如果DHCP Client發現分配的IP地址已經被使用,則DHCP Client向DHCPServer發出DHCP Decline報文,通知DHCP Server禁用這個IP地址,然後DHCP Client開始新的地址申請過程。
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請求的標識


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章