圖解DHCP工程抓包的過程
對于DHCP的學習,我們已經(jīng)開展了一段時間了。那么這里我們就來講解一下DHCP工程抓包的一些內(nèi)容。這里我們主要DHCP (Dynamic Host Configuration Protocol)是一種動態(tài)的向Internet終端提供配置參數(shù)的協(xié)議。在終端提出申請之后,DHCP可以向終端提供IP地址、網(wǎng)關(guān)、DNS服務(wù)器地址等。
它的工作過程是這樣的:
1,首先要DHCP discover??蛻魴C(drcom)在本網(wǎng)段內(nèi)廣播DHCPdiscover報文以發(fā)現(xiàn)網(wǎng)絡(luò)中的DHCP服務(wù)器(T64G),DHCP Relay可將此報文廣播到其他的網(wǎng)段。
如果client不是***次登陸網(wǎng)絡(luò),他會把他上次使用過的ip封裝在option50(windows xp中),如果該地址未被分配,那么DHCP server必須優(yōu)先為client分配該地址。
2,當 DHCP server監(jiān)聽到客戶端發(fā)出的 DHCP discover 廣播后,它會從那些還沒有租出的地址范圍內(nèi),選擇最前面的空置 IP ,連同其它 TCP/IP 設(shè)定,響應(yīng)給client一個 DHCP offer 的報文。
此時DHCP server還會ping一下這個預分配的地址以確保這個地址沒有被使用。否則會更換另外的地址給client。在這個DHCP offer中還會包含其它的TCP/IP的設(shè)定,不過對于這些設(shè)定是否使用由 client決定。(192.168.131.254為DHCP網(wǎng)關(guān)地址)
3,如果收到多個DHCPoffer報文,DHCPclient會根據(jù)報文的內(nèi)容從其中選擇一個給與響應(yīng)。此時client還會發(fā)送一個免費arp報文再一次檢查網(wǎng)絡(luò)中是否有沖突的地址,
如果有沖突就發(fā)送一個DHCP decline報文拒絕DHCP server,并且重新開始DHCP進程。否則就發(fā)送一個DHCP request報文給DHCP server來確認接受該ip地址。
4,當 DHCP server接收到client的 DHCP request 之后,會向客戶端發(fā)出一個 DHCPack 響應(yīng),以確認 IP 租約的正式生效。
這時client會進行***一次免費arp檢查,如果沒有沖突,也就結(jié)束了一個完整的 DHCP 工作過程。
在了解DHCP工程抓包之前,我們再來分析一下以下內(nèi)容。如果DHCP server不能滿足DHCP request報文的要求就必須發(fā)送一個DHCP nak報文使client重新DHCP進程。一旦client從DHCP server處取得lease,在lease到期50%前都可以使用,當lease到了87.5%時client使用DHCP request報文來續(xù)約,DHCP server則用DHCP ack報文來確認。如果沒有收到DHCP server的ack報文,client在lease到期85%時必須再次使用DHCP request報文來續(xù)約,DHCP server則用DHCP ack來確認,否則client必須放棄該ip地址。而client想要退約時直接使用DHCP release報文通知DHCP server,DHCP server回收該地址以備下次使用。因此如果租約時間設(shè)置太短,client將會頻繁想DHCP server續(xù)約,當DHCP server來不及響應(yīng)client的續(xù)約請求后就會因為地址老化而需要重新進行DHCP 地址請求過程,從而出現(xiàn)網(wǎng)絡(luò)中斷,關(guān)于租約時間太短而出現(xiàn)的網(wǎng)絡(luò)中斷問題請參考我的報告。#p#
通過上面的分析我們發(fā)現(xiàn)DHCP過程中的報文幾乎全是廣播包,只能在同一個網(wǎng)段中傳播,但是如果網(wǎng)絡(luò)中劃分了數(shù)個vlan呢?有兩種解決方法:
1, 在每個vlan中安裝一臺DHCP server,這種方法適合在特別大型的網(wǎng)絡(luò)中使用。
2, 只安裝一臺DHCP server,通過使用DHCP relay來中繼DHCP報文。
DHCP relay原理:
DHCP Relay 為在DHCP Server 和DHCP Client 間傳輸DHCP 報文的設(shè)備。局域網(wǎng)內(nèi)的Client 可以通過DHCP Relay 與其他子網(wǎng)的DHCP Server 通信,最終取得合法的IP 地址。這樣,多個網(wǎng)絡(luò)上的DHCP Client 可以使用同一個DHCP Server,既節(jié)省了成本,又便于進行集中管理。以下是DHCP relay的工作過程。
Client 和Relay 間的所有報文,從初始狀態(tài)獲取IP 地址時,discover和request都是廣播的,offer 和ack 根據(jù)請求報文中的廣播標志位來決定廣播還是單播,如果請求標注位為廣播,則offer 和ack 就是廣播的,否則就是單播的。所以不能說一定就是廣播的。到達50%lease 續(xù)租時,request 和ack 都是單播的。使用DHCP Relay 進行地址申請時的步驟與直接進行地址申請的步驟類似,只是Relay 路由器收到Client 的請求報文后,將收到該報文的接口的地址填入該報文,然后進行單播轉(zhuǎn)發(fā)。Server 根據(jù)該接口的地址來確定分配給Client 地址的網(wǎng)段,即分配的IP 地址與Relay 路由器收到請求報文的接口的地址屬同一網(wǎng)段。當收到來自Server 單播的DHCPoffer、DHCPack 或DHCPnak 報文時,DHCPRelay 路由器將會對Client 進行單播傳送報文。當DHCP Client 啟動并進行DHCP 初始化時,它在本地網(wǎng)絡(luò)廣播配置請求報文。如果本地網(wǎng)絡(luò)存在DHCP Server,則可以直接進行DHCP 配置,不需要DHCP Relay。如果本地網(wǎng)絡(luò)沒有DHCP Server,但有DHCP Relay 設(shè)備,此設(shè)備收到該廣播報文后,進行適當處理,即將收到報文的接口的地址填入該報文,并單播轉(zhuǎn)發(fā)給指定的、其它物理子網(wǎng)的DHCP Server。DHCP Server 根據(jù)Client 提供的信息進行相應(yīng)的配置,并通過DHCPRelay 將配置信息發(fā)送給Client,完成對Client 的動態(tài)配置。
為了更好的學習DHCP relay我構(gòu)建了如下試驗拓撲:
如上所示,ROUTER上架設(shè)了DHCP server,地址是192.168.2.1它有兩個地址池分別是
- ip dhcp server pool fox1
- network 192.168.1.0 255.255.255.0
- default-router 192.168.1.1
- ip dhcp server pool fox2
- network 192.168.3.0 255.255.255.0
- default-router 192.168.3.1
在SW上有兩個用戶vlan,分別是vlan10 和vlan30,SW(三層交換機)上,地址分別是192.168.1.5和 192.168.3.5 。用SW作DHCP relay#p#
DHCP工程抓包如下:
1,尋找DHCP server,vlan30 client端報文如下:
server端報文如下:
2,DHCP server發(fā)送offer給客戶端
vlan30 client截包如下:
DHCP server截包如下:
3,client端決定接受該ip地址,響應(yīng)了DHCP server
client端截包如下:
DHCP server端截包如下:
4,DHCP server確認了client端的響應(yīng),正式完成了整個DHCP過程。
client端截包如下:
DHCP server端截包如下:
整個DHCP工程抓包過程完成了,如上lease是24hours。
當vlan30的用戶漫游至vlan10時會被分配到vlan10相對應(yīng)的地址。截包如下: