動態主機配置協議DHCP

一—導讀

在日常生活中我們使用電腦,當我們連接到一個新的網絡的時候,你知道中間發生了什麼,最終你可以上網的嗎?一個主機想要上網,需要如下配置信息:IP地址,子網掩碼,默認網關,DNS服務器。

如果手動去配置這些,容易出錯還麻煩,這時就有一個解放人類雙手的好工具-DHCP服務器,可為局域網主機中各主機配置以上4個信息。

主機開機後自啟動DHCP服務器,然後向DHCP服務器請求配置信息 本篇我們就來介紹一下DHCP(Dynamic Host  Configuration Protocol)。

 

 

 二—相關術語的介紹

DHCP DISCOVER: DHCP發現報文,其內部裝有事物ID和DHCP客戶端MAC地址。

DHCP OFFER:DHCP提供報文

DHCP REQUEST: DHCP請求報文

DHCP ACK:DHCP確認報文

DHCP NACK :DHCP否認報文

DHCP RELEASE:DHCP釋放報文

說明:DHCP客戶沒有獲取地址的時候使用的地址為0.0.0.0。

          最開始客戶採用廣播地址廣播發送的方式去發送相應的報文。

 

 

三—實例講解DHCP工作過程

假設網絡中有兩台DHCP服務器和一台主機,DHCP使用客戶-服務器方式,在DHCP服務器上運行DHCP服務進程(簡稱服務器),在用戶主機商行運行DHCP客戶進程(簡稱為客戶)

DHCP是TCP/IP協議體系中的應用層中的協議,使用運輸層的UDP所提供的服務,也就是說,DHCP報文在運輸層會被打包成UDP用戶數據報,服務器使用的UDP端口是67,客戶用的是68,UDP用戶數據報在網絡層被打包成IP數據報。根據所使用的網絡接口封裝成相應的數據鏈路層的幀。

下面我們來看看服務器和客戶的交互過程,當啟用主機的DHCP後,DHCP客戶進程通過廣播的方式向DHCP服務器發送DHCP發現報文,因為主機目前還沒有分配到IP地址,所以該發現報文的源地址0.0.0.0,

目的IP地址為廣播地址255.255.255.255,之所以採用廣播發送,因為主機此時並不知道服務器有幾台,IP地址是什麼?由於是光播的IP數據報,所以網絡中的進程都會收到該數據報,對其層層解封。解封出封裝有DHCP發現報文的用戶數據報,對於DHCP客戶來說,其應用層沒有監聽該UDP數據報的目的端口67的進程,無法交付 DHCP發現報文,只能丟棄。另一邊,DHCP服務器始終運行着DHCP服務器進程。接受該發現報文並做出響應。DHCP的服務器收到發現報文後,根據報文中的客戶端的MACI地址來查找自己的數據庫,看是否有針對該MACI地址的配置信息。如果有,就把這些配置信息打包成提供報文發給用戶主機,沒有的話就採取默認的配置信息來發送提供報文,封裝該數據報的源IP地址就是服務器本身的地址,源IP地址任然為廣播地址(主機目前還沒有配IP地址,為了讓他收到,只能用廣播)。因為是廣播發送,所以所有設置都能收到。服務器沒有監聽目的端口68的進程,於是會丟棄該報文,只有客戶會收到並且提取出有用的信息。客戶會根據收到的提供報文中的事物ID來判斷該報文是不是自己所請求的報文(看兩個事物ID是否一樣),如果一樣,就接受該報文。否則丟棄該報文。

其中分配IP地址的時候,服務器會使用ARP來確保所選的IP地址未被網絡中的其他主機佔用,本例中,兩個服務器的都收到,但留下先到的那個。然後發送請求報文,徵得該服務器同意就可以用IP地址了。

服務器1接收該請求,發送確認報文。

 

之後主機就可以使用該IP地址上網了。

全過程圖解

 

 

四—DHCP中繼代理

我們看如圖所示情況,有些主機隔的遠,當發送發現報文給DHCP服務器的時候,會被路由器無情的拒絕。

這時我們需要策反路由器,使其成為DHCP中繼代理,每月給他發點工資,讓他乖乖聽話。