一起學DHCP系列(五)指派、獲取

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/163168

    本節將主要講述DHCP客戶端獲取IP的過程,也是此系列中非常重要的一節。

    為了讓大家更好的理解DHCP客戶端和服務器之間是如何交互工作的。這里搭建了一個很小的環境來輔助演示。如下圖:

1.jpg

     首先在win2k3上安裝DHCP服務器,一臺XP主機與之直連。有關DHCP的安裝過程,請參考上一節的內容。DHCP安裝完成后,如下圖:

2.jpg

服務器名稱為win2k3,IP為192.168.1.1。依據上節所說,我們需要創建一個新的作用域并激活,這樣才能為客戶端指派IP地址等信息。這里我創建的范圍是192.168.1.1—192.168.1.10,別的選項類型暫時先不設置。如下圖:

3.jpg

scope1為當前的作用域,同時已激活,現在可以正常使用了。

OK,萬事俱備只等客戶端了。通常情況下,DHCP客戶端從DHCP上獲取一個IP地址需要4個步驟,這里我們通過演示來一起驗證一下。

這里依然使用wireshark工具來觀察DHCP服務器收、發數據包的情況。在理想的情況下,客戶機啟動后,會自動聯系可用的DHCP來獲取IP地址,其實整個過程是很快的,我們先從整體上看一下客戶端獲取IP的前后過程吧。如下圖:

4.jpg

這個圖比較大,基本上可以分為5部分,現在一個個來。

第一部分:

1、客戶端發送DHCP Discover 數據包。如下圖:

5.jpg

解釋一下:抓包的時間和前一張圖不對應,主要是中途做有別的事了,請見諒。

稍微說一下這張圖:當客戶端被配置為DHCP自動獲取地址時,一旦接入網絡,且檢測到自己沒有IP地址,系統就會發出DHCP Discover 數據包,其中包括了客戶機的主機名、MAC地址、甚至還有上一次獲取到的IP地址等信息。169.254在這里的含義是告訴DHCP服務器,我是否可以申請這個地址?顯然不行,因為這個地址不在DHCP現在的作用域內(下同)。這些信息都包含在Bootstrap Protocol(也就是BOOTP)協議中。這也是DHCP的原始協議。請留意,客戶端利用本機的68號端口發出DHCP查詢請求,服務端則用67號端口接受此請求。

其實,不僅僅是剛接入會發送查詢包,還有在機器剛啟動或請求被拒絕時也會觸發DHCP Discover數據包。

2、服務器回應DHCP Offer 數據包。如下圖:

6.jpg

DHCP服務器會響應客戶端的DHCP Discover請求后,會檢查自己的配置,如果有多余且有效的地址,則會返回一個DHCP Offer的廣播消息。因為此時服務器也不知道客戶端在那里。數據包除了有IP地址、掩碼外,還有這個地址對應的租約時限。

3、客戶端收到IP地址后用DHCP Request 數據包回應DHCP服務器。如下圖:

7.jpg

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包回應客戶機。如下圖:

8.jpg

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數據包。如下圖:

一起學DHCP系列(五)指派、獲取

這個數據包是客戶端用來檢測IP沖突的。檢測的大致原理已經在圖中說明了,請注意查看。

2、有相同IP的主機發送Gratuitous ARP的Reply數據包。如下圖:

10.jpg

很不幸的是,XP2收到了Reply數據包,這證明網內有于自己相同的IP。此時DHCP服務器也就是192.168.1.1這個IP的原始擁有者會發送一個IP沖突的提示。

看一下第三個數據包。

3、有相同IP的主機以廣播方式發送Gratuitous ARP沖突提示信息。如下圖:

11.jpg

第三個數據包是DHCP服務器發出了一個沖突提示,在服務器的日志中也有體現

12.jpg

可見,為了防止IP沖突,DHCP客戶端收到指派的地址后都會利用ARP協議進行一次沖突檢測。

第三部分:

既然檢測到這個IP有沖突,自然就無法使用了,接下來客戶端會怎么做呢?

1、向DHCP服務器發送Decline拒絕數據包,表示192.168.1.1這個IP無法使用。

13.jpg

大家請注意這個數據包的Transaction ID和最開始的4個DHCP數據包一致,順利的話,只需要4個數據包即可完成整個過程,但如果有沖突或出現別的情況就會產生額外的過程。這里的DHCP Decline 就是其中的一個。

第三部分:

在此之后,客戶機進行第二次的IP地址獲取。這部分和第一部分的申請過程一樣,只是事務ID有所變化。

第二次申請時,因為192.168.1.1剛才已經指派過,且被拒絕,所以按照順序接下來會指派下一個可用的IP給XP2主機,顯然是192.168.1.2,因為只有它一臺主機在申請。

主要看一下DHCP Offer數據包里的IP地址是什么就知道了。如下圖:

14.jpg

第四部分:

第二次IP沖突檢測,通常情況下會一次發出三個ARP包進行檢測。如下圖:

15.jpg

第五部分:

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服務器管理界面里看一下:

16.jpg

再到XP2上看一下當前的IP地址信息。如下圖:

17.jpg

可以看到現在XP2的IP地址是192.168.1.2,Dhcp 的狀態也是 Enabled 的。

    有關DHCP服務器的租約、授權、以及DHCP客戶端IP的釋放和重新獲取的內容將在下一節中講解。

謝謝!

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/1554

(0)
s19930811s19930811
上一篇 2015-03-24 21:53
下一篇 2015-03-25 10:59

相關推薦

  • Nginx工作原理和優化、漏洞。

    1.  Nginx的模塊與工作原理 Nginx由內核和模塊組成,其中,內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件將客戶端請求映射到一個location block(location是Nginx配置中的一個指令,用于URL匹配),而在這個location中所配置的每個指令將會啟動不同的模塊去完成相應的工作。 Nginx的模塊…

    Linux干貨 2015-04-04
  • 如何修復Ubuntu 12.04上時間不正確的問題

    大家好: 今天跟大家分享下如何修復ubuntu 12.04上時間不正常的問題。 1–首先打date查看系統的時間是否正常 martell@cnux10:~/sistes/sha-mmb-o2o2o$ date  Thu Dec  1 09:15:47 UTC 2016 martell@cnux10:~/sistes/sha-m…

    Linux干貨 2016-12-04
  • Linux 目錄結構

    Linux 目錄結構 1.     前言     Linux 是一種開源的,且非常流行的操作系統,發行版本眾多。為了統一和規范linux系統的主要目錄名及其用途,提出了FHS標準,FHS是File Hierarchy Standard的簡寫。Linu…

    Linux干貨 2015-07-26
  • grep,egrp,fgrep 命令與正則表達式

    一 簡介     grep (global search regular expression(RE) and print out the line,全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。 Unix的grep家族包括grep、egrep和fgrep…

    Linux干貨 2016-01-19
  • 關于大型網站技術演進的思考(十三)–網站靜態化處理—CSI(5)

    原文出處: 夏天的森林   講完了SSI,ESI,下面就要講講CSI了 ,CSI是瀏覽器端的動靜整合方案,當我文章發表后有朋友就問我,CSI技術是不是就是通過ajax來加載數據啊,我當時的回答只是說你的理解有點片面,那么到底什么是CSI技術了?這個其實要和動靜資源整合的角度來定義。 CSI技術其實是在頁面進行動靜分離后,將頁面加…

    2015-03-11
  • Git 分布式 Moosefs + Corosync + DRBD 集群

        對于 Git 集群來說,在不采用存儲陣列的情況下,分布式存儲系統是一個很好的解決方案。目前可使用的分布式文件系統,初步了解了一下,Git 是屬于小文件的應用,因此可考量的我想就只有目前的 Moosefs、Ceph 了,Ceph 目前好似國內應用不多,貌似不太穩定。至于 GlusterFS 其比較適用于大文件的應…

    Linux干貨 2016-02-22
欧美性久久久久