主機配置:DHCP數據庫
DHCP(動態主機配置協議),是在一臺主機啓動後,第一個運行的客戶/服務器應用程序。換言之,當一臺主機啓動後,若是它認爲本身當前應當鏈接到因特網上,但又不知道本身的IP地址時,DHCP就以引導程序的身份發揮做用。服務器
每一個鏈接到TCP/IP互聯網的計算機都必須知道本身的IP地址、一個路由器的IP地址、一個名字服務器的IP地址以及本身的子網掩碼這四種信息。網絡
DHCP分組格式:設計
1、曾經使用過的協議代理
在DHCP成爲正式的主機配置協議以前,還有過一些其餘的協議。blog
1.RARP:繼承
在因特網時代的初期,人們曾設計了一個稱爲逆地址解析協議(Reverse Address Resolution Protocol,RARP)來向被引導的主機提供IP地址。實際上,RARP是ARP的一個版本。ARP將一個IP地址映射爲一個物理地址,而RARP則將一個物理地址映射成爲一個IP地址。可是RARP已經被淘汰了,緣由有兩個:首先,RARP利用了數據鏈路層的廣播服務,這也就表示每一個網絡上都必須存在一臺RARP服務器。第二,RARP只能提供計算機的IP地址,但現在的計算機須要前面提到的全部四種信息。進程
2.BOOTP:事件
引導程序協議(BOOTstrap Protocol,BOOTP)是DHCP的先驅。它是一個客戶/服務器協議,被設計用來克服RARP協議存在的缺陷。可是BOOTP是一個靜態配置協議,當客戶請求本身的IP地址時,BOOTP服務器就諮詢一張表,將客戶的物理地址映射成相應的IP地址。這就意味着客戶的物理地址和IP地址之間的綁定是已經存在的。這個綁定關係是事先設定好的。路由
在某些場合,咱們須要的是一個動態配置協議。例如,當一臺主機從一個物理網絡移動到另外一個物理網絡時,它的物理地址就改變了。再好比,有時候主機須要在某一段時間內使用一個臨時的IP地址。BOOTP沒法處理這種情況,由於物理地址和IP地址之間的綁定是靜態的,是固定存放在一張表中的,除非管理員更改這張表。
而DHCP的設計就是爲了解決這些不足之處。
3. DHCP:
動態主機配置協議(Dynamic Host Configuration Protocol,DHCP)是一種客戶/服務器協議,設計這個協議是爲了將上述四種信息傳遞給無盤計算機或者第一次啓動的計算機。DHCP是BOOTP的繼承者,而且可以兼容BOOTP。
2、DHCP操做
DHCP客戶和DHCP服務器能夠在同一個網絡上,也能夠位於不一樣的網絡。
1.DHCP客戶和DHCP服務器在同一個網絡
雖然這種狀況不是很常見,不過管理員能夠把客戶和服務器放在同一個網絡中。如圖所示:
這種狀況的操做以下:
(1)DHCP服務器在UDP端口67發出被動打開命令,等待客戶請求。
(2)被引導的客戶在UDP端口68發出主動打開命令。這個報文被封裝成UDP用戶報,其目的端口是67,源端口號是68。這個UDP用戶數據報在封裝成IP數據包。客戶使用的是全0的源地址和全1的目的地址。
(3)服務器或者用廣播報文,或者用單播報文來響應這個用戶,它使用了UDP源端口號67和目的端口68.這個響應能夠是單播的,由於服務器知道客戶的IP地址,同時也知道客戶的物理地址,也就是說它不須要使用ARP的服務進行從邏輯地址到物理地址的映射。可是某些系統不容許旁路掉ARP,結果就要使用廣播地址。
2. DHCP客戶和DHCP服務器在不一樣的網絡
如圖所示:
像其餘應用層的進程同樣,客戶能夠在某個網絡上,而服務器能夠在相隔好幾個網絡以外的另外一網絡上。這就帶來了一個必需要解決的問題。DHCP請求是廣播發送的,由於客戶不知道服務器的IP地址。而廣播的IP數據報不能經過任何路由器。路由器收到這樣的分組就丟棄它。
要解決這個問題,就須要一箇中介物。某臺主機(或是一臺可以配置爲在應用層工做的路由器)能夠用來充當中繼。在這種狀況下,該主機就稱爲中繼代理。中繼代理知道DHCP服務器的單播地址,並在端口67監聽廣播報文。當它收到這種類型的分組後,就把它封裝成一個單播數據報,而且把此請求發送給DHCP服務器。攜帶了單播目的地址的分組能夠被任何一個路由器轉發,最終到達DHCP服務器。DHCP服務器知道這個報文來自中繼代理,由於在請求報文中有一個字段定義了中繼代理的IP地址。中繼代理在收到回答後,再把它發送給DHCP客戶。
3、配置
人們設計DHCP是爲了提供靜態和動態的地址分配。
1.靜態地址分配
對於靜態地址分配,DHCP有一個專門的數據庫,能夠靜態地吧物理地址綁定到IP地址。
2.動態地址分配
DHCP還有第二個數據庫,包括一個可用的IP地址池。第二個數據庫使DHCP成爲動態的。當DHCP客戶請求臨時的IP地址時,DHCP服務器就從可用(即爲使用的)IP地址池中取出一個IP地址進行指派,這個IP地址的使用時間長短可協商。
當DHCP客戶想DHCP服務器發送請求是,服務器首先檢查它的靜態數據庫。若靜態數據庫中存在所請求物理地址的表項,則返回給這個客戶的永久IP地址。反之,若靜態數據庫中沒有這個表項,服務器就從可用IP地址池中選擇一個IP地址,並把這個地址指派給客戶,而後再把相應的表項加入到動態數據庫中。
若是主機要從一個網絡移動到另外一個網絡,或者與一個網絡時連時斷,那麼DHCP的這種動態特性就有了用武之地。DHCP能夠在有限時間內提供一個臨時的IP地址。
從地址池指派的地址都是臨時地址。DHCP服務器向客戶授予某一段時間內對該地址池的租用權。當租用時效過時,客戶或者中止使用這個IP地址,或者續租。服務器有權力選擇贊成或不一樣意續租。若服務器不一樣意,客戶就中止使用這個地址。
3.轉換狀態
爲了提供動態的地址分配,DHCP客戶能夠像狀態機那樣從一個狀態轉換到另外一個狀態,狀態轉換取決於收到的報文和發送的報文。在這種狀況下,報文的類型是由包含在DHCP分組中的標記爲53的選項來定義的。標記爲53 的選項如圖所示:
DHCP的不一樣狀態:
(1)INIT狀態
當DHCP客戶首次啓動時,它處於INIT狀態(初始化狀態)。客戶使用端口67廣播DHCPDISCOVER報文(一個帶有DHCPDISCOVER選項的請求報文)。
(2)SELECTING狀態
在發送DHCPDISCOVER報文後,客戶就進入SELECTING(選擇)狀態。可以提供這種類型服務的服務器要用DHCPOFFER報文進行相應。在此類報文中,服務器提供了一個IP地址。它們還要提供租用時間長度,其默認值是1小時。在發送DHCPOFFER報文的服務器,把提供的IP地址鎖定,使這個地址不會再提供給任何其餘的客戶。客戶選擇所提供的地址中的一個,並向所選擇的服務器發送DHCPREQUEST報文。而後就進入REQUESTING狀態。若是客戶沒有收到DHCPOFFER報文,它還要再嘗試四次,每一次間隔2秒。若是對這些DHCPDISCOVER都沒有收到回答,客戶就睡眠5分鐘後再試。
(3)REQUESTING狀態
客戶保持在這個REQUESTING(請求)狀態,直至它收到來自服務器的DHCPACK報文爲止,這個報文建立了客戶物理地址和它的IP地址之間的綁定。客戶收到DHCPACK報文後進入BOUND狀態。
(4)BOUND狀態
在這種狀態下,客戶可使用該IP地址,直到租用時間到期。當到達租用時間的50%時,客戶就再發送一個DHCPREQUEST報文以請求更新。因而,客戶進入RENEWING。在BOUND(綁定)狀態時,客戶也能夠取消租用,並進入到初始化狀態。
(5)RENEWING狀態
客戶保持在RENEWING(更新)狀態,直至下面兩個事件之一發生。客戶能夠收到更新租用協定的DHCPACK報文。在這種狀況下,客戶把計時器復位,而後回到BOUND狀態。或者,若是沒有收到DHCPACK,同時到達租用時間的87.5%時,客戶就進入REBINDING狀態。
(6)REBINDING狀態
客戶保持在REBINDING(從新綁定)狀態,直至下面三個事件之一發生。若客戶收到一個DHCPNACK報文或者租用時間到期,則回到初始化狀態,並嘗試獲得另外一個IP地址。若客戶收到DHCPACK報文,它就進入綁定狀態,並把計時器復位。
DHCP不一樣狀態的轉換圖: