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