DHCP協議工作流程分析
1.前言
DHCP,Dynamic Host Configuration Protocol,動態主機配置協議,簡單來說就是主機獲取IP地址的過程,屬於應用層協議。DHCP採用UDP的68(客戶端)和67(伺服器)(伺服器)埠進行通訊。
2.DHCP工作過程
為了動態獲取並使用一個合法的IP地址,需要經歷以下幾個階段:
- 發現階段:即 DHCP 客戶端尋找 DHCP 伺服器的階段。
- 提供階段:即 DHCP 伺服器提供 IP 地址的階段。
- 選擇階段:即 DHCP 客戶端選擇某臺 DHCP 伺服器提供的 IP 地址的階段。
- 確認階段:即 DHCP 伺服器確認所提供的 IP 地址的階段。
IP地址的動態獲取過程如圖2所示,下面將詳細介紹每個階段的工作過程。
2.1 發現階段
在發現階段,DHCP客戶端通過傳送DHCP-DISCOVER報文來尋找DHCP伺服器。由於DHCP伺服器的IP地址對於客戶端來說是未知的,所以DHCP客戶端以廣播方式傳送DHCP-DISCOVER報文。所有收到DHCP-DISCOVER報文的DHCP伺服器都會傳送回應報文,DHCP客戶端據此可以知道網路中存在的DHCP伺服器的位置。
2.2 提供階段
網路中接收到DHCP-DISCOVER報文的DHCP伺服器,會選擇一個合適的IP地址,連同IP地址租約期限和其他配置資訊(如閘道器地址,域名伺服器地址等)一同通過DHCP-OFFER報文傳送給DHCP客戶端。
DHCP伺服器通過地址池儲存可供分配的IP地址和其他配置資訊。當DHCP伺服器接收到DHCP請求報文後,將從IP地址池中取得空閒的IP地址及其他的引數,傳送給DHCP客戶端。
DHCP伺服器為客戶端分配IP地址的優先次序如下:
- 與客戶端 MAC 地址或客戶端 ID 靜態繫結的 IP 地址;
- DHCP 伺服器記錄的曾經分配給客戶端的 IP 地址;
- 客戶端傳送的 DHCP-DISCOVER 報文中 Option 50 欄位指定的 IP 地址;
- 在 DHCP 地址池中,順序查詢可供分配的 IP 地址,最先找到的 IP 地址;
- 如果未找到可用的 IP 地址,則依次查詢租約過期、曾經發生過沖突的 IP 地址,如果找到則進行分配,否則將不予處理。
DHCP伺服器為客戶端分配IP地址時,伺服器首先需要確認所分配的IP沒有被網路上的其他裝置所使用。DHCP伺服器通過傳送ICMP Echo Request(ping)報文對分配的IP進行探測。如果在規定的時間內沒有應答,那麼伺服器就會再次傳送ping報文。到達規定的次數後,如果仍沒有應答,則所分配的IP地址可用。否則將探測的IP地址記錄為衝突地址,並重新選擇IP地址進行分配。
2.3 選擇階段
如果有多臺DHCP伺服器向DHCP客戶端回應DHCP-OFFER報文,則DHCP客戶端只接受第一個收到的DHCP-OFFER報文。然後以廣播方式傳送DHCP-REQUEST請求報文,該報文中包含Option 54(伺服器標識選項),即它選擇的DHCP伺服器的IP地址資訊。
以廣播方式傳送DHCP-REQUEST請求報文,是為了通知所有的DHCP伺服器,它將選擇Option 54中標識的DHCP伺服器提供的IP地址,其他DHCP伺服器可以重新使用曾提供的IP地址。
2.4 確認階段
收到DHCP客戶端傳送的DHCP-REQUEST請求報文後,DHCP伺服器根據DHCP-REQUEST報文中攜帶的MAC地址來查詢有沒有相應的租約記錄。如果有,則傳送DHCP-ACK報文作為應答,通知DHCP客戶端可以使用分配的IP地址。
DHCP客戶端收到DHCP伺服器返回的DHCP-ACK確認報文後,會以廣播的方式傳送免費ARP報文,探測是否有主機使用伺服器分配的IP地址,如果在規定的時間內沒有收到回應,客戶端才使用此地址。否則,客戶端會傳送DHCP-DECLINE報文給DHCP伺服器,通知DHCP伺服器該地址不可用,並重新申請IP地址。
如果DHCP伺服器收到DHCP-REQUEST報文後,沒有找到相應的租約記錄,或者由於某些原因無法正常分配IP地址,則傳送DHCP-NAK報文作為應答,通知DHCP客戶端無法分配合適IP地址。DHCP客戶端需要重新傳送DHCP-DISCOVER報文來請求新的IP地址。
3. DHCP報文格式
DHCP報文格式如下圖所示:
- op:報文的操作型別,分為請求報文和響應報文,1 為請求報文;2 為響應報文。具體的報文型別在 option 欄位中標識。
- htype:硬體地址型別。
- hlen:硬體地址長度。系統目前只對乙太網支援,硬體地址長度固定為 6。
- hops:DHCP 報文經過的 DHCP 中繼的數目。DHCP 請求報文每經過一個DHCP 中繼,該欄位就會增加 1。
- xid:由客戶端軟體產生的隨機數,用於匹配請求和應答報文。
- secs:客戶端進入 IP 地址申請程式的時間或者更新 IP 地址程式的時間;由客戶端軟體根據情況設定。目前沒有使用,固定為 0。
- flags:標誌欄位。第一個位元為廣播響應標識位,用來標識 DHCP 伺服器響應報文是採用單播還是廣播方式傳送,0 表示採用單播方式,1 表示採用廣播方式。其餘位元保留不用。
- ciaddr:DHCP 客戶端的 IP 地址。
- yiaddr:DHCP 伺服器分配給客戶端的 IP 地址。
- siaddr:DHCP 客戶端獲取 IP 地址等資訊的伺服器 IP 地址。
- giaddr:DHCP 客戶端發出請求報文後經過的第一個 DHCP 中繼的 IP 地址。
- chaddr:DHCP 客戶端的硬體地址。
- sname:DHCP 客戶端獲取 IP 地址等資訊的伺服器名稱。
- file:DHCP 伺服器為 DHCP 客戶端指定的啟動配置檔名稱及路徑資訊。
- options:可選變長選項欄位,包含報文的型別、有效租期、DNS 伺服器的IP 地址、WINS 伺服器的 IP 地址等配置資訊。
4.使用Wireshark抓包分析
通過Wireshark抓取DHCP獲取IP過程的資料包文:
- 開Wireshark抓包
- PC當前已有IP,使用cmd命令釋放IP(
ipconfig /release
),並重新獲取IP(ipconfig /renew
)
5.參考資料
-
DHCP技術白皮書:
http://www.h3c.com/cn/d_200802/333443_30003_0.htm#download -
DHCP協議原理及其實現流程:
https://blog.csdn.net/wuruixn/article/details/8282554 -
DHCP完整過程詳解及Wireshark抓包分析:
https://bbs.huaweicloud.com/blogs/158906 -
DHCP協議原理及抓包分析:
https://blog.csdn.net/andy_93/article/details/78238931
相關文章
- DHCP (Dynamic Host Configuration Protocol )協議的探討與分析Protocol協議
- 041-http協議概念及工作流程HTTP協議
- 趣談 DHCP 協議,有點意思。協議
- 動態主機配置協議DHCP協議
- 計算機網路之三:DHCP協議計算機網路協議
- 什麼是DHCP動態主機配置協議協議
- HTTP協議請求工作流程是什麼?linux學習HTTP協議Linux
- KaliLinux常用服務配置教程DHCP服務工作流程Linux
- WireShark——IP協議包分析(Ping分析IP協議包)協議
- http協議分析HTTP協議
- 【協議】AAA Radius協議的常用報文分析協議
- wireshark 分析TCP協議TCP協議
- 2.PCIe協議分析協議
- 透視RPC協議:SOFA-BOLT協議原始碼分析RPC協議原始碼
- UDP協議抓包分析 -- wiresharkUDP協議
- HTTP協議分析及攻防方法HTTP協議
- Java安全之RMI協議分析Java協議
- 國科雲:什麼是DHCP?DHCP是怎麼工作的?
- Asyncdb(四):MySQL網路協議分析MySql協議
- 看大牛如何分析Zookeeper ZAB 協議協議
- ModbusTCP協議報文詳細分析TCP協議
- Wireshark中的TCP協議包分析TCP協議
- 應用層相關協議分析協議
- 使用WireShark抓包分析TCP協議TCP協議
- MQTT工作筆記0001---MQTT協議概述MQQT筆記協議
- ModbusTCP協議簡介與程式設計流程圖TCP協議程式設計流程圖
- UI教程:工作流程指南之需求分析UI
- DHCP和PXE是怎麼工作的
- HTTP協議是什麼?HTTP怎樣工作?-VeCloudHTTP協議Cloud
- OpenVPN 協議解析-握手資料包分析協議
- Git傳輸協議的對比分析Git協議
- 微信登入協議分析記錄協議
- Socks協議以及代理轉發工具分析協議
- 以太坊原始碼分析(37)eth以太坊協議分析原始碼協議
- 資料分析的工作流程是什麼?
- Raft協議和ZAB協議Raft協議
- Gossip協議也叫Epidemic協議(流行病協議)Go協議IDE
- Web伺服器的工作原理及其相關協議Web伺服器協議