協議森林16 小美的桌號(DHCP協議)

Vamei發表於2016-08-06

作者:Vamei 出處:http://www.cnblogs.com/vamei 嚴禁任何形式轉載。

 

DHCP協議用於動態的配置電腦的網路相關引數,如主機的IP地址,路由器出口地址、DNS域名伺服器地址等。一臺電腦只要接上網,就可以通過DHCP協議獲得相關配置,從而順利的暢遊網路。

 

網路配置

電腦剛剛接上網路時,像一個走入一家新餐廳的食客,不免會有很多疑惑:

“我該坐在哪裡?”

“我怎麼點菜?”

“我該如何結賬?”

 

初入大飯店

 

如果顧客的問題長時間得不到解答,那麼餐廳很可能失去這位客人。於是,餐廳往往會僱一些服務員。他們可以把客人引導到空閒的座位,並告訴顧客如何點餐、如何結賬等。同樣,在網路通訊中,一臺電腦需要設定自己的IP地址等網路引數。可對於電腦使用者來說,這些設定太過複雜。幸好,DHCP協議可以解決這一讓人頭痛的問題。

 

DHCP協議全稱為“動態主機設定協議”(Dynamic Host Configuration Protocol)。通常來說,普通電腦中都內建有DHCP客戶端模組。電腦接上網路後,DHCP客戶端發現新連通的網路,會在該網路上找DHCP伺服器。DHCP伺服器將給電腦提供合理的網路配置,並把設定資訊傳回本機。所謂的DHCP伺服器,其實就是一些執行有DHCP伺服器端軟體的特殊電腦。他們像等候在網路上的服務員,為新來的顧客排憂解難。本機和DHCP伺服器之間的通訊,都是通過DHCP協議進行的。

 

其實在網路誕生初期,就有了用一臺伺服器為網路上的電腦配置引數的做法。最早的一個協議叫BOOTP(Bootstrap Protocol),主要用於開機配置。計算機開機時需要很多配置引數。對於沒有磁碟的計算機來說,它無法獲得這些引數,但可以通過BOOTP從網路上的其他裝置上獲得。DHCP大體上繼承了BOOTP的工作方式,但在細節上進行了改進。我們將在以後看到。

 

地址分配

服務員最重要的任務是為客人找座位。類似的,DHCP伺服器的首要任務是分配IP地址。分配的IP地址要符合以下原則:

  1. 地址合法,即對應該區域網的IP地址和子網掩碼。
  2. 地址空閒,同一網路下沒有其他裝置使用該地址。

 

DHCP伺服器上存有一個地址池,裡面是可用的IP地址,相當於服務員手中的空閒桌號列表。當新客人出現時,DHCP伺服器就會從地址池中取出一個IP地址分配給客人。此外,伺服器還會說明IP地址的佔用時間,也就是租期:

“先生,請注意您的用餐時間為1個小時”

 

當然,主機使用網路的時間可能超過租期。如果主機在租期到時都沒有聯絡DHCP伺服器,那麼DHCP伺服器會收回IP地址,再分配給其他主機。可如果主機想繼續使用IP地址,就要在中途申請延長租期。收到申請的DHCP伺服器通常會答應主機的請求,允許它繼續使用現有IP地址。但少數情況下,伺服器會要求主機更換IP地址。如果主機聯絡不上DHCP伺服器,那麼它必須立即停止使用IP地址,重啟尋找DHCP伺服器的過程。

 

有了動態分配,DHCP伺服器不但簡化了網路配置過程,還可以有效利用IP地址資源。例如一個咖啡館的Wifi路由允許200臺裝置接入。咖啡館每天進出的客人很多。如果每個客人都要求一個不一樣的IP地址的話,所需地址會遠遠超過200臺。而通過動態的方式,200個IP地址不斷回收使用,完全可以滿足客人的需要。有時,DHCP伺服器會預留一些地址給特定MAC地址的裝置使用。這就好像餐廳給貴賓預留座位,不允許其他客人坐。這樣的地址通常會分配給印表機、傳真機等特殊裝置。由於IP地址固定,使用者可以方便的通過IP地址找到它們。

 

通訊過程

DHCP協議的底層是UDP協議。我們知道,網路上的點對點溝通需要有IP地址。但新接入網路的客戶機正是想通過DHCP通訊來獲得IP地址。這簡直成了“雞生蛋、蛋生雞”的死衚衕。幸好,除了點對點通訊,UDP協議還允許廣播通訊。把UDP資料包傳送到網路的廣播地址,網路上的每個裝置都能收到。因此,DHCP通訊主要靠這種廣播的形式進行。

 

DHCP通訊分為四步:

  1. Discovery:客戶機發廣播,搜尋DHCP伺服器。
  2. Offer:DHCP伺服器發出邀請,提供一個可用的IP地址。
  3. Request:客戶機正式請求使用該IP地址。
  4. Acknowledge:DHCP伺服器確認,並提供其他配置引數。

 

每一步的通訊內容都放在一個符合DHCP格式的資料包中。資料包中可以包括客戶機IP地址、伺服器IP地址、客戶的硬體MAC編號等欄位,還能附加多條網路設定引數。當某些資訊未知時,如客戶機的IP地址,相應的欄位可以填成0。

 

我們可以再次用餐廳來類比通訊過程:

客人老張大喊:“服務員,我是老張,給我找張桌子唄?”

服務員小美回喊:“我是服務員小美。老張你坐3號桌行嗎?”

老張覺得3號桌不錯,又喊了一嗓子,“這桌子行,老張我就坐在這裡了啊。”

小美回覆,“成啊。記得用餐時間是一個小時喲。”

 

服務員小美

 

經過這一系列的DHCP通訊,客戶機獲得了自己的IP地址,也記下了租期時間。為了防止DHCP伺服器不靠譜,客戶機通常還會探測一下網路,以免該IP已經被其他裝置佔用。除了租期,DHCP伺服器最終確認中,還可能加上其他網路配置資訊,如DNS伺服器地址、網路出口地址等。客戶機可以選擇接受,也可以拒絕DHCP伺服器的“好意”,自行設定這些引數。

 

DHCP攻擊

一定程度上說,DHCP伺服器是個活雷鋒,為網路上的其他裝置提供公共服務,免得裝置之間私自打架。人們也越來越信賴這個活雷鋒,只管接上網線、連上Wifi,讓DHCP伺服器處理配置之類的雜事。無形中,DHCP伺服器掌握了很大的公共權力。一些黑客攻擊手法開始瞄準DHCP伺服器。

 

針對DHCP的一種攻擊辦法是從伺服器那裡騙IP地址。攻擊者的電腦可以不斷髮出DHCP請求,冒充成新入網的客戶機。於是,DHCP伺服器的地址池被耗幹,無法分配地址給後來的使用者。後來的使用者再也沒法使用網路服務。攻擊者很可能會繼續下連環套。攻擊者佔有了大量IP地址,可以裝扮成新的DHCP伺服器,把自己騙來的IP地址分配給網路上的新使用者。

 

等等,好像有什麼不對攻擊者搞癱一臺DHCP伺服器,就為了過一下cosplay的癮?

假扮小美,很容易被外表迷惑
 

當然不是。DHCP伺服器還能提供其他網路設定引數。攻擊者可以讓自己成為DNS伺服器或者網路出口。於是,客戶機的域名解析和外網通訊,必須經過攻擊者的電腦。這個時候,攻擊者的許可權就很大了。他可以偷聽通訊、偽裝成客戶機、假扮成某個域名的網站。比如說,攻擊者就可以篡改域名解析,讓你在訪問www.cnblogs.com/vamei時,實際上訪問的是攻擊者提供的一個網頁。當你在這個網頁上輸入使用者名稱和密碼時,你的資訊就完全洩露給了攻擊者。

 

DHCP攻擊讓人防不勝防。DHCP協議在設計中並沒有考慮到安全性的問題,所以很難從軟體上杜絕DHCP攻擊。某些品牌的交換機上,可以指定特定埠給合法的DHCP伺服器,以免其他人偽裝。當然,最重要的保護方式,還是防止攻擊者連入區域網。

 

總結

DHCP伺服器可以動態的分配IP地址,還可以提供其他網路設定引數。客戶機和伺服器經過四步來完成DHCP通訊。

 

歡迎繼續閱讀“協議森林”系列

相關文章