作者: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通信。
歡迎繼續閱讀“協議森林”系列
文章列表