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 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地址並重新分配。
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請求的標識