目錄
一、DHCP協議概述
DHCP協議採用UDP作爲傳輸協議,主機發送請求消息到DHCP服務器的67號端口,DHCP服務器迴應應答消息給主機的68號端口。詳細的交互過程如下圖。
-
DHCP Client以廣播的方式發出DHCP Discover報文。
-
所有的DHCP Server都能夠接收到DHCP Client發送的DHCP Discover報文,所有的DHCP Server都會給出響應,向DHCP Client發送一個DHCP Offer報文。
DHCP Offer報文中“Your(Client) IP Address”字段就是DHCP Server能夠提供給DHCP Client使用的IP地址,且DHCP Server會將自己的IP地址放在“option”字段中以便DHCP Client區分不同的DHCP Server。DHCP Server在發出此報文後會存在一個已分配IP地址的紀錄。
-
DHCP Client只能處理其中的一個DHCP Offer報文,一般的原則是DHCP Client處理最先收到的DHCP Offer報文。
DHCP Client會發出一個廣播的DHCP Request報文,在選項字段中會加入選中的DHCP Server的IP地址和需要的IP地址。
-
DHCP Server收到DHCP Request報文後,判斷選項字段中的IP地址是否與自己的地址相同。如果不相同,DHCP Server不做任何處理只清除相應IP地址分配記錄;如果相同,DHCP Server就會向DHCP Client響應一個DHCP ACK報文,並在選項字段中增加IP地址的使用租期信息。
-
DHCP Client接收到DHCP ACK報文後,檢查DHCP Server分配的IP地址是否能夠使用。如果可以使用,則DHCP Client成功獲得IP地址並根據IP地址使用租期自動啓動續延過程;如果DHCP Client發現分配的IP地址已經被使用,則DHCP Client向DHCPServer發出DHCP Decline報文,通知DHCP Server禁用這個IP地址,然後DHCP Client開始新的地址申請過程。
-
DHCP Client在成功獲取IP地址後,隨時可以通過發送DHCP Release報文釋放自己的IP地址,DHCP Server收到DHCP Release報文後,會回收相應的IP地址並重新分配。
在使用租期超過50%時刻處,DHCP Client會以單播形式向DHCP Server發送DHCPRequest報文來續租IP地址。如果DHCP Client成功收到DHCP Server發送的DHCP ACK報文,則按相應時間延長IP地址租期;如果沒有收到DHCP Server發送的DHCP ACK報文,則DHCP Client繼續使用這個IP地址。
在使用租期超過87.5%時刻處,DHCP Client會以廣播形式向DHCP Server發送DHCPRequest報文來續租IP地址。如果DHCP Client成功收到DHCP Server發送的DHCP ACK報文,則按相應時間延長IP地址租期;如果沒有收到DHCP Server發送的DHCP ACK報文,則DHCP Client繼續使用這個IP地址,直到IP地址使用租期到期時,DHCP Client纔會向DHCP Server發送DHCP Release報文來釋放這個IP地址,並開始新的IP地址申請過程。
需要說明的是:DHCP客戶端可以接收到多個DHCP服務器的DHCP OFFER數據包,然後可能接受任何一個DHCP OFFER數據包,但客戶端通常只接受收到的第一個DHCP OFFER數據包。另外,DHCP服務器DHCP OFFER中指定[1] 的地址不一定爲最終分配的地址,通常情況下,DHCP服務器會保留該地址直到客戶端發出正式請求。
正式請求DHCP服務器分配地址DHCP REQUEST採用廣播包,是爲了讓其它所有發送DHCP OFFER數據包的DHCP服務器也能夠接收到該數據包,然後釋放已經OFFER(預分配)給客戶端的IP地址。
如果發送給DHCP客戶端的地址已經被其他DHCP客戶端使用,客戶端會向服務器發送DHCPDECLINE信息包拒絕接受已經分配的地址信息。
在協商過程中,如果DHCP客戶端發送的REQUEST消息中的地址信息不正確,如客戶端已經遷移到新的子網或者租約已經過期,DHCP服務器會發送DHCP NAK消息給DHCP客戶 端,讓客戶端重新發起地址請求過程。
二、dhcp數據幀格式
0 8 16 24 31
OP(1) |
HTYPE(1) |
HLEN(1) |
HOPS(跳數)(1) |
事務ID(4)[Transaction ID] |
|||
秒數(2)[Second] |
標誌(2)[Flag] |
||
客戶機IP地址(4)[Ciaddr] |
|||
你的IP地址(4)[Yiaddr] |
|||
服務器IP地址(4)[Siaddr] |
|||
中繼代理IP地址(4)[Giaddr] |
|||
客戶機硬件地址(16字節)[Chaddr] |
|||
服務器的主機名(64字節)[Sname] |
|||
啓動文件名(128字節)[File] |
|||
選項(可變長)[Options] |
OP:若是client送給server的封包,設置爲1,反方向爲2
Htype:硬件類別,ethernet 爲1
Hlen:硬件長度,ethernet爲6
Hops:若數據包需經過router發送,每站加1,若在同一網內,爲0
Transaction ID:事務ID 是個隨機數,用於客戶和服務器之間匹配請求和相應信息
Seconds:由用戶指定的時間,指開始地址獲取和更新進行後的時間
Flags:從0—15bits,最左一bit爲1時表示server將以廣播方式傳遞封包給client,其餘尚未使用
Ciaddr:用戶IP地址
Siaddr:用於bootsrtap過程中的IP地址(服務器的IP地址)
Chaddr:client的硬件地址
Sname:可選server的名稱,以0x00結尾
File:啓動文件名
Options:廠商標識,可選的參數字段
DHCP Options
Option id |
Length(字節) |
描述 |
1 |
4 |
Subnet Mask |
3 |
n*4 |
Router(網關) |
6 |
n*4 |
DNS Server |
7 |
n*4 |
Log Server |
26 |
2 |
Interface MTU |
33 |
n*8 |
Static route |
35 |
4 |
ARP cache timeout |
42 |
n*4 |
NTP servers |
51 |
4 |
IP address lease time |
53 |
1 |
Message type 1-DHCPDISCOVER 2-DHCPOFFER 3-DHCPREQUEST 4-DHCPDECLINE 5-DHCPACK 6-DHCPNAK 7-DHCPRELEASE 8-DHCPINFORM |
54 |
4 |
DHCP Server Identifier |
60 |
n |
華爲自定義:可配置該終端設備在發起DHCP請求時,通過Option 60攜帶域信息。ME60收到DHCP報文時,可根據Option 60中攜帶的域信息來分配IP地址。 |
82 |
n |
華爲自定義:ME60作爲DHCP Relay,在中繼用戶DHCP報文時,可在Option 82中填寫用戶的物理位置信息,通知DHCP服務器按物理位置信息對爲用戶分配IP地址。 |
三、dhcp數據抓包
(1)DHCP discover階段:
(2)DHCP offer階段:
(3)DHCP request階段:
(4)DHCP ack階段:
四、總結:
階段 |
源MAC |
目標MAC |
源IP |
目標IP |
Discover |
PC機的MAC |
全FF |
0.0.0.0 |
255.255.255.255 |
Offer |
Dhcp服務器或者中繼器路由的MAC |
Dhcp客戶機的MAC |
Dhcp服務器或者中繼路由器的IP地址 |
準備分配的IP地址 |
Request |
PC機的MAC |
全FF |
0.0.0.0 |
255.255.255.255 |
Ack |
Dhcp服務器或者中繼器路由的MAC |
Dhcp客戶機的MAC |
Dhcp服務器或者中繼路由器的IP地址 |
準備分配的IP地址 |
DHCPTransaction ID是由客戶機產生一個隨機數獲得,不同MAC地址產生的Transaction ID不同,Transaction ID是區分不同DHCP請求的標識。