天天看點

鳥哥伺服器篇——DHCP運作的原理

在正式的進入DHCP(DynamicHost Configuration Protocol) 伺服器設定之前,我們先來認識一下DHCP這個協定吧!還有,需要了解的是,我們是否『一定』得設定 DHCP 這個伺服器呢?這裡都需要理清一下概念!

1 DHCP 伺服器的用途

在開始 DHCP 的說明之前,我們先來複習一下之前在第二章網絡基礎裡面提到的幾個網絡參數吧!要設定好一個網絡的環境,使計算機可以順利的連上 Internet ,那麼你的計算機裡面一定要有底下幾個網絡的參數才行,分别是:

IP, netmask, network, broadcast, gateway, DNS IP

其中,那個 IP,netmask, network, broadcast 與 gateway 都可以在 /etc/sysconfig/network-scripts/ifcfg-eth[0-n] 這檔案裡面設定,DNS 伺服器的位址則是在 /etc/resolv.conf 裡頭設定。隻要這幾個項目設定正确,那麼計算機應該就沒問題的可以上網了!是以說,你家裡面的 3, 4 部計算機,你都可以手動的來設定好你所需要的網絡參數,然後利用NAT 伺服器的功能,就可以大搖大擺的連上 Internet 了!

好了,現在讓我們換一個大一些的場景吧!假設你是學校宿舍的網絡管理者,所管理的學生計算機大概有100部好了,那麼你怎麼設定好這 100 部的計算機呢?

  1. 直接每一部計算機都讓你登門拜訪手動的去設定好?
  2. 将所有的學生都集合起來,然後精神訓話.....喔不!是直接教導一下怎麼設定?還是
  3. 借由一部主機來自動的配置設定所有的網絡參數給宿舍内的任何一部計算機?

這三種解決方案所需要的時間都不相同,如果你選擇的是(1),那麼鳥哥個人認為,你不是工作狂就是瘋掉了,因為所要花費的時間與你所得的薪水與付出的心力是完全不成比例的。如果選擇是(2),那麼很可能你會被挂上獨裁者、 沒良心的管理者的稱号!如果是選擇(3)呢?恭喜你!這個方案的管理時間花費最短,也是最不麻煩的作法啦!

呵呵!知道鳥哥要說些什麼了嗎?是的!這個DHCP(Dynamic Host Configuration Protocol) 伺服器最主要的工作,就是在進行上面的第三個方案,也就是自動的将網絡參數正确的配置設定給網域中的每部計算機,讓用戶端的計算機可以在開機的時候就立即自動的設定好網絡的參數值,這些參數值可以包括了 IP、netmask、network、gateway 與 DNS 的位址等等。如此一來,身為管理者的你,隻要注意到這一部提供網絡參數的主機有沒有挂掉就好了,其他同學們的個人計算機,你想都不必想要怎麼去幫忙!因為 DHCP 主機已經完全都幫你搞定啦!

2 DHCP 協定的運作方式

你必需要知道的是,DHCP 通常是用于區域網路絡内的一個通訊協定,他主要藉由用戶端傳送廣播封包給整個實體網段内的所有主機,若區域網路絡内有 DHCP 伺服器時,才會響應用戶端的 IP 參數要求。是以,DHCP伺服器與用戶端是應該要在同一個實體網段内的。至于整個 DHCP 封包在伺服器與用戶端的來來回回情況有點像下面這樣:

用戶端取得 IP 參數的程式可以簡化如下:

鳥哥伺服器篇——DHCP運作的原理

(1) 用戶端:利用廣播封包發送搜尋 DHCP 伺服器的封包:

若用戶端網絡設定使用 DHCP 協定取得 IP (在 Windows 内為『自動取得 IP』),則當用戶端開機或者是重新啟動網絡卡時, 用戶端主機會發送出搜尋 DHCP 伺服器的 UDP 封包給所有實體網段内的計算機。此封包的目标 IP 會是 255.255.255.255, 是以一般主機接收到這個封包後會直接予以丢棄,但若區域網路絡内有 DHCP 伺服器時,則會開始進行後續行為。

(2) 伺服器端:提供用戶端網絡相關的租約以供選擇:

DHCP 伺服器在接收到這個用戶端的要求後,會針對這個用戶端的硬體位址 (MAC) 與本身的設定資料來進行下列工作:

·        到伺服器的登入檔案中尋找該使用者之前是否曾經用過某個 IP ,若有且該 IP 目前無人使用,則提供此 IP 給用戶端;

·        若配置檔案針對該 MAC 提供額外的固定 IP (static IP) 時,則提供該固定 IP 給用戶端;

·        若不符合上述兩個條件,則随機取用目前沒有被使用的 IP 參數給用戶端,并記錄下來。

總之,伺服器端會針對用戶端的要求提供一組網絡參數租約給用戶端選擇,由于此時用戶端尚未有 IP ,是以伺服器端響應的封包資訊中,主要是針對用戶端的 MAC 來給予回應。此時伺服器端會保留這個租約然後開始等待用戶端的回應。

(3)用戶端:決定選擇的 DHCP 伺服器提供的網絡參數租約并回報伺服器:

由于區域網路絡内可能并非僅有一部DHCP 伺服器,但用戶端僅能接受一組網絡參數的租約。 是以用戶端必需要選擇是否要認可該伺服器提供的相關網絡參數的租約。當決定好使用此伺服器的網絡參數租約後,用戶端便開始使用這組網絡參數來設定自己的網絡環境。此外,用戶端也會發送一個廣播封包給所有實體網段内的主機, 告知已經接受該伺服器的租約。此時若有第二台以上的 DHCP 伺服器,則這些沒有被接受的伺服器會收回該 IP 租約。至于被接受的 DHCP 伺服器會繼續進行底下的動作。

(4)伺服器端:記錄該次租約行為并回報用戶端已确認的響應封包資訊:

當伺服器端收到用戶端的确認選擇後,伺服器會回傳确認的響應封包,并且告知用戶端這個網絡參數租約的期限,并且開始租約計時喔!那麼該次租約何時會到期而被解約 (真可怕的字眼) ?你可以這樣想:

·        用戶端脫機:不論是關閉網絡接口(ifdown)、重新啟動 (reboot)、關機(shutdown) 等行為,皆算是脫機狀态,這個時候 Server 端就會将該 IP 回收,并放到 Server 自己的備用區中,等待未來的使用;

·        用戶端租約到期:前面提到DHCP server 端發放的 IP 有使用的期限,用戶端使用這個 IP 到達期限規定的時間,而且沒有重新提出 DHCP 的申請時,就需要将 IP 繳回去!這個時候就會造成斷線。但使用者也可以再向 DHCP 伺服器要求再次配置設定 IP 啰。

以上就是 DHCP 這個協定在 Server端與Client 端的運作狀态,由上面這個運作狀态來看,我們可以知道,隻要Server端設定沒有問題,加上Server與Client 在硬體聯機上面确定是OK的,那麼 Client就可以直接借由Server來取得上網的網絡參數,當然啦,隻要我們這些管理者能夠好好的、正确的管理好我們的 DHCP 伺服器,那麼上網的設定自然就變成一件很簡單的事情啦!不過,關于上述的流程還是有一些需要額外說明的啦:

3 DHCP 伺服器給予用戶端的 IP 參數為固定或動态:

在上面的步驟裡面,注意到第二步驟了嗎?就是伺服器會去比較用戶端的 MAC 硬體位址,并判斷該 MAC 是否需要給予一個固定的 IP 呢!是以啦,我們可以設定 DHCP 伺服器給予用戶端的 IP 參數主要有兩種:

(1)固定 (Static) IP:

隻要那個用戶端計算機的網絡卡不換掉,那麼 MAC 肯定就不會改變,由于 DHCP 可以根據 MAC 來給予固定的 IP 參數租約,是以該計算機每次都能以一個固定的 IP 連上 Internet !呵呵! 這種情況比較适合當這部用戶端計算機需要用來做為提供區域内的一些網絡服務的主機之用 (是以 IP 要固定)。那麼如何在 Linux 上面知道網絡卡的 MAC 呢?很簡單啦!有很多的方式,最簡單的方式就是使用 ifconfig 及 arp 來進行:

# 觀察自己的 MAC 可用 ifconfig:

[[email protected] ~]#ifconfig | grep HW

eth0      Link encap:Ethernet  HWaddr 08:00:27:71:85:BD

eth1      Link encap:Ethernet  HWaddr 08:00:27:2A:30:14

# 因為鳥哥有兩張網卡,是以有兩個硬體位址喔!

# 觀察别人的 MAC 可用 ping 配合 arp

[[email protected] ~]# ping-c 3 192.168.1.254

[[email protected] ~]# arp-n

Address        HWtype HWaddress           FlagsMask   Iface

192.168.1.254ther  00:0c:6e:85:d5:69   C            eth0

(2)動态 (dynamic) IP:

Client 端每次連上 DHCP 伺服器所取得的 IP 都不是固定的!都直接經由 DHCP 所随機由尚未被使用的 IP 中提供!

除非你的區域網路絡内的計算機有可能用來做為主機之用,是以必需要設定成為固定 IP ,否則使用動态 IP 的設定比較簡單,而且使用上面具有較佳的彈性。怎麼說呢?假如你是一個 ISP,而你隻申請到 150 個 IP來做為你的客戶聯機之用。那麼你是否真的隻能邀集到 150 的使用者?當然不!我可以邀集 200 個使用者以上!

為什麼?這樣想好了,我今天開了一家餐館,裡面隻有 20 個座位,那麼是否我一餐隻能賣給 20 個人呢?當然不是啦!因為客人是人來人往的,有人先吃有人後吃,是以同樣是 20 個座位,但是可以有 40 個人來吃我的簡餐,因為來的時間不一樣嘛!你這個 ISP 雖然隻有 150 個 IP 可以發放,但是因為你的使用者并非 24 小時都挂在線上的,是以你可以将這 150 個 IP 做良好的配置設定,讓 200 個人來『輪流使用』這 150 個 IP !

Tips:其實IP隻有Public IP與Private IP兩種,中文翻譯成『公共 IP』與『私有 IP』這兩個,至于其他所謂的『靜态 IP』、『實體IP』、『虛拟IP』、『浮動式 IP』等等,都是藉由一些 IP 取得的方式來分類的,關于IP的種類我們在網絡基礎中談過了。

事實上現在主流的 ADSL 寬帶撥接上網也有使用到『靜态 IP 』與『固定 IP 』之類的概念喔! 舉例來說好了,hinet/seed net 等主要 ISP 都有提供所謂的:『一個固定 IP 搭配 7~8 個浮動 IP 』的 ADSL 撥接功能,也就是說同樣透過一條電話線撥接到 ISP ,但是其中一個撥接是可以取得固定的 IP 呢! 而其他的則是非固定的 IP ,DHCP 的 static/dynamic 跟這個有點類似!

4關于租約所造成的問題與租約期限:

如果我們觀察上面 DHCP 運作模式的第四個步驟,你會發現最後 DHCP 伺服器還會給予一個租約期限! 幹嘛還要這樣的一個期限呢?其實設定期限還是有個優點啦!最大的優點就是可以避免 IP 被某些使用者一直占用着,但該使用者卻是 Idle (發呆) 的狀态!

舉個例子來說,我們剛剛不是說到,我有 150 個 IP ,但是偏偏我有200 個使用者嗎?我們以 2010 年的世界杯足球賽來說明好了。假設每個使用者都急着上網知道世足賽的消息,那麼某些熱門對戰時段網絡将可能達到使用尖峰!也就是說,這 200 個人同時要來使用這 150 個IP ,有可能嗎?當然不可能!肯定會有 50 個人無法聯機,因為『很抱歉!目前系統正在忙線中,請你稍後再撥!』

那怎麼辦?這個時候租約到期的方式就很有用處啦!那幾個已經聯機進來很久的人,就會因為租約到期而被迫脫機,這個時候該 IP 就會被釋放出來!是以,那 50 個人 (包括被迫脫機的那個朋友) 隻好繼續的、努力的、加油的來進行 DHCP 的要求!

雖然說是優點,但是其實如果站在使用者的角度來看,還是可能會造成公憤的!憑什麼大家一起交錢,我先聯機進來就需要先被踢出去?是以,如果要當 ISP ,還是得要先規劃好服務的方針才行!

既然有租約時間,那麼是否代表我用DHCP 取得的 IP 就得要『手動』的在某個時間點去重新取得新的 IP 呢?不需要的啦!因為目前的 DHCP 用戶端程式大多會主動的依據租約時間去重新申請 IP (renew) 的!也就是說在租約到期前你的 DHCP 用戶端程式就已經又重新申請更新租約時間了。是以除非 DHCP 主機挂點,否則你所取得的 IP 應該是可以一直使用下去的!

Tips:一般來說,假設租約期限是 T小時,那麼用戶端在 0.5T 會主動向 DHCP 伺服器發出重新要求網絡參數的封包。 如果這次封包要求沒有成功,那麼在 0.875T 後還會再次的發送封包一次。正因如此,是以伺服器端會啟動 port67 監聽使用者要求,而使用者會啟動 port 68 主動向伺服器要求!

5 多部 DHCP 伺服器在同一實體網段的情況

或許你曾經發現過一件事情,那就是當我的網域裡面有兩部以上的 DHCP 伺服器時,到底哪一部伺服器會提供我的這部用戶端計算機所發出的 DHCP 要求?因為在網絡上面,很多時候都是『先搶先赢』的,DHCP的回應也是如此!當 Server1 先響應時,你使用的就是Server1所提供的網絡參數内容,如果是 Server2 先響應,你就是使用 Server2 的參數來設定你的用戶端 PC !不過,前提之下當然是這些計算機的『實體聯機』都是在一起的啊!

因為這個特色的關系,是以當你在練習 DHCP 伺服器的設定之前,不要在已經正常運作的區網下測試,否則會很慘。舉個鳥哥的例子來說好了,某一次其他系的研究所學生在測試網絡安全時,在原有的區網上面放了一部 IP分享器,結果整棟大樓的網絡都不通了!因為那時整棟大樓的網絡是串接在一起的,而我們學校是使用DHCP讓用戶端上網,IP分享器的設定并不能連上Internet

6 何時需要架設 DHCP 伺服器

既然 DHCP 的好處是『免用戶端設定』,而且對于行動裝置的上網方面非常的友善!那麼是否代表你就得要架設一部 DHCP 呢?那可不一定!

6.1 使用 DHCP 的幾個時機

在某些情況之下,倒是強烈的建議架設 DHCP 主機的!什麼情況呢?例如:

·        具有相當多行動裝置的場合:

例如你的公司内部很多筆記本電腦使用的場合!因為這種筆電本身就是移動性的裝置,如果每到一個地方都要去問人家『喂!你這邊的網絡參數是什麼?』還得要擔心是否會跟人家的 IP 相沖突等等的問題!這個時候,DHCP 可就是你的救星!

·        區域内計算機數量相當的多時:

另外一個情況就是你所負責的網域内計算機數量相當龐大時, 大到你沒有辦法一個一個的進行說明來設定他們自己的網絡參數,這個時候為了省麻煩,還是架設 DHCP來的友善!況且,維護一部你熟悉的 DHCP 主機,要比造訪幾十個不懂計算機的人要簡單的多!

6.2不建議使用 DHCP 主機的時機

雖然 DHCP 有很多好處,但是你有沒有發現一個步驟怪怪的!回頭看一下那個步驟一, 用戶端在開機的時候會主動的發送訊息給網域上的所有機器,這個時候,如果網域上就是沒有 DHCP 主機呢?很抱歉,那麼你的這部用戶端計算機,『仍然會持續的發送訊息!』真正的時間與次數不曉得會有多久,不過,肯定會超過 30 秒以上,甚至可以達到一分鐘以上!那麼這段時間你能幹嘛?除了等、還是等! 是以,如果計算機數不多,還是使用手動的方式來設定一下就好了!

  • 在你網域内的計算機,有很多機器其實是做為主機的用途,很少使用者需求,那麼似乎就沒有必要架設 DHCP ;
  • 更極端的情況是,像一般家裡,隻有 3 ~ 4 部計算機,這個時候,架設 DHCP 隻能拿來練練功力,事實上,并沒有多大的效益;
  • 當你管理的網域當中,大多網絡卡都屬于老舊的型号,并不支援 DHCP 的協定時;
  • 很多使用者的資訊知識都很高,那麼也沒有需要架設 DHCP 。

标注:本文來自鳥哥的Linux私房菜第12章12.1,我将其改為簡體中文而已,未敢擅自做其他内容上的改動,隻是希望這些經典的關于Linux伺服器内容的解釋能被更多人閱讀到。

繼續閱讀