相信很多人都聽過DHCP這個名詞,相信也有不少人知道當要設定IP位址的時候就會聽到DHCP,但是到底DHCP涵蓋什麼範圍?DHCP會做哪些事情?它的原理以及發展歷史是什麼?筆者相信應該只有非常少數的人知道,因此筆者在這篇文章中就來分享一下DHCP的整體概念。
為了更有效地使用IP位址,於是出現了私有IP位址的設計。私有IP位址被定義在RFC 1918的規格中,當電腦並不需要存取網際網路時,可以只用私有IP位址,而私有IP位址並不需要註冊,因為私有IP位址只有內部網路才可以使用。私有IP位址的IP範圍如表1所示。
表1 私有IP位址的IP範圍
一般公司內部的網路都是分配私有IP位址給內部的電腦,不僅如此,若讀者家裡有架設自己的無線網路基地台,這個基地台也是會分配私有IP位址給每一台連上網路的筆記型電腦,而這些私有的IP位址在外面的網際網路中是「不能見人」的,也因為如此,各個內部網路(Intranet)就可以重複使用這些私有IP位址範圍,以增加IP位址的使用性。
Link-local位址
另外還有一段私有IP位址是被定義在RFC 3330和RFC 3927文件之中,這段私有IP位址稱為Link-local addresses。設計這段私有IP位址的目的在於,希望在沒有DHCP伺服器的情況之下還能夠提供IP位址。而Link-local addresses的範圍是:
但是,在這段範圍中並不是所有的位址都可以使用,目前而言,169.254.0.0/24和169.254.255.0/24被保留起來,以便未來可以提供不同的用途。
如果是使用Windows 9x的作業系統平台(不包含Windows NT作業系統),是不能經由DHCP伺服器來取得IP位址,這個時候就會隨意從169.254.1.00169.254.254.255這個範圍之間取一個IP位址來使用,當然這樣隨意取用的作法很有可能會造成IP衝突,若有IP衝突就只能靠自己去處理了。
Link-local address比私有IP位址擁有比較多的限制,而這些限制都被定義在RFC 1918文件之中。另外還有一點必須注意的是,Link-local address所發送出來的網路封包,以及要送往Link-local address的網路封包都不能經過路由器,這個限制被定義在RFC 3927之中,有興趣的讀者可以參考RFC 3927及RFC 1918文件。這裡就不再額外敘述。
什麼是DHCP協定
DHCP的全名是Dynamic Host Configuration Protocol,它在網路七層協定之中,屬於第七層的Application Layer。DHCP這個網路協定運作於Server-Client的架構之中,用來讓客戶端(Client side)取得網路相關的設定。
這裡指的設定包含IP位址、預設路由(Default Route)位址、DNS伺服器位址等等。而這些設定都是由DHCP伺服器所取得而來的,以便於讓客戶端可以在網路IP層之中運作。
|
▲圖1 Mac作業系統在DHCP中的設定。 |
最典型的應用環境就是區域網路(LAN)。想必很多讀者都曾經在區域網路(或是無線網路)環境中聽過DHCP這個名詞。圖1就是Mac作業系統在DHCP中的設定值。
此設定可從Mac左上角的蘋果圖案→【System Preference】→【Internet & Wireless】→【Network】中找到,選擇要設定的網路類型,例如「Wi-Fi」,然後選擇右下方的〔Advanced...〕,接著再選擇〔TCP/IP〕頁籤即可找到。
從選單中也發現,可以選擇BOOTP協定。如果在區域網路環境內,每個設備(無論是電腦、手機、平板,甚至是路由器)都算是DHCP協定的客戶端。
不過,路由器則同時扮演DHCP客戶端與DHCP伺服器端的角色,當扮演DHCP伺服器端時,就是需要把網路設定分配給其他網路設備。當扮演DHCP客戶端時,就是需要跟ISP業者的DHCP伺服器要求取得網路設定值。
DHCP協定的發展歷史
DHCP協定最開始是發展於1993年10月,被定義在RFC 1531文件之中。當初定義DHCP協定是用來解決或者說是改善BOOTP協定的手動設定過程。
而BOOTP協定,也就是Bootstrap Protocol(詳情可參考RFC 951文件),可以讓電腦透過網路從伺服器端取得網路開機的啟動程序。而BOOTP協定的前身是RARP(Reverse Address Resolution Protocol)。
BOOTP協定與DHCP協定非常類似,差別在於BOOTP協定都要用手動設定方式來進行,非常麻煩。因此,如果有一些IP位址已經沒有被使用的話,必須手動記錄或是指派等等。所以DHCP協定的出現,就是用來解決這個問題,排除了手動的程序,讓整個過程更加自動化。
1997年,DHCP協定完整於RFC 2131文件之中。至於IPv6的版本,則可以在RFC 3315內被找到。如果對DHCP在IPv6環境有更深入的興趣,則可另外參考RFC 3633文件,裡面提到IPv6的Prefix Delegation。
DHCP的運作模型
DHCP協定的運作環境是以Client-Server的模型為主。Client端指的是一般電腦設備(用戶端),而Server端就是DHCP伺服器端。基本上,DHCP協定用於IPv4網路環境,也用於IPv6網路環境,而DHCP伺服器上持有一份可用的IP列表以及相關設定的資料庫。
DHCP伺服器一旦收到由客戶端發送過來的IP要求,會先根據DHCP伺服器與DHCP客戶端之間的網路來決定如何發送回所需要的資料,接著把可用的IP位址以及IP相關設定發送回給客戶端。
每次DHCP伺服器給予的IP都是有使用期限的,但是DHCP伺服器並不會幫助客戶端記錄使用期限是否到期並給予新的IP,這些都是客戶端的責任。
因此,客戶端必須在使用期限到達之前,即時發送新的IP需求給DHCP伺服器端,以便於取得新的IP位址與相關設定。即便用戶端不使用DHCP來取得IP位址,也必須透過DHCP伺服器取得相關設定。舉例來說,IPv4的用戶端也許需要取得Link-local位址,而IPv6用戶端則可能需要取得Stateless Addressing Auto-configuration。
NAT網路環境
NAT是Network Address Translation的縮寫。NAT是用來將已經註冊的IP位址轉換到私有的IP位址,簡化IP位址的管理,以便讓企業內部的網路連到外部的網際網路,而且甚至不需要有註冊的子網路。