我們一起談?wù)凞HCP協(xié)議
01DHCP協(xié)議簡介
DHCP(DynamicHost ConfigurationProtocol),動態(tài)主機配置協(xié)議,是一個應(yīng)用層協(xié)議,具體可以參考《TCP/IP四層模型》文章。當我們將客戶主機ip地址設(shè)置為動態(tài)獲取方式時,DHCP服務(wù)器就會根據(jù)DHCP協(xié)議給客戶端分配IP,使得客戶機能夠利用這個IP上網(wǎng)。
DHCP的幾個概念:
DHCPClient:DHCP客戶端,通過DHCP協(xié)議請求IP地址的客戶端。DHCP客戶端是接口級的概念,如果一個主機有多個以太接口,則該主機上的每個接口都可以配置成一個DHCP客戶端。交換機上每個Vlan接口也可以配置成一個DHCP客戶端。
DHCPServer:DHCP服務(wù)端,負責(zé)為DHCP客戶端提供IP地址,并且負責(zé)管理分配的IP地址。
DHCPRelay:DHCP中繼器,DHCP客戶端跨網(wǎng)段申請IP地址的時候,實現(xiàn)DHCP報文的轉(zhuǎn)發(fā)功能。
DHCPSecurity:DHCP安全特性,實現(xiàn)合法用戶IP地址表的管理功能。
DHCPSnooping:DHCP監(jiān)聽,記錄通過二層設(shè)備申請到IP地址的用戶信息。
02DHCP工作原理
DHCP使用UDP協(xié)議工作,采用67(DHCP服務(wù)器端)和68(DHCP客戶端)兩個端口號。546號端口用于DHCPv6Client,而不用于DHCPv4,是為DHCPfailover服務(wù)。DHCP客戶端向DHCP服務(wù)器發(fā)送的報文稱之為DHCP請求報文,而DHCP服務(wù)器向DHCP客戶端發(fā)送的報文稱之為DHCP應(yīng)答報文。
DHCP交互過程共分為4步
第一步
Client端在局域網(wǎng)內(nèi)發(fā)起一個DHCP Discover包,目的是想發(fā)現(xiàn)能夠給它提供IP的DHCPServer。
第二步
可用的DHCPServer接收到Discover包之后,通過發(fā)送DHCPOffer包給予Client端應(yīng)答,意在告訴Client端它可以提供IP地址。
第三步
Client端接收到Offer包之后,發(fā)送DHCPRequest包請求分配IP。
第四步
DHCPServer發(fā)送ACK數(shù)據(jù)包,確認信息。
03Wireshark抓包分析
要想抓取到DHCP包,先要保證有可用的DHCP服務(wù)器,然后將主機IP地址獲取方式設(shè)置為自動獲取。我們的測試環(huán)境是,筆記本設(shè)置為DHCP模式,路由開啟DHCP服務(wù)。由于筆記本在開機時想路由DHCP去獲取IP,開機時無法迅速打開wireshark軟件進行抓包,我們使用以下命令先斷開主機的網(wǎng)絡(luò)連接,然后再連接網(wǎng)絡(luò)。
- ipconfig /release
- ipconfig /renew
在cmd中可以使用ipconfig/?查看各參數(shù)的含義:
命令詳解:
(1)ipconfig /release
斷開當前的網(wǎng)絡(luò)連接,主機IP變?yōu)?.0.0.0,主機與網(wǎng)絡(luò)斷開,不能訪問網(wǎng)絡(luò)。
(2)ipconfig /renew
更新適配器信息,請求連接網(wǎng)絡(luò),這條命令結(jié)束之后,主機會獲得一個可用的IP,再次接入網(wǎng)絡(luò)。
抓取的數(shù)據(jù)包如下,注意使用dhcp過濾條件。
wireshark抓包文件
鏈接:https://pan.baidu.com/s/1RzvISOkzkVoWOzJDRi5NwQ
提取碼:lpg9
(提示:公眾號不支持外鏈接,請復(fù)制鏈接到瀏覽器下載)
可以清楚看到DHCP的四個步驟。
DHCP Discover數(shù)據(jù)包
在Discover階段,可以看出客戶端發(fā)出的是廣播復(fù)制,MAC地址廣播相關(guān)內(nèi)容請看《802.3以太網(wǎng)幀》,IP地址廣播相關(guān)內(nèi)容請看《IP協(xié)議詳解》。從下圖也可以看出DHCP是基于UDP協(xié)議的,采用67(DHCP服務(wù)器端)和68(DHCP客戶端)兩個端口號,這個上文講過了,在抓包文件中證實了。DHCP報文格式基于BOOTP的報文格式,DHCP具體的報文格式并不是本文重點,本文并不會詳細講解DHCP報文中每個字節(jié)的含義。
DHCP Offer包
當DHCP服務(wù)器收到一條DHCPDiscover數(shù)據(jù)包時,用一個DHCPOfferr包給予客戶端響應(yīng)。 這一數(shù)據(jù)報中客戶客戶端獲取到了最重要的IP地址信息。除此之外,服務(wù)器還發(fā)送了子網(wǎng)掩碼,路由器,DNS,域名,IP地址租用期等信息。
DHCP服務(wù)器仍然使用廣播地址作為目的地址,因為此時請求分配IP的Client并沒有自己ip,而可能有多個Client在使用0.0.0.0這個IP作為源IP向DHCP服務(wù)器發(fā)出IP分配請求,DHCP也不能使用0.0.0.0這個IP作為目的IP地址,于是依然采用廣播的方式,告訴正在請求的Client們,這是一臺可以使用的DHCP服務(wù)器。
DHCP Request包
當Client收到了DHCPOffer包以后(如果有多個可用的DHCP服務(wù)器,那么可能會收到多個DHCPOffer包),確認有可以和它交互的DHCP服務(wù)器存在,于是Client發(fā)送Request數(shù)據(jù)包,請求分配IP。
此時的源IP和目的IP依然是0.0.0.0和255.255.255.255。
DHCP ACK包
服務(wù)器用DHCPACK包對DHCP請求進行響應(yīng)。
04DHCP缺點
DHCP可以很好的進行IP地址的分配,但是DHCP協(xié)議已存在一些缺點,如:
1、DHCP協(xié)議不支持跨網(wǎng)段進行地址分配
2、DHCP協(xié)議不能獲取非DHCP客戶端的IP地址,在地址池設(shè)置不合理的情況下可能會造成地址沖突。
基于上述的缺陷,我們需要合理對IP地址池進行設(shè)置,并預(yù)留一些IP地址,分配給需要固定IP的服務(wù)器。
本文轉(zhuǎn)載自微信公眾號「 知曉編程」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系 知曉編程公眾號。