1. 程式人生 > >DHCP動態主機配置協議分析

DHCP動態主機配置協議分析

簡介

        DHCP(Dynamic Host Configuration Protocol)即動態主機配置協議是一個區域網的網路協議,使用UDP協議工作,主要有兩個用途:使網路環境中的主機動態的獲得IP地址、Gateway地址、DNS伺服器地址等資訊,並能夠提升地址的使用率;給使用者用於內部網管理員作為對所有計算機作中央管理的手段。
        DHCP的前身是 BOOTP。BOOTP 原本是用於無磁碟主機連線的網路上面的:網路主機使用 BOOT ROM 而不是磁碟起動並連線上網路,BOOTP 則可以自動地為那些主機設定 TCP/IP 環境。但 BOOTP 有一個缺點:您在設定前須事先獲得客戶端的硬體地址,而 且,與 IP 的對應是靜態的。換而言之,BOOTP 非常缺乏 "動態性" ,若在有限的 IP 資源環境中,BOOTP 的一對一對應會造成非常可觀的浪費。
        DHCP 可以說是 BOOTP 的增強版本,它分為兩個部份:一個是伺服器端,而另一個是客戶端。所有的 IP 網路設定資料都由 DHCP 伺服器集中管理,並負責處理客戶端的 DHCP 要求;而客戶端則會使用從伺服器分配下來的IP環境資料。比較起 BOOTP ,DHCP 透過 "租約" 的概念,有效且動態的分配客戶端的 TCP/IP 設定,而且,作為相容考慮,DHCP 也完全照顧了 BOOTP Client 的需求。

注:為了便於理解,下圖為本機網絡卡資訊:

封包格式及各欄位分析

三種機制分配IP地址:
1. 自動分配方式,DHCP伺服器為主機指定一個永久性的IP地址,一旦DHCP客戶端第一次成功從DHCP伺服器端租用到IP地址後,就可以永久性的使用該地址。
2. 動態分配方式,DHCP伺服器給主機指定一個具有時間限制的IP地址,時間到期或主機明確表示放棄該地址時,該地址可以被其他主機使用。
3. 手工分配方式,客戶端的IP地址是由網路管理員指定的,DHCP伺服器只是將指定的IP地址告訴客戶端主機。
具有以下功能:
1. 保證任何IP地址在同一時刻只能由一臺DHCP客戶機所使用。
2. DHCP應當可以給使用者分配永久固定的IP地址。
3. DHCP應當可以同用其他方法獲得IP地址的主機共存(如手工配置IP地址的主機)。
4. DHCP伺服器應當向現有的BOOTP客戶端提供服務。
        DHCP訊息的格式是基於BOOTP(Bootstrap Protocol)訊息格式的,這就要求裝置具有BOOTP中繼代理的功能,並能夠與BOOTP客戶端和DHCP伺服器實現互動。BOOTP中繼代理的功能,使得沒有必要在每個物理網路都部署一個DHCP伺服器。

封包格式及各欄位分析

封包格式

欄位分析

OP:操作碼,佔8位、分為請求報文和響應報文。1:請求報文,2:應答報文。即client送給server的封包,設為1,反之為2。
請求報文:Discover:1、Request:3、Release:7、Inform:8、Decline:4。
應答報文:Offer:2、ACK:5、NAK:6。


HW Type:硬體地址型別,佔8位、MAC地址型別其實是指明網路型別,HW type值為1時表示為最常見的乙太網MAC地址型別。
HW Len:硬體地址長度,佔8位、乙太網MAC地址長度為6個位元組,即乙太網時HW Len值為6。
Hops:

跳點數,佔8位、預設為0。DHCP請求報文每經過一個DHCP中繼,該欄位就會增加1。沒有經過DHCP中繼時值為0。(若資料包需經過router傳送,每站加1,若在同一網內,為0。)
Transaction ID:事務標識,佔32位、客戶端通過DHCP Discover報文發起一次IP地址請求時選擇的隨機數,相當於請求標識。用來標識一次IP地址請求過程。在一次請求中所有報文的ID都是一樣的。
Seconds:引導時間,佔32位、客戶端從獲取到IP地址或者續約過程開始到現在所消耗的時間,以秒為單位。在沒有獲得IP地址前該欄位始終為0。(DHCP客戶端開始DHCP請求後所經過的時間。目前尚未使用,固定為0。)
Flags:標誌位,只使用第0位元位,是廣播應答標識位,用來標識DHCP伺服器應答報文是採用單播還是廣播發送,0表示採用單播發送方式,1表示採用廣播發送方式。其餘位尚未使用。(即從0-15bits,最左1bit為1時表示server將以廣播方式傳送封包給client)。注:在客戶端正式分配了IP地址之前的第一次IP地址請求過程中,所有DHCP報文都是以廣播方式傳送的,包括客戶端傳送的DHCP Discover和DHCP Request報文,以及DHCP伺服器傳送的DHCP Offer、DHCP ACK和DHCP NAK報文。當然,如果是由DHCP中繼器轉的報文,則都是以單播方式傳送的。另外,IP地址續約、IP地址釋放的相關報文都是採用單播方式進行傳送的。
Client IP Address:客戶端IP地址,佔32位、僅在DHCP伺服器傳送的ACK報文中顯示,在其他報文中均顯示0,因為在得到DHCP伺服器確認前,客戶端是還沒有分配到IP地址的。只有客戶端是Bound、Renew、Rebinding狀態,並且能響應ARP請求時,才能被填充。
Your IP Address:伺服器分配給客戶端的IP地址,佔32位、僅在DHCP伺服器傳送的Offer和ACK報文中顯示,其他報文中顯示為0。
Srever IP Address:伺服器IP地址,佔32位、僅在DHCP Offer、DHCP ACK報文中顯示,其他報文中顯示為0。(用於bootstrap過程中的IP地址)
Gateway IP Address:閘道器IP地址,佔32位、如果沒有經過DHCP中繼,則顯示為0。(轉發代理(閘道器)IP地址)
Client Hardware Address:客戶端的硬體地址,佔128位、在每個報文中都會顯示對應DHCP客戶端的MAC地址。
Server Name:伺服器名稱(DNS域名格式),佔512位、在Offer和ACK報文中顯示傳送報文的伺服器名稱,其他報文顯示為0。
Boot File name:服引導檔名,佔1024位、僅在DHCP Offer報文中顯示,其他報文中顯示為空。
Options:可選項欄位,長度可變,格式為"程式碼+長度+資料"。

資料包分析

完整的DHCP四次互動:

發現(Discover):
        發現階段,即DHCP客戶機尋找DHCP伺服器的階段。DHCP客戶機以廣播方式(因為DHCP伺服器的IP地址對於客戶機來說是未知的)傳送DHCP discover發現資訊來尋找DHCP伺服器,即向地址255.255.255.255傳送特定的廣播資訊。網路上每一臺安裝了TCP/IP協議的主機都會接收到這種廣播資訊,但只有DHCP伺服器才會做出響應。

服務響應(Offer):
        提供階段,即DHCP伺服器提供IP地址的階段。在網路中接收到DHCP discover發現資訊的DHCP伺服器都會做出響應,它從尚未出租的IP地址中挑選一個分配給DHCP客戶機,向DHCP客戶機發送一個包含出租的IP地址和其他設定的DHCP offer提供資訊。

請求(Request):
        選擇階段,即DHCP客戶機選擇某臺DHCP伺服器提供的IP地址的階段。如果有多臺DHCP伺服器向DHCP客戶機發來的DHCP offer提供資訊,則DHCP客戶機只接受第一個收到的DHCP offer提供資訊,然後它就以廣播方式回答一個DHCP request請求資訊,該資訊中包含向它所選定的DHCP伺服器請求IP地址的內容。之所以要以廣播方式回答,是為了通知所有的DHCP伺服器,他將選擇某臺DHCP伺服器所提供的IP地址。

訊息型別解析:

確認(ACK):
        確認階段,即DHCP伺服器確認所提供的IP地址的階段。當DHCP伺服器收到DHCP客戶機回答的DHCP request請求資訊之後,它便向DHCP客戶機發送一個包含它所提供的IP地址和其他設定的DHCP ACK確認資訊,告訴DHCP客戶機可以使用它所提供的IP地址。然後DHCP客戶機便將其TCP/IP協議與網絡卡繫結,另外,除DHCP客戶機選中的伺服器外,其他的DHCP伺服器都將收回曾提供的IP地址。

重新登入:
        以後DHCP客戶機每次重新登入網路時,就不需要再發送DHCP discover發現資訊了,而是直接傳送包含前一次所分配的IP地址的DHCP request請求資訊。當DHCP伺服器收到這一資訊後,它會嘗試讓DHCP客戶機繼續使用原來的IP地址,並回答一個DHCP ACK確認資訊。如果此IP地址已無法再分配給原來的DHCP客戶機使用時(比如此IP地址已分配給其它DHCP客戶機使用),則DHCP伺服器給DHCP客戶機回答一個DHCP NACK否認資訊。當原來的DHCP客戶機收到此DHCP NACK否認資訊後,它就必須重新發送DHCP discover發現資訊來請求新的IP地址。
NACK:

更新租約:
        DHCP伺服器向DHCP客戶機出租的IP地址一般都有一個租借期限,期滿後DHCP伺服器便會收回出租的IP地址。如果DHCP客戶機要延長其IP租約,則必須更新其IP租約。DHCP客戶機啟動時和IP租約期限過一半時,DHCP客戶機都會自動向DHCP伺服器傳送更新其IP租約的資訊。

其他相關

DHCP互動過程:

1.DHCP Client以廣播的方式發出DHCP Discover報文。
2.所有的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地址的紀錄。
3.DHCP Client只能處理其中的一個DHCP Offer報文,一般的原則是DHCP Client處理最先收到的DHCP Offer報文。DHCP Client會發出一個廣播的DHCP Request報文,在選項欄位中會加入選中的DHCP Server的IP地址和需要的IP地址。
4.DHCP Server收到DHCP Request報文後,判斷選項欄位中的IP地址是否與自己的地址相同。如果不相同,DHCP Server不做任何處理只清除相應IP地址分配記錄;如果相同,DHCP Server就會向DHCP Client響應一個DHCP ACK報文,並在選項欄位中增加IP地址的使用租期資訊。
5.DHCP Client接收到DHCP ACK報文後,檢查DHCP Server分配的IP地址是否能夠使用。如果可以使用,則DHCP Client成功獲得IP地址並根據IP地址使用租期自動啟動續延過程;如果DHCP Client發現分配的IP地址已經被使用,則DHCP Client向DHCP Server發出DHCP Decline報文,通知DHCP Server禁用這個IP地址,然後DHCP Client開始新的地址申請過程。
6.DHCP Client在成功獲取IP地址後,隨時可以通過傳送DHCP Release報文釋放自己的IP地址,DHCP Server收到DHCP Release報文後,會回收相應的IP地址並重新分配。

續租:

        在使用租期超過50%時刻處,DHCP Client會以單播形式向DHCP Server傳送DHCP Request報文來續租IP地址。如果DHCP Client成功收到DHCP Server傳送的DHCP ACK報文,則按相應時間延長IP地址租期;如果沒有收到DHCP Server傳送的DHCP ACK報文,則DHCP Client繼續使用這個IP地址。
        在使用租期超過87.5%時刻處,DHCP Client會以廣播形式向DHCP Server傳送DHCP Request報文來續租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配置術語,主要引數:

作用域:網路上IP地址完整連續範圍,通常定義為接受DHCP服務網路上的單個物理子網。
排除範圍:在作用域內從DHCP服務中排除的有限IP地址序列。排除後的IP地址不會通過DHCP服務分配出去。
地址池:定義排除範圍後,剩餘的地址在作用域內形成可用的“地址池”。
租約:租約是由DHCP伺服器指定的一段時間,在此段時間內,分配的IP可以供客戶機使用,一般情況下,客戶端會在一定時間傳送“續租報文”。租約期限決定租約何時期滿以及客戶端需要向伺服器對它進行更新的頻率。
保留:可以使用“保留”建立DHCP伺服器指派的永久地址租約,可以保留一些特定IP地址供DHCP客戶端永久使用,可確保子網上指定的裝置始終使用相同的IP地址。保留地址可以使用作用域地址範圍中任何IP地址,即使該IP地址同時還位於某個排除範圍內。
選項:選項是DHCP伺服器在向DHCP客戶端提供租約時可指派的其他客戶端配置引數。例如,一些常用選項包含預設閘道器(路由器)、DNS伺服器、IP地址。通常為每個作用域啟用並配置這些選項型別。

跨網路的 DHCP 運作

        DHCP Discover報文是以廣播方式進行的,其情形只能在同一網路之內進行,因為路由器是不會將廣播傳送出去的。但如果 DHCP 伺服器安設在其它的網路上面呢?由於DHCP客戶端還沒有IP環境設定,所以也不知道閘道器,而且有些路由器也不會將 DHCP廣播封包傳遞出去,因此這情形下DHCP發現報文是永遠沒辦法抵達DHCP服務端的,當然也不會發生Offer及其它動作了。要解決這個問題,我們可以用DHCP代理(中繼)主機來接管客戶的DHCP請求,然後將此請求傳遞給真正的 DHCP 伺服器,然後將伺服器的回覆傳給客戶。這裡,代理主機必須自己具有路由能力,且能將雙方的封包互傳對方。

DHCP服務中繼實現:
所有計算機均為自動獲取IP
DHCP Server在1.1.2.0/24網段,其中配置1.1.1.0/24網段和1.1.2.0/24網段的DHCP服務。
路由器上(Cisco),命令#ip helper-address 1.1.1.253 配置中繼服務。
DHCP服務中繼實現,至此,所有計算機均可以向DHCP Server請求IP地址,1.1.2.0/24網段主機直接通過廣播發現報文向DHCP Server請求IP地址,1.1.1.0/24網段主機通過路由器的中繼請求IP地址(主機廣播發現報文請求IP地址,路由器接收報文,單播到DHCP伺服器,伺服器響應將報文單播至路由器,路由器在1.1.1.0/24網段廣播,剛剛請求IP的主機接收報文。。。(再向下說就是廢話了)。。。)