原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/163168
本節將主要講述DHCP客戶端獲取IP的過程,也是此系列中非常重要的一節。
為了讓大家更好的理解DHCP客戶端和服務器之間是如何交互工作的。這里搭建了一個很小的環境來輔助演示。如下圖:
首先在win2k3上安裝DHCP服務器,一臺XP主機與之直連。有關DHCP的安裝過程,請參考上一節的內容。DHCP安裝完成后,如下圖:
服務器名稱為win2k3,IP為192.168.1.1。依據上節所說,我們需要創建一個新的作用域并激活,這樣才能為客戶端指派IP地址等信息。這里我創建的范圍是192.168.1.1—192.168.1.10,別的選項類型暫時先不設置。如下圖:
scope1為當前的作用域,同時已激活,現在可以正常使用了。
OK,萬事俱備只等客戶端了。通常情況下,DHCP客戶端從DHCP上獲取一個IP地址需要4個步驟,這里我們通過演示來一起驗證一下。
這里依然使用wireshark工具來觀察DHCP服務器收、發數據包的情況。在理想的情況下,客戶機啟動后,會自動聯系可用的DHCP來獲取IP地址,其實整個過程是很快的,我們先從整體上看一下客戶端獲取IP的前后過程吧。如下圖:
這個圖比較大,基本上可以分為5部分,現在一個個來。
第一部分:
1、客戶端發送DHCP Discover 數據包。如下圖:
解釋一下:抓包的時間和前一張圖不對應,主要是中途做有別的事了,請見諒。
稍微說一下這張圖:當客戶端被配置為DHCP自動獲取地址時,一旦接入網絡,且檢測到自己沒有IP地址,系統就會發出DHCP Discover 數據包,其中包括了客戶機的主機名、MAC地址、甚至還有上一次獲取到的IP地址等信息。169.254在這里的含義是告訴DHCP服務器,我是否可以申請這個地址?顯然不行,因為這個地址不在DHCP現在的作用域內(下同)。這些信息都包含在Bootstrap Protocol(也就是BOOTP)協議中。這也是DHCP的原始協議。請留意,客戶端利用本機的68號端口發出DHCP查詢請求,服務端則用67號端口接受此請求。
其實,不僅僅是剛接入會發送查詢包,還有在機器剛啟動或請求被拒絕時也會觸發DHCP Discover數據包。
2、服務器回應DHCP Offer 數據包。如下圖:
DHCP服務器會響應客戶端的DHCP Discover請求后,會檢查自己的配置,如果有多余且有效的地址,則會返回一個DHCP Offer的廣播消息。因為此時服務器也不知道客戶端在那里。數據包除了有IP地址、掩碼外,還有這個地址對應的租約時限。
3、客戶端收到IP地址后用DHCP Request 數據包回應DHCP服務器。如下圖:
DCHP Request這個數據包是通知當前所有的DHCP服務器,當然也包括分配給它IP地址的那臺。目的是讓大家知道,客戶端XP2已經接受某一臺DHCP服務器指派了一個IP地址,并將IP地址通告出去。因為可能網內不止一臺DHCP,而且XP2發的第一個包是面向全體的,XP2自己也不知道誰會給它分配IP,同時其他DHCP服務器收到查詢請求后必然也會檢查各自的配置,然后都會分配IP出來。關鍵看XP2最先收到誰的Offer,這就和我們面試一樣,那個公司現給我們Offer,通常情況下也會先去那家公司,當然,我們不會像客戶端那么傻直接回絕其他所有的Offer,哈哈!當其他DHCP服務器收到Request請求數據包后,就會收回已經派出的地址,留做他用。
不過這還沒玩,客戶端必須得到指派給它IP地址的那臺DHCP服務器的確認消息,這個IP地址也就是192.168.1.1才可以正式為XP2所用。一起來看第四個數據包。
4、DHCP收到Request報用DHCP ACK包回應客戶機。如下圖:
DHCP服務器用ACK數據包作為一個確認來回應客戶端的Request包,數據包中的Option同樣也包含了租約的IP地址、掩碼和期限等信息。
到此為止,客戶端和服務器利用DHCP完成了一次交互查詢和響應的過程。盡管服務器的IP固定,但這4個過程都是通過廣播方式進行的。
這樣算不算完了?還不算,現在XP2獲取的地址是192.168.1.1,有朋友可能有疑問了,這個IP不就是DHCP服務器的地址嗎?沒錯!的確是這樣。那這怎么能行呢?大家不用急,我們來看看主機XP2是如何處理的。
第二部分:
客戶機在收到DHCP ACK數據包之后,會利用Gratuitous ARP協議對這個IP地址進行沖突檢測,目的是確定網內是否有人使用這個IP。這個機制存在于2000或之后系統內。如果網內有相同機器使用這個IP,那么就會返回數據包。并用廣播方式告知對方IP沖突。整個檢測過程有三個數據包,但如果沒有得到任何回應,也就不會有第二和第三個數據包了。
以下是這三個數據包:
1、客戶端發送Gratuitous ARP的Request數據包。如下圖:
這個數據包是客戶端用來檢測IP沖突的。檢測的大致原理已經在圖中說明了,請注意查看。
2、有相同IP的主機發送Gratuitous ARP的Reply數據包。如下圖:
很不幸的是,XP2收到了Reply數據包,這證明網內有于自己相同的IP。此時DHCP服務器也就是192.168.1.1這個IP的原始擁有者會發送一個IP沖突的提示。
看一下第三個數據包。
3、有相同IP的主機以廣播方式發送Gratuitous ARP沖突提示信息。如下圖:
第三個數據包是DHCP服務器發出了一個沖突提示,在服務器的日志中也有體現
可見,為了防止IP沖突,DHCP客戶端收到指派的地址后都會利用ARP協議進行一次沖突檢測。
第三部分:
既然檢測到這個IP有沖突,自然就無法使用了,接下來客戶端會怎么做呢?
1、向DHCP服務器發送Decline拒絕數據包,表示192.168.1.1這個IP無法使用。
大家請注意這個數據包的Transaction ID和最開始的4個DHCP數據包一致,順利的話,只需要4個數據包即可完成整個過程,但如果有沖突或出現別的情況就會產生額外的過程。這里的DHCP Decline 就是其中的一個。
第三部分:
在此之后,客戶機進行第二次的IP地址獲取。這部分和第一部分的申請過程一樣,只是事務ID有所變化。
第二次申請時,因為192.168.1.1剛才已經指派過,且被拒絕,所以按照順序接下來會指派下一個可用的IP給XP2主機,顯然是192.168.1.2,因為只有它一臺主機在申請。
主要看一下DHCP Offer數據包里的IP地址是什么就知道了。如下圖:
第四部分:
第二次IP沖突檢測,通常情況下會一次發出三個ARP包進行檢測。如下圖:
第五部分:
IP地址獲取成功后,對于客戶端來說下一步就是查找WINS服務器,進行NETBIOS名稱的注冊(這部分請參考《一起學WINS》系列文章)。
還有一點要說明。為什么會出現DHCP Decline的數據包,也就是為什么192.168.1.1會被分配出去,這個不是服務器的IP嗎?原來我在設置作用域的時候不把192.168.1.1也包含了進去,所以DHCP會首先把第一個地址也就是192.168.1.1分配給XP2。所以會出現這種情況。解決的辦法很簡單,修改作用域,不包含1.1這個地址就可以了,或者設置排除地址,或者添加保留地址,可見第一種方法是最簡單的。
到這里IP地址的獲取過程就講解完了,我們到DHCP服務器管理界面里看一下:
再到XP2上看一下當前的IP地址信息。如下圖:
可以看到現在XP2的IP地址是192.168.1.2,Dhcp 的狀態也是 Enabled 的。
有關DHCP服務器的租約、授權、以及DHCP客戶端IP的釋放和重新獲取的內容將在下一節中講解。
謝謝!
原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/1554