1. 程式人生 > >DHCP的工作原理、怎麼檢測IP地址衝突

DHCP的工作原理、怎麼檢測IP地址衝突

原帖地址:http://7658423.blog.51cto.com/7648423/1270601
  • 理解DHCP的雛形BOOTPBootstrap Protocol

  • DHCP的為什麼要替代BOOTP;它們的區別在哪裡?

  • 理解DHCP的工作原理與每個過程的資料幀取證
  • Offer訊息到底是以單播的方式進行傳送,還是以廣播的方式進行傳送

  • 關於DHCP伺服器分配IP地址時的衝突檢測

動態主機配置協議(Dynamic Host Configuration Protocol, DHCP)被設計用於動態的為網路中的主機分配IP地址及其它相關的TCP/IP屬性,它屬於客戶/服務模式的應用程式,

使用UDP協議號67(服務端)和68(客戶端)工作。它代替了網路管理員手工為網路中的計算機配置IP地址及其它TCP/IP屬性的工作,如果網路中的計算機數量較大,使用人工靜態配置IP地址容易造成配置錯誤,比如:把一個IP地址配置到兩臺不同的計算機,當配置量過大時,這種失誤是很有可能的,造成過大的管理成本開銷,所以,在中大型網路中通常都使用DHCP為計算機自動配置IP地址及其它相關的TCP/IP屬性,本小節將以描述DHCP的工作原理與演示DHCP在思科路由器上的配置為重點。

理解DHCP的雛形BOOTP(Bootstrap Protocol):

DHCP的前生是BOOTP(Bootstrap Protocol),要理解DHCP,不得不說明一下這個BOOTP(Bootstrap Protocol),它比DHCP出現得更早,與DHCP提供類似的服務,用於網路早期的無盤工作站,這個無盤工作站在現今的網路應用中基本上已經退出應用市場了,如果還能看到它影子,那就是超市和商場所用的收銀機。BOOTP的功能就是為這些無盤終端自動的分配IP地址、子網掩碼、預設閘道器、DNS地址。

DHCP的為什麼要替代BOOTP;它們的區別在哪裡?

由於DHCP的出現,BOOTP逐漸被DHCP所替代,因為DHCP有更完善、更安全的工作機制、能夠提供更靈活的IP地址分配方式、能夠為客戶機自動配置更多的TCP/IP引數,如果更具體的講就是:BOOTP在分配IP地址時,IP地址和請求主機的MAC必須被預置到BOOTP伺服器上,如果BOOTP客戶端發來的IP地址請求訊息中,請求主機的源MAC地址在BOOTP伺服器上有記錄,並對應了一個IP,那麼,BOOTP伺服器將對應的IP發放給BOOTP的客戶端,如果沒有對應記錄的存在,請求會話將失敗,這是BOOTP缺泛靈活性的一種典型代表;另外DHCP支援發放IP地址的“租約”機制,但是BOOTP不支援,關於“租約”機制,後面會有詳細的描述;BOOTP只能最多分配4個網路引數,分別是IP地址、子網掩碼、預設閘道器、DNS地址,DHCP可以提供更多的TCP/IP屬性的自動配置。

理解DHCP的工作原理與每個過程的資料幀取證:

現在來理解DHCP的工作原理並取證每個工作過程的資料幀,如下圖 9.12所示為DHCP的工作過程,這四個過程,基本上是現今網路領域公認的四大過程,但事實上,DHCP的工作原理在這四個公認的過程中還有一些小插曲,關於這一點,取證瞭如下圖9.13所示的DHCP完整工作過程的資料幀,所以現在擬訂一個清晰的學習思路:

理解DHCP四個工作步驟,並分析每個工作步驟的資料幀。

理解為什麼在這四個工作步驟中會攜帶兩個ARP請求訊息,並分析這兩個ARP請求訊息。

第一步:DHCP客戶端向本地子網傳送一個DHCPDiscover訊息,該訊息是以廣播的形式被髮送到網路上,源MAC地址是傳送源主機的MAC地址,源IP地址是0.0.0.0,因為此時的客戶機還沒有被DHCP動態的配置IP地址,目標MAC地址是廣播MACFFFF.FFFF.FFFF),目標IP地址是廣播IP255.255.255.255,為什麼該訊息會是廣播,因為客戶端現在根本就不知道網路上誰是DHCP伺服器,關於DHCP客戶端傳送的DHCP Discover訊息的資料幀如下9.14所示。

圖9.14 DHCP的在Discover資料幀

在執行DHCP第二步Offer訊息前的小插曲:當收到客戶端發來的Discover訊息的DHCP伺服器會立即查尋自己可對外提供IP地址的地址池,提供一個可以分配給DHCP客端的機會IP,比如192.168.2.5;注意:此時並不是立即將這個地址分配出去,這只是一個可供分配的機會IP,DHCP伺服器會以自己的MAC作為源MAC,自己的IP作為源目標,向網路中傳送一個目標IP地址為192.168.2.5(事實上,就是那個機會IP)的ARP請求,目的在於:確認這個它(DHCP伺服器)認為可以分配給某個客戶端的IP地址,是否正在被別的主機使用,如果網路上有主機正在使用這個IP地址,可能是管理員人工輸入的,該主機就會對這個ARP請求應答,這說明,192.168.2.5這個地址正在被使用,反之,沒有應答,就表示DHCP可以將這個地址分配給某個DHCP的客戶端,關於DHCP用於檢測機會IP是否被其它主機使用的資料幀如圖9.15所示。

第二步:DHCP伺服器必須完在上述的小插曲後,方可確定機會IP地址可以提供給DHCP的客戶端,這也是為什麼在DHCP工作的四個步驟中會出現一個ARP訊息的原因。此時DHCP向網路中傳送一個Offer訊息,為客戶端提供IP地址。

注意:行業工程師一直在爭論著一個問題:Offer訊息到底是以單播的方式進行傳送,還是以廣播的方式進行傳送,然後,在進行協議分析時,有時會出現廣播訊息的Offer資料幀;有時會出現單播訊息的資料幀,這是怎麼回事?

首先說明:DHCP伺服器傳送的Offer訊息,即可以是單播形式,也可以是廣播形式,這要分情況而定,如果將Offer訊息單純的定義為廣播或是單播發送都是不嚴密的定義,事實上DHCP的Offer訊息是廣播還是單播,這取決於DHCP客戶的具體情況,它可以從如下圖圖 9.16所示DHCP報文中的兩個關鍵欄位來做出定義,客戶端IP地址(CIAddr)和標誌(Flags)中的Broadcast flag來決定:

n如果Broadcast flag被轉置位為1,則表示客戶機不允許DHCP伺服器的Offer訊息以單播的方式迴應,所以必須使用廣播迴應,在如下圖 9.16所示的資料幀中Broadcastflag被轉置位為0,所以DHCP伺服器可以選擇以單播的方式傳送Offer訊息。

n如果客戶端IP地址(CIAddr)有一個明確的IP地址,這個已經存在的IP地址,可能是上次引導計算機時DHCP伺服器提供的IP地址。那麼,此時DHCP伺服器的Offer訊息將以單播的方式迴應。

n如果Broadcast flag和客戶端IP地址(CIAddr)都是0;此時,DHCP伺服器既可以使用廣播進行Offer訊息傳送,也可以使用上一步小插曲中的ARP記錄進行單播發送,因為在小插曲中的機會地址檢測說明網路上沒有主機使用這個地址,所以,此時DHCP服務可以假定192.168.2.5這個IP地址可供請求主機使用,所以,可以使用單播的形式回送Offer訊息給DHCP客戶機,但事實上,請求主機此時還沒有真正的獲得這個IP。


第三步:當DHCP的客戶機收到伺服器發來的Offer訊息後,它會以廣播的形式發出一個DHCP的Request訊息,正式向DHCP伺服器申請IP地址,注意該訊息並不是只發給提供機會IP的DHCP伺服器,而是以廣播的形式傳送給網路中的所有DHCP伺服器,因為一個網路上有可能存在多臺DHCP伺服器,現在DHCP客戶端正是使用這個DHCP的Request廣播向整個網路可能存在的所有DHCP伺服器講:“我現在準備申請192.168.2.1這臺DHCP伺服器所提供的192.168.2.5這個IP地址如下圖 9.17所示,其它DHCP伺服器,你們的好意心領了!”相當於是委婉的拒絕其它的DHCP伺服器提供相應的IP地址,也就是說:如果網路上還有其它的DHCP伺服器,它們收到這個Request廣播後,拆開廣播幀,發現該資料幀裡面的DHCP伺服器Identifier欄位為192.168.2.1,就視作客戶端對自己的拒絕。

第四步:當DHCP伺服器收到客戶端發來的Request訊息後,提供IP地址的DHCP伺服器會給DHCP客戶端傳送一個DHCP的ACK訊息,目的在於告訴DHCP客戶端分配的IP地址的“租期”生效;並且告之什麼時間可以提交“續租請求”;以及什麼時候被分配的IP地址將從客戶機上解除繫結;如下圖9.18所示,所謂IP地址的“租期”指示IP地址在客戶機上存在的有效時間,思科的路由器一般“租期”為24小時(1天),“續租請求”指示當“租期”已經使用了一天的一半時間時即12小時的時候,DHCP客戶端可以傳送續訂這個IP地址的請求,如果DHCP伺服器有更多的地址供分配給其它主機,那麼,DHCP伺服器將答應客戶端的“續租請求”,然後將“租期”時間重新復位到24小時,如果,此時DHCP伺服器上的地址池很緊張,已經沒有多餘的IP地址可供分配給其它主機,那麼,DHCP伺服器將拒絕“租期”,但是,它暫時不會回收IP地址,直到解除繫結時間到期,它仍然沒有多餘的IP供分配,那麼DHCP伺服器將回收已經分配出去的IP地址。關於DHCP伺服器傳送ACK訊息的型別,可以是單播,也可以是廣播,這與第二步中的DHCP Offer訊息一樣,關鍵取決於DHCP的客戶端的幾個關鍵欄位,在這裡就不再重複描述。

當DHCP客戶端完成IP地址申請後的一個小插曲:

當完成上述DHCP的四個工作過程後,得到IP地址的主機為了最終確保在網路中,沒有其它主機正在使用分配給它的IP地址,DHCP客戶端會向網路中傳送一條IP地址衝突檢測的ARP訊息,如下圖 9.19所示,源和目標IP地址都是自己的IP,源MAC地址為DHCP客戶端的MAC地址,目標MAC全為0;這個ARP請求,將永遠不希望得到迴應,因為“自己請求解析自己,如果網路上沒有一個相同的自己(冒牌貨,實際上就是地址衝突)”那麼,這個ARP請求永遠不可能得到迴應,如果主機迴應了這個ARP請求,就表示網路上有兩臺主機正在使用相同的IP地址,此時,DHCP客戶端會給DHCP伺服器傳送一個DHCP的Decline的訊息,意思就是“DHCP伺服器,我被你忽悠了!現在我不要你的IP地址”。