§2.1 應用層協議之動態主機配置協議DHCP

前言

提到應用層的協議,我首先把DHCP(Dynamic Host Configuration Protocol)協議作爲了首選,爲什麼呢?因爲我覺得這是上網的第一步。生活在這個時代人,大家或多或少的聽說過ip地址。瞭解的更多一點的人,他們應該知道上網都是通過IP地址,以及IP地址分爲IPv4和IPv6。但是我相信大部分人應該還是沒有配置過IP地址的。一方面這要求人們對基本的計算機網絡知識有一點點了解,另一方面是比較麻煩。試想,開機之後先配個地址,再配個掩碼,配個網關,配個dns的地址。一般人他不知道這些是什麼,也比較繁瑣,在網絡剛剛出現的時候,對於非專業人士來說,他們可能面對這個就會知難而退。

面對這個問題有兩種方案:
1、要麼計算機等網絡設備出廠時就同一設置好IP地址,那樣用戶就不需要設置了,很方便。但是這種情況很顯然是不現實的,首先IPv4地址不一定夠(廣大的朋友知道不夠就行了,後來到網絡層我會解釋一下),其次他們不知道你所在的地方的dns,如果都設置成根(這裏可以理解爲dns服務器中幾乎全知全能的一臺服務器)的地址那麼如果根服務器離你的很遠,那麼你想上網,可能會有一定的延遲。大家知道這麼個情況就行了,我會在後文解釋。最重要的是各大廠家不是一家的,那個年代他們並沒有達成共識,也沒有同一的組織。

2、有一個軟件,自動的根據本地的網絡情況,爲主機自動的分配地址DHCP協議橫空出世,軟件自動的幫助人們配置好一系列基本操作,極大的極高了便利性。顯然這種情況比上一種情況好了很多。只要各大操作系統的廠家支持這種軟件就行了。於是就變成了DHCP協議。

根據前面的描述,DHCP出現的使命就是它要極大的方便去上網。省去那些繁瑣的掩碼、網關(或者是默認路由器的 IP 地址)、域名服務器以及傳說中的IP地址的配置。總的來說它提供了一種即插即用連網機制。這樣一來計算機加入一個網絡,會通過軟件自行獲取,極大的簡化了使用者的操作。後來各個廠商們把DHCP協議集成到BIOS系統裏,電腦開機就開始調用這個協議,進而電腦開機完畢,地址等信息已經拿到手了。同時呢,地址賦予的方式是採取租用的方式,服務器會給你一個臨時的地址,你一直在使用。你電腦關機了,那麼它就會知道這個地址不用了,就收回來。服務器維持一個DHCP地址池,裏面放着可用的DHCP地址。就像是現實中去飯店吃飯一樣,你去吃飯,飯店會給你安排個座位,你吃好了,座位就釋放了,你的飯吃完了,理論上來說你該走了,但是你沒吃飽,那麼就再續一段時間。

下面說一下DHCP協議:
首先是它的工作模式:根據前文提到的,應用層的工作模式有兩種:C/S模式和P2P模式。
這裏呢,客戶機需要向DHCP服務器請求IP地址,那麼雙方基本上就是不對等的了。使用的是C/S模式。
下面的分析中:所有的報文都可以理解爲服務器端或者是客戶機端說的“話”,話的意思可以從名字中看出來。

工作方式:
情況1:請求IP地址。

1、最最一開始,DHCP服務器啓動,被動的打開了UDP67號口。不斷地監聽這個端口,等待客戶機發送請求。

2、然後電腦啓動時,需要使用IP地址的主機會向DHCP服務器廣播發現報文(DHCPDISCOVE)。(注:廣播:就是向所有人都發送;發現報文:可以理解爲一種消息。參考現實中的一句話:“誰是DHCP服務器?請告訴我,我的地址的0.0.0.0”)這個時候,主機就是DHCP客戶機了。

這個時候有兩個操作,一方面是主機在進行廣播,所有主機都能知道。另一方面,因爲主機的源地址比較特殊全爲0,故而只有DHCP服務器纔會對此報文進行回覆。

3、DHCP服務器在收到了此報文之後,DHCP服務器首先看看這個主機的發送的發現報文裏的其他信息,看看這個機子以前有沒有在我這裏租過IP地址(回頭客),要是以前有的話,切那個IP地址沒有被分配出去,那麼服務器就會將這個地址放在**提供報文(DHCPOFFER)**裏,發給那個主機。要是這個主機是個新客人,那麼就從自己的IP地址池中找一個現在未被使用的地址,放在提供報文中,單獨發送給這個主機(單播)。之後DHCP服務器會等待客戶機的迴應。

4、當客戶機收到了DHCP提供報文之後,客戶機就會明白自己找到自己要找的人了。理論上來說這個時候客戶機就可以使用IP地址了。但是還有後面的階段。因爲協議的設計者考慮到,因爲一開始的發現報文是廣播,一個網絡中有可能是存在多臺DHCP服務器的,那麼這個時候多個服務器都向客戶機發送了提供報文,客戶機怎麼辦呢?於是就有了這個階段的操作,客戶機會從幾個DHCP服務器中選擇一個,並廣播DHCP請求報文,意思就是告訴所有人,我跟他走了,在一起了。其他人就不考慮了。這裏的選擇標準基本上是先到先得。

5、被選中的DHCP服務器收到了廣播報文時,會向該客戶機發送一個同意(DHCPACK)或者拒絕報文(DHCPNACK)。一般來說都是同意的。偶爾因爲一些故障,無法將事先約定的IP地址進行綁定會回覆拒絕報文。沒有被選中的主機則會在收到報文後,將之前準備給該主機的IP記錄清除,等待其他主機請求。

6、此時如果本主機收到了DHCP服務器的同意報文,則DHCP客戶機和這個IP進入已綁定狀態,客戶機可以開始使用臨時的地址。同時同意報文中包含着租用期。協議要求客戶機在半個租用期和87.5%個租用期的時候發送更新租用期請求。 如果收到了NACK報文,客戶機衝第一步重新來過,開始廣播DHCP發現報文。

情況2:續租IP地址

7、當客戶機在租用期過了一半的時候,會發送DHCPREQUEST報文即重新請求報文。

8、DHCP服務器收到該請求報文之後,會抉擇是否續約,大部分情況是續的。然後再次發送DHCPACK報文。 如果服務器拒絕續約,則發送NACK報文。

9、客戶機如果收到了DHCP服務器的ACK報文時,則重新計時。待到下一個租約期的一半時,再次發送重新請求報文。
若收到NACK報文時,客戶機必須立即停止使用當前IP地址並將其釋放,然後重新進行DHCP發現報文的廣播。
若客戶機一直沒有收到報文時,則在87.5%個租用期時,再次發送重新請求報文。看DHCP服務器是否響應。若至地址租期到期,DHCP服務器仍未響應,則客戶機發送DHCP RELEASE報文。主動向DHCP服務器釋放地址.然後開始新一輪的IP地址獲取.

圖片源自《計算機網絡》謝希仁版圖中,序號和我描述的序號可能不一樣

中繼:
如果一個大的網絡中,有一些大網絡的子網絡怎麼辦呢?每個子網絡都建立一個DHCP服務器很明顯不太合適,這個時候就有了DHCP服務器中繼。
這個被人爲指定的中繼會承擔分擔網絡流量的作用。它知道DHCP服務器的具體信息(就是他知道DHCP服務器在哪裏,能找到他),如果中繼收到了一個主機的廣播請求,那麼該代理會以單播的形式,向DHCP服務器發送此報文,等待DHCP服務器回覆了之後,中繼仍會以單播的形式發回給主機。大大的緩解了網絡的壓力。
爲什麼是緩解壓力呢?你想想,你去要地址,肯定是要讓所有人都知道。你如果在全校範圍內尋找校長,肯定要買功率十分大的喇叭。但是如果你們班有代理,那麼你只需要一個小喇叭在全班範圍內大喊,代理聽到了之後自然會把你的需求上報給校長。

圖片源自網絡

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章