linux下DHCP服務原理總結

散盡浮華發表於2016-11-19

 

DHCP(全稱Dynamic host configuration protocol):動態主機配置協議
DHCP工作在OSI的應用層,可以幫助計算機從指定的DHCP伺服器獲取配置資訊的協議。(主要包括:ip地址,子網掩碼,閘道器和dns等)。

DHCP的運作方式:
客戶端傳輸廣播包給整個物理網路段內的所有主句,如區域網內有DHCP伺服器時,才會響應客戶端的IP引數要求,所以DHCP伺服器與客戶端應該在同一個物理網段內
客戶端與DHCP伺服器之間連線的過程如下圖:

1)客戶端:利用廣播包傳送搜尋DNCP伺服器的包
2)伺服器端:提供客戶端網路相關的租約選擇
3)客戶端:決定選擇的DHCP伺服器提供的網路引數租約並彙報給伺服器
4)伺服器端:記錄這次租約並回報給客戶端相關的封包資訊

簡單來說下DHCP工作原理:
(1)客戶機尋找伺服器:廣播傳送discover包,尋找dhcp伺服器
(2)伺服器響應請求:單播傳送offer包,對客戶機做出響應。提供客戶端網路相關的租約以供選擇其中伺服器在收到客戶端的請求後,會針對客戶端的mac地址與本身的設定資料進行一下工作:
    a)到伺服器的登入檔案中尋找該使用者之前曾經使用過的ip,若有且該ip目前沒有人使用,這提供此ip為客戶機
    b)若配置檔案中有針對該mac提供額外的固定ip,且該ip沒有被使用,則提供此ip給客戶機
    c)如果沒有符合以上兩個條件,則隨機取用目前沒有被使用的ip引數給客戶機並記錄到leases檔案中。
(3)客戶機傳送ip請求:廣播request包,選擇一個伺服器提供的網路引數租約回報伺服器。此外,客戶機會傳送一個廣播封包給區域網內的所有主機,告知自己已經接受伺服器的租約。
(4)伺服器確認租約:單播Ack包,伺服器與客戶機確認租約關係並記錄到伺服器的leases檔案中 。

接著說下DHCP幾個概念:
DHCP ClientDHCP客戶端,通過DHCP協議請求IP地址的客戶端。DHCP客戶端是介面級的概念,如果一個主機有多個以太介面,則該主機上的每個介面都可以配置成一個DHCP 客戶端。交換機上每個Vlan介面也可以配置成一個DHCP客戶端。
DHCP Server:DHCP 服務端,負責為DHCP客戶端提供IP地址,並且負責管理分配的IP地址。
DHCP Relay:DHCP中繼器,DHCP客戶端跨網段申請IP地址的時候,實現DHCP報文的轉發功能。
DHCP Security:DHCP安全特性,實現合法使用者IP地址表的管理功能
DHCP Snooping:DHCP監聽,記錄通過二層裝置申請到IP地址的使用者資訊 

DHCP工作大致可以分為一下幾個階段:

一、發現階段:
即DHCP客戶端尋找DHCP服務端的過程,對應於客戶端傳送DHCP Discovery,因為DHCP Server對應於DHCP客戶端是未知的,所以DHCP 客戶端發出的DHCP Discovery報文是廣播包,源地址為0.0.0.0目的地址為255.255.255.255。網路上的所有支援TCP/IP的主機都會收到該DHCP Discovery報文,但是隻有DHCP Server會響應該報文。
如果網路中存在多個DHCP Server,則多個DHCP Server均會回覆該DHCP Discovery報文。
如果同一個vlan內沒有DHCP Server,而該VlanIf配置了DHCP Relay功能,則該Vlanif即為DHCP中繼,DHCP中繼會將該DHCP報文的源IP地址修改為該Vlanif的IP地址,而目的地址則為DHCP Relay配置的DHCP Server的IP地址。同時修改DHCP報文中,giaddress為VlanIf的IP地址。並以單播將DHCP Discovery傳送到DHCP Server端。

二、DHCP Server 提供階段:
DHCP Server提供階段,即為DHCP Server響應DHCP Discovery所發的DHCP Offer階段
DHCP Server收到DHCP Discovery報文後,解析該報文請求IP地址所屬的Subnet。並從dhcpd.conf檔案中與之匹配的subnet中取出一個可用的IP地址(從可用地址段選擇一個IP地址後,首先傳送ICMP報文來ping該IP地址,如果收到該IP地址的ICMP報文,則拋棄該IP地址,重新選擇IP地址繼續進行ICMP報文測試,直到找到一個網路中沒有人使用的IP地址,用以達到防治動態分配的IP地址與網路中其他裝置IP地址衝突,這個IP地址衝突檢測機制,可配置),設定在DHCP Discovery報文中yiaddress欄位中,表示為該客戶端分配的IP地址,並且為該Lease設定該Subnet配置的Option,例如預設leases租期,最大租期,router等資訊。
DHCP從地址池中選擇IP地址,以如下優先順序進行選擇:
    1)當前已經存在的Ip Mac的對應關係
    2)Client以前的IP地址
    3)讀取Discovery報文中的Requested Ip Address Option的值,如果存在並且IP地址可用
    4)從配置的Subnet中選擇IP地址:
DHCP Server解析DHCP Discovery請求的IP所屬的Subnet,首先看該DHCP Discovery報文中giaddress是否有DHCP Relay,如果有,則從giaddress所述的subnet中可用IP地址段中獲取,並分配IP。如果giaddress沒有IP地址,則從該DHCP Server繫結的介面的IP地址所屬的網段分配IP地址。

三、DHCP Client 選擇階段:
DHCP Client收到若干個DHCP Server響應的DHCP Offer報文後,選擇其中一個DHCP Server作為目標DHCP Server。選擇策略通常為選擇第一個響應的DHCP Offer報文所屬的DHCP Server。
然後以廣播方式回答一個DHCP Request報文,該報文中包含向目標DHCP請求的IP地址等資訊。之所以是以廣播方式發出的,是為了通知其他DHCP Server自己將選擇該DHCP Server所提供的IP地址。

四、DHCP Server確認階段:
當DHCP Server收到DHCP Client傳送的DHCP Request後,確認要為該DHCP Client提供的IP地址後,便想該DHCP Client響應一個包含該IP地址以及其他Option的報文,來告訴DHCP Client可以使用該IP地址了。然後DHCP Client即可以將該IP地址與網路卡繫結。另外其他DHCP Server都將收回自己之前為DHCP Client提供的IP地址。

五、DHCP Client重新登入網路:
當DHCP Client重新登入後,傳送一個以包含之前DHCP Server分配的IP地址資訊的DHCP Request報文,當DHCP Server收到該請求後,會嘗試讓DHCP客戶端繼續使用該IP地址。並回答一個ACK報文。
但是如果該IP地址無法再次分配給該DHCP Client後,DHCP回覆一個NAK報文,當DHCP Client收到該NAK報文後,會重新傳送DHCP Discovery報文來重新獲取IP地址。

六、DHCP Client更新租約:
DHCP獲取到的IP地址都有一個租約,租約過期後,DHCP Server將回收該IP地址,所以如果DHCP Client如果想繼續使用該IP地址,則必須更新器租約。更新的方式就是,噹噹前租約期限過了一半後,DHCP Client都會傳送DHCP Renew報文來續約租期。

linux下DHCP配置:
配置檔案都放在/etc/dhcp目錄下;主配置檔案為dhcpd.conf
將/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample檔案複製到配置檔案目錄下,並覆蓋dhcpd.conf檔案,即可獲得主配置檔案。

主配置檔案的主要內容介紹:
option domain-name "example.org";              //指定網域的域名
option domain-name-servers ns1.example.org, ns2.example.org;      //指定域名解析伺服器(DNS)的ip地址。
default-lease-time 600;         //預設租約時間,單位為s
max-lease-time 7200;         //最大租約時間,單位為s。過期續約,續約直接傳送request包即可。
log-facility local7;             //日誌裝置型別為local7.一般日誌裝置型別包括mail、crontab。通過此選項可以找到該服務的日誌記錄路徑
subnet 10.5.5.0 netmask 255.255.255.224 {              //指定分配網段的ip地址以及子網掩碼,括號內部為區域性配置。
range 10.5.5.26 10.5.5.30;           //可使用的地址池範圍
option domain-name-servers ns1.internal.example.org;          //該網段的域名,可以省略
option domain-name "internal.example.org";                 //網段DNS
option routers 10.5.5.1;                    //指定閘道器
option broadcast-address 10.5.5.31;               //指定廣播地址
default-lease-time 600;                                 //租約時間
max-lease-time 7200;                         //最大租約時間。
}
host passacaglia {                         //主機名稱
hardware ethernet 0:0:c0:5d:bd:95;               //主機的MAC地址
filename "vmunix.passacaglia";
server-name "toccata.fugue.com";                  //檔名和伺服器名,不太需要。
fixed-address fantasia.fugue.com;                  //固定的ip地址
}                      //保留主機,此選項用於指定內部存在的MAC地址的主機在請求ip時固定分配指定的地址。如果該指定ip已經被分配使用的話,保留主機的指定ip將不能使用。

一個區域網內最好只有一個dhcp伺服器,當一個區域網記憶體在多個伺服器時,客戶機只選擇最先到達的offer。

搞清楚下面幾個問題:
1)如何知道客戶機從哪個DNS Server獲得ip地址?
windows中直接檢視網路連結詳細資訊,有個dhcp伺服器,可以看到伺服器的ip地址。
linux下檢視/var/lib/dhclient/dhclient.leases,這是個租約檔案,伺服器端的租約檔案在/var/lib/dhcpd/dhcpd.leases。
2)伺服器分配ip的順序?
從小的ip開始分配
3)為何客戶機在獲得一個ip後,釋放再獲得ip時會獲得以前使用的ip?
客戶機內有一個租約檔案存放自己曾經獲得的ip地址,伺服器端也有一個租約檔案存放了自己已經分配的ip以及其對應的主機mac。
4)伺服器會在哪些埠提供dhcp服務?
預設在任何埠提供dhcp服務。實際上只是在與dhcp同一網段的網路卡上提供dhcp服務。
5)如果租約到期,而伺服器並沒有續約,該如何處理?
會向其他伺服器尋找dhcp服務

相關文章