DHCP報文格式
報文格式
DHCP報文是承載於UDP上的高層協議報文,采用67(DHCP服務器)和68(DHCP客戶端)兩個端口號。
DHCP的報文格式如下圖所示。
圖1 DHCP報文格式
DHCP報文中各字段的含義:
字段 |
長度 |
含義 |
OP |
1字節 |
表示報文的類型:
|
htype |
1字節 |
表示硬件地址的類型。對於以太網,該類型的值為“1”。 |
hlen |
1字節 |
表示硬件地址的長度,單位是字節。對於以太網,該值為6。 |
Hops |
1字節 |
跳數。客戶端設置為0,也能被一個代理服務器設置。 |
xid |
4字節 |
事務ID,由客戶端選擇的一個隨機數,被服務器和客戶端用來在它們之間交流請求和響應,客戶端用它對請求和應答進行匹配。該ID由客戶端設置並由服務器返回,為32位整數。 |
secs |
2字節 |
由客戶端填充,表示從客戶端開始獲得IP地址或IP地址續借后所使用了的秒數。 |
flags |
2字節 |
此字段在BOOTP中保留未用,在DHCP中表示標志字段。 圖2 Flags字段格式
只有標志字段的最高位才有意義,其余的位均被置為0。 最左邊的字段被解釋為廣播響應標志位,內容如下所示:
|
ciaddr |
4字節 |
客戶端的IP地址。只有客戶端是Bound、Renew、Rebinding狀態,並且能響應ARP請求時,才能被填充。 |
yiaddr |
4字節 |
"你自己的"或客戶端的IP地址。 |
siaddr |
4字節 |
表明DHCP協議流程的下一個階段要使用的服務器的IP地址。 |
giaddr |
4字節 |
該字段表示第一個DHCP中繼的IP地址(注意:不是地址池中定義的網關)。當客戶端發出DHCP請求時,如果服務器和客戶端不在同一個網絡中,那么第一個DHCP中繼在轉發這個DHCP請求報文時會把自己的IP地址填入此字段。服務器會根據此字段來判斷出網段地址,從而選擇為用戶分配地址的地址池。服務器還會根據此地址將響應報文發送給此DHCP中繼,再由DHCP中繼將此報文轉發給客戶端。 若在到達DHCP服務器前經過了不止一個DHCP中繼,那么第一個DHCP中繼后的中繼不會改變此字段,只是把Hops的數目加1。 |
chaddr |
16字節 |
該字段表示客戶端的MAC地址,此字段與前面的“Hardware Type”和“Hardware Length”保持一致。當客戶端發出DHCP請求時,將自己的硬件地址填入此字段。對於以太網,當“Hardware Type”和“Hardware Length”分別為“1”和“6”時,此字段必須填入6字節的以太網MAC地址。 |
sname |
64字節 |
該字段表示客戶端獲取配置信息的服務器名字。此字段由DHCP Server填寫,是可選的。如果填寫,必須是一個以0結尾的字符串。 |
file |
128字節 |
該字段表示客戶端的啟動配置文件名。此字段由DHCP Server填寫,是可選的,如果填寫,必須是一個以0結尾的字符串。 |
options |
可變 |
該字段表示DHCP的選項字段,至少為312字節,格式為"代碼+長度+數據"。DHCP通過此字段包含了服務器分配給終端的配置信息,如網關IP地址,DNS服務器的IP地址,客戶端可以使用IP地址的有效租期等信息。 |
DHCP Options
Option id |
長度(字節) |
描述 |
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:
|
54 |
4 |
DHCP Server Identifier |
60 |
n |
華為自定義:可配置該終端設備在發起DHCP請求時,通過Option 60攜帶域信息。收到DHCP報文時,可根據Option 60中攜帶的域信息來分配IP地址。 |
82 |
n |
華為自定義:作為DHCP Relay,在中繼用戶DHCP報文時,可在Option 82中填寫用戶的物理位置信息,通知DHCP服務器按物理位置信息對為用戶分配IP地址。 |
報文示例
圖3 DHCP報文格式(discover階段)
圖4 DHCP報文格式(offer階段)
圖5 DHCP報文格式(request階段)
圖6 DHCP報文格式(ACK階段)