作者: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地址要符合以下原則:
- 地址合法,即對應該區域網的IP地址和子網掩碼。
- 地址空閒,同一網路下沒有其他裝置使用該地址。
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通訊分為四步:
- Discovery:客戶機發廣播,搜尋DHCP伺服器。
- Offer:DHCP伺服器發出邀請,提供一個可用的IP地址。
- Request:客戶機正式請求使用該IP地址。
- 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通訊。
歡迎繼續閱讀“協議森林”系列