DHCP : 网络世界身份的获取
DHCP 協議
DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)前身是 BOOTP 協議,是一個局域網的網絡協議。它是一種?服務器- 客戶端?的工作模式,使用 UDP 協議工作,常用的 2 個端口:67(DHCP server), 68(DHCP ?client)。
DHCP 通常被用于局域網環境,主要作用是集中的管理、分配 IP 地址,使 client 動態的獲得 IP 地址、Gateway 地址、DNS 服務器地址等信息,并能夠提升地址的使用率。
DHCP 報文種類
DHCP 一共有 8 種報文,分別為 DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK、DHCP NAK、DHCP Release、DHCP Decline、DHCP Inform。各種類型報文的基本功能如下:
| DHCP Discover | DHCP 客戶端在請求 IP 地址時并不知道 DHCP 服務器的位置,因此 DHCP 客戶端會在本地網絡內以廣播方式發送 Discover 請求報文,以發現網絡中的 DHCP 服務器。所有收到 Discover 報文的 DHCP 服務器都會發送應答報文,DHCP 客戶端據此可以知道網絡中存在的 DHCP 服務器的位置。 |
| DHCP Offer | DHCP 服務器收到 Discover 報文后,就會在所配置的地址池中查找一個合適的IP地址,加上相應的租約期限和其他配置信息(如網關、DNS服務器等),構造一個 Offer 報文,發送給 DHCP 客戶端,告知用戶本服務器可以為其提供 IP 地址。但這個報文只是告訴 DHCP 客戶端可以提供 IP 地址,最終還需要客戶端通過 ARP 來檢測該 IP 地址是否重復。 |
| DHCP Request | DHCP 客戶端可能會收到很多 Offer 請求報文,所以必須在這些應答中選擇一個。通常是選擇第一個 Offer 應答報文的服務器作為自己的目標服務器,并向該服務器發送一個廣播的 Request 請求報文,通告選擇的服務器,希望獲得所分配的IP地址。另外,DHCP 客戶端在成功獲取 IP 地址后,在地址使用租期達到 50% 時,會向 DHCP 服務器發送單播 Request 請求報文請求續延租約,如果沒有收到 ACK 報文,在租期達到 87.5% 時,會再次發送廣播的 Request 請求報文以請求續延租約。 |
| DHCP ACK | DHCP 服務器收到 Request 請求報文后,根據 Request 報文中攜帶的用戶 MAC 來查找有沒有相應的租約記錄,如果有則發送 ACK 應答報文,通知用戶可以使用分配的 IP 地址。 |
| DHCP NAK | 如果 DHCP 服務器收到 Request 請求報文后,沒有發現有相應的租約記錄或者由于某些原因無法正常分配 IP 地址,則向 DHCP 客戶端發送 NAK 應答報文,通知用戶無法分配合適的 IP 地址。 |
| DHCP Release | 當 DHCP 客戶端不再需要使用分配 IP 地址時,就會主動向 DHCP 服務器發送 RELEASE 請求報文,告知服務器用戶不再需要分配 IP 地址,請求 DHCP 服務器釋放對應的 IP 地址。 |
| DHCP Decline | 當客戶端發現服務器分配的IP地址無法使用(如IP地址沖突時),則會向 DHCP 服務器發送 Decline 請求報文,通知服務器所分配的 IP 地址不可用,以期獲得新的 IP 地址。 |
| DHCP Inform | DHCP 客戶端如果需要從 DHCP 服務器端獲取更為詳細的配置信息,則向 DHCP 服務器發送Inform 請求報文;目前基本上已經棄用了。 |
正常的工作流程如下:
? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DHCP 工作過程
DHCP 報文格式
DHCP 服務的 8 種報文的格式是相同的,不同類型的報文只是報文中的某些字段取值不同。DHCP 報文格式基于 BOOTP 的報文格式,如下圖所示:
DHCP 報文格式
下面是各字段的說明。
-
OP?: 報文的操作類型。若是 client 送給 server 的封包,設為 1 ,反向為 2。
-
htype?: 客戶端的MAC地址類型 ,Ethernet 為 1。
-
hlen?: 客戶端的 MAC 地址長度 , Ethernet 為 6。
-
hops?: DHCP 報文經過的 DHCP 中繼的數目,默認為 0。DHCP 請求報文每經過一個 DHCP 中繼,該字段就會增加 1。沒有經過 DHCP 中繼時值為 0。
-
**xid **: 隨機生成的一段字符串,兩個數據包擁有相同的 xid 說明他們屬于同一次會話
-
secs?: DHCP 客戶端從獲取到 IP 地址或者續約過程開始到現在所消耗的時間,以秒為單位。
-
flags?: 標志位,只使用第 0 比特位,是廣播應答標識位,用來標識 DHCP 服務器應答報文是采用單播還是廣播發送,0 表示采用單播發送方式,1 表示采用廣播發送方式。其余位尚未使用。
-
**ciaddr **: 客戶端的 IP 地址。僅在 DHCP 服務器發送的ACK報文中顯示,在其他報文中均顯示0
-
**yiaddr **: DHCP 服務器分配給客戶端的 IP 地址。僅在 DHCP 服務器發送的 Offer 和 ACK 報文中顯示,其他報文中顯示為 0。
-
siaddr?: 若 client 需要透過網絡開機,從 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK封包中,此欄填寫開機程序代碼所在 server 之地址。
-
**giaddr **: 若需跨網域進行 DHCP 發放,此欄為 relay agent 的地址,否則為 0。
-
chaddr?: DHCP 客戶端的 MAC 地址
-
sname?: DHCP 服務器的名稱(DNS域名格式)。在 Offer 和 ACK 報文中顯示發送報文的 DHCP 服務器名稱,其他報文顯示為0。
-
file?: 若 client 需要透過網絡開機,此欄將指出開機程序名稱,稍后以 TFTP 傳送。
-
options?: 允許廠商定義選項(Vendor-Specific Area),以提供更多的設定信息(如:Netmask、Gateway、DNS、等等)。長度可變,格式為"代碼+長度+數據"。
列出 options 部分可選的選項:
| 1 | 4 | 子網掩碼 |
| 3 | 長度可變,必須是4個字節的倍數。 | 默認網關(可以是一個路由器IP地址列表) |
| 6 | 長度可變,必須是4個字節的整數倍。 | DNS服務器(可以是一個DNS服務器IP地址列表) |
| 15 | 長度可變 | 域名稱(主DNS服務器名稱) |
| 44 | 長度可變,必須是4個字節的整數倍。 | WINS服務器(可以是一個WINS服務器IP列表) |
| 51 | 4 | 有效租約期(以秒為單位) |
| 53 | 1 | 報文類型1: DHCP Discover2: DHCP Offer3: DHCP Request4: DHCP Decline5: DHCP ACK6: DHCP NAK7: DHCP Release8: DHCP Inform |
| 58 | 4 | 續約時間 |
?
抓包分析
QEMU 在剛開始運行的時候就會自動運行 DHCP,只要在開始運行 QEMU 之前開啟抓包就能抓到 DHCP 的包
打開 wireshark 軟件 開啟抓包,設定過濾條件為 bootp,只顯示 DHCP 相關的包。
運行 QEMU
查看 wireshark ,發現已經抓到了 DHCP 協議 的數據包,已經抓取到的DHCP協議的數據包
?
其中的 1-6 就對應著上面的工作流程的那 6 個過程。
我們也可以點開封包詳細信息然后和上面的 DHCP 的報文格式做對比
點開 DHCP Discover 數據包, 從下圖可以看出,DHCP 屬于應用層協議,它在傳輸層使用 UDP 協議,目的端口是 67。
?
DHCP Discover 數據包
當然還有回復 DHCP 服務器響應請求的數據包,如下圖所示:
DHCP 服務器響應請求的數據包
其他的一些選項對照著上面的報文格式做對比,就可以很容易的了解 DHCP 協議的工作過程了。
轉載于:https://www.cnblogs.com/jiangzhaowei/p/10186585.html
總結
以上是生活随笔為你收集整理的DHCP : 网络世界身份的获取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jconsole工具监控java运行情况
- 下一篇: tp3.2 复合查询