1.dhcp共有八種報文,不同報文之間的區別除了dhcp資料報本身之外,在封包上(udp頭,ip頭、鏈路層頭)也有一些差別
1)dhcp discover
dhcp客戶端請求位址時,並不知道dhcp伺服器的位置,因此dhcp客戶端會在本地網路內以廣播方式傳送請求報文,這個報文成為discover報文,目的是發現網路中的dhcp伺服器,所有收到discover報文的dhcp伺服器都會傳送回應報文,dhcp客戶端據此可以知道網路中存在的dhcp伺服器的位置。
2)dhcp offer
dhcp伺服器收到discover報文後,就會在所配置的位址池中查詢乙個合適的ip位址,加上相應的租約期限和其他配置資訊(如閘道器、dns伺服器等),構造乙個offer報文,傳送給使用者(可以廣播、也可以單播),告知使用者本伺服器可以為其提供ip位址。(注意,只是告訴client可以提供,是預分配,還需要client通過arp檢測該ip是否重複)
3)dhcp request
客戶端會在兩種情況下傳送dhcp request
a)dhcp客戶端可能會收到來自dhcp伺服器的很多offer,所以必須在這些回應中選擇乙個。client通常選擇第乙個回應offer報文的伺服器作為自己的目標伺服器,並回應乙個廣播request報文,通告選擇的伺服器。注意,"client通常選擇第乙個回應offer報文的伺服器作為自己的目標伺服器"這裡存在乙個安全問題,如果我們的偽dhcp伺服器能比原始dhcp伺服器先傳送offer資料報,就能達到欺騙的目的,從而劫持目標使用者的流量
b)獲取dhcp客戶端成功獲取ip位址後,在位址使用租期過去1/2時,會向dhcp伺服器傳送單播request報文續延租期,如果沒有收到dhcp ack報文,在租期過去3/4時,會再次傳送廣播request報文續延租期。
4)dhcp ack
dhcp伺服器收到request報文後,根據request報文中攜帶的使用者mac來查詢有沒有相應的租約記錄(即之前的預分配過程中登記的那個mac),如果有則傳送ack報文作為回應,通知使用者可以使用分配的ip位址。
5) dhcp nak
如果dhcp伺服器收到request報文後,沒有發現有相應的租約記錄或者由於某些原因無法正常分配ip位址,則傳送nak報文作為回應,通知使用者無法分配合適的ip位址。
6)dhcp release
當使用者不再需要使用分配ip位址時,就會"主動"向dhcp伺服器傳送release報文,告知伺服器使用者不再需要分配ip位址,dhcp伺服器會釋放被繫結的租約(在資料庫中清除某個mac對某個ip的租約記錄,這樣,這個ip就可以分配給下乙個請求租約的mac)
7. dhcp decline
dhcp客戶端收到dhcp伺服器回應的ack報文後,通過位址衝突檢測發現伺服器分配的位址衝突或者由於其他原因導致不能使用,則傳送decline報文,通知伺服器所分配的ip位址不可用,我們在手工設定靜態ip、或者dhcp分配中有時會遇到"檢測到ip衝突"的提示就是因為客戶端利用arp機制來在當前內網中確認當前指定的ip是否已經被占用
8)dhcp inform
dhcp客戶端如果需要從dhcp伺服器端獲取更為詳細的配置資訊,則傳送inform報文向伺服器進行請求,伺服器收到該報文後,將根據租約進行查詢,找到相應的配置資訊後,傳送ack報文回應dhcp客戶端。
2. dhcp協議資料報幀
學習dhcp協議不能單純學習協議本身,還必須連帶了解它的封包結構,之所以這麼說,是因為dhcp是乙個特殊的"服務發現"型別的協議,它用於客戶端"獲取某種資源",所以它的封包格式具有一定的特殊性
鏈路層頭
ip頭udp頭
dhcp報文
其中:1. 鏈路層頭: 承載報文的鏈路層資訊頭,常見的有ethernet_ii格式、802.1q格式、 ieee802.3格式、令牌環鏈路層頭格式等。
2. ip頭: 標準的ip協議頭,ipv4中長度為20bytes,包括了srcip,dstip等資訊。
3. udp頭: 8bytes,包括了srcport,dstport,報文長度及udp校驗和等資訊。
4. dhcp報文:具體的dhcp報文內容。
3.dhcp協議使用的埠
1)udp67: dhcp server服務埠
2)udp68: dhcp client服務埠
3)udp546: 用於dhcpv6 client,而不用於dhcpv4,是為dhcp failover服務,這是需要特別開啟的服務,dhcp failover是用來做"雙機熱備"的
4.dhcp協議報文格式
1.1) client傳送給server的封包,設為1
1.2) server傳送給client的封包,設為2
2. htype: 硬體類別
2.1) 1表示10mb/s的乙太網(ethernet)的硬體位址
3. hlen: 硬體位址長度、
3.1) ethernet為6(位元組)
4. hops: 跳數,若封包需經過router傳送,每站加 1,若在同一網內,為0(客戶端的初始設定為0)
5. xid: transaction id(事務id),dhcp request 時產生的數值,伺服器和客戶端用來在它們之間交流請求和響應,客戶端用它對請求和應答進行匹配。該id由客戶端設定並由伺服器返回,為32位整數。以作 dhcpreply 時的依據
5. seconds: 由客戶端填充,表示從客戶端開始獲得ip位址或ip位址續借後所使用了的秒數
6. flags:
從0到15共16 bits
6.1) 最左1bit為1時表示 server將以廣播方式傳送封包給client
6.2) 最左1bit為0時表示 server將以單播方式傳送封包給client
其餘尚未使用。
7. ciaddr:
客戶端的ip位址。只有客戶端是bound、renew、rebinding狀態,並且能響應arp請求時,才能被填充。即要是 client 端想繼續使用之前取得的ip位址,則這個欄位會被填充
8. yiaddr: 從server送回client的dhcp offer與dhcpack封包中,此欄填寫分配給client的ip位址。
9. siaddr:
10. giaddr:若需跨網域進行dhcp獲取,此欄為 relay agent的位址,否則為0
11. chaddr:
客戶端硬體位址。客戶端必須設定它的"chaddr"字段。udp資料報中的乙太網幀首部也有該字段,但通常通過檢視udp資料報來確定乙太網幀首部中的該字段獲取該值比較困難或者說不可能,而在udp協議承載的dhcp報文中設定該欄位,使用者程序就可以很容易地獲取該值。
12. sname:
server的名稱字串,由dhcp伺服器填寫,以0x00結尾。
13. file:
啟動檔名,是乙個空結尾的字串。dhcp discover報文中是"generic"名字或空字元,dhcp offer報文中提供有效的目錄路徑全名。
14. options:
允許廠商定議選項(vendor-specific area),以提供更多的設定資訊。
格式為code(佔1位元組)+len(佔1位元組)+value(長度由len而定)
1) 1、4、subnet mask
2) 3、n*4、router(閘道器)
3) 6、n*4、dns server
4) 7、n*4、log server
5) 26、2、inte***ce mtu
6) 33、n*8、static route
7) 35、4、arp cache timeout
8) 42、n*4、ntp servers
9) 51、4、ip address lease time
10) 53、1、message type
10.1) 1: dhcpdiscover
10.2) 2: dhcpoffer
10.3) 3: dhcprequest
10.4) 4: dhcpdecline
10.5) 5: dhcpack
10.6) 6: dhcpnak
10.7) 7: dhcprelease
10.8) 8: dhcpinform
11) 5、4、dhcp server identifier
12) 60、n、華為自定義: 可配置該終端裝置在發起dhcp請求時,通過option 60攜帶域資訊。me60收到dhcp報文時,可根據option 60中攜帶的域資訊來分配ip位址。
原理總結 DHCP資料報分析
協議分析 dhcp協議解碼詳解 dhcp,全稱是 dynamic host configuration protocol 中文名為動態主機配置協議,它的前身是 bootp,它工作在osi的應用層,是一種幫助計算機從指定的dhcp伺服器獲取它們的配置資訊的自舉協議。dhcp使用客戶端 伺服器模式,請求...
DHCP中繼資料報網際網路周遊記
一.概述 二層不少實驗用gns無法模擬,iou大部分只有命令無法看到效果,好不容易有機會登入機架做實驗,做了 dhcp snooping實驗,發現思科路由器如果作為dhcp伺服器,必須配置 ipdhcp relay information trusted 否則客戶端無法獲取ip位址,如是想dhcp伺...
DHCP中繼資料報網際網路周遊記
一.概述 二層不少實驗用gns無法模擬,iou大部分只有命令無法看到效果,好不容易有機會登入機架做實驗,做了 dhcp snooping實驗,發現思科路由器如果作為dhcp伺服器,必須配置 ipdhcp relay information trusted 否則客戶端無法獲取ip位址,如是想dhcp伺...