1. 程式人生 > >計算機網路-DHCP協議抓包分析筆記

計算機網路-DHCP協議抓包分析筆記

前置問題:什麼是(網路)協議?

網路協議為計算機網路中進行資料交換而建立的規則、標準或約定的集合。

而且:

一個網路協議至少包括三要素:

  語法:用來規定資訊格式;資料及控制資訊的格式、編碼及訊號電平等。

  語義:用來說明通訊雙方應當怎麼做;用於協調與差錯處理的控制資訊。

  時序:定義了何時進行通訊,先講什麼,後講什麼,講話的速度等。比如是採用同步傳輸還是非同步傳輸。

簡單的來說,就是說話交流的過程,兩方要說話,相互聽得懂,那麼得滿足:

①:說的同一個語言(語法)

②:說的話表達了明確的意思(語義)

③:話講的有條理,能被理解(時序)

清楚了這一點,我們就可以開始分析協議了。

 

主機申請IP:DHCP動態主機配置協議

①:客戶端廣播DHCP訊息“Discover”

所有的伺服器端都可以收到這個訊息。

②:伺服器提供租約“Offer”

所有的伺服器端都會提供一個響應,Offer報文中“Your(Client) IP Address”欄位就是伺服器端能供使用的IP地址。

且伺服器端會將自己的IP地址放在“option”欄位中以便客戶端區分不同的伺服器端。

伺服器端在發出此報文後會存在一個已分配IP地址的紀錄。

③:客戶端選擇並請求租用“Request”

客戶端只能處理其中的一個DHCP Offer報文,一般的原則是客戶端處理最先收到的DHCP Offer報文,客戶端會發出一個廣播的DHCP Request報文,在選項欄位中會加入選中的伺服器端的IP地址和需要的IP地址

伺服器端收到DHCP Request報文後,判斷選項欄位中的IP地址是否與自己的地址相同,如果不相同,伺服器端不做任何處理只清除相應IP地址分配記錄;如果相同,伺服器端就會向客戶端響應一個DHCP ACK報文,並在選項欄位中增加IP地址的使用租期資訊。

④:伺服器確認將地址租用給客戶端“ACK”

客戶端接收到DHCP ACK報文後,檢查伺服器端分配的IP地址是否能夠使用。如果可以使用,則客戶端成功獲得IP地址並根據IP地址使用租期自動啟動續延過程;如果客戶端發現分配的IP地址已經被使用,則客戶端向伺服器端發出DHCP Decline報文,通知伺服器端禁用這個IP地址,然後客戶端開始新的地址申請過程。

瞭解了DHCP協議的基本執行規則,就可以使用wireshack工具進行分析了。

Wireshack分析DHCP報文

在過濾器上輸入bootp,顯示如下

下面,我們通過抓包分析其報文,講講白話解釋來理解一下DHCP的過程,DHCP的報文有以下基本格式:

但看這麼一串僵硬的文字肯定不是很舒服,我們選取一些重要資訊理解一下,我們把客戶端向伺服器端請求ip看作找工作的過程:

我們先看Discover階段:

這段的意思,可以說是,一個使用者要找工作,他往給網上的某個“招聘群”裡發了一條訊息,說“我要找工作!”

我們看到:

訊息型別 :boot request(1),表示這條資訊是“請求包”,請求包是客戶端發出的;

bootp 標誌 :其中第一位為 0 表示單播,為 1 表示廣播,但是其是在從伺服器發出的才有用,此處無用;

一系列 IP 地址 :都是 0.0.0.0,因為還沒有確定;

MAC 地址 :顯示了裝置的 MAC 地址;

DHCP 訊息型別 :表示了該條資訊的型別。

再看Offer階段:

這一段的意思,可以理解成,看到了這一個使用者的訊息,獵頭們紛紛給該使用者提供自己的工作環境資訊和工資等。

和Discover階段不同的是,我們看到訊息型別變成了回覆包、伺服器向客戶端的單播有了具體的地址,即裝置的實體地址、在your (client) IP address中出現可以提供的地址,此外,在Option中還可以檢視伺服器端的子網掩碼,域名等資訊。

再看Request階段:

這一階段可理解為,使用者接受了某個獵頭提供的工作,並且告訴其他的獵頭:“我找到工作了,不用再發offer了”。

這裡還是廣播,但是我們可以看到這邊的已經將一系列資訊,如:主機名稱、申請的哪一個伺服器、申請的ip等廣播出去,收到的伺服器就會停止傳送offer,提供服務的伺服器就會記錄該客戶端申請的地址。

最後是ack階段:

相當於是客戶跟著獵頭去公司,簽了個合同,就成功的入職了。

當伺服器收到客戶端回答的Request資訊之後, 它便向客戶端傳送一個包含它所提供的IP地址和其他設定的Ack確認資訊。以確認IP地址的正式生效。然後客戶端便將其TCP/IP協議與網絡卡繫結,另外,除DHCP客戶機選中的伺服器外,其他的DHCP伺服器都將收回曾提供的IP地址。

總結:

至於offer和ack階段的目標地址到底是廣播還是單播,可以參考一下博文:

https://www.zhihu.com/question/280872108?sort=cre