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