轉載:https://blog.csdn.net/lm409/article/details/80298225
1.DHCP簡介
DHCP(Dynamic Host Configuration Protocol,動態主機配置協議),是一個應用層協議,通常被應用在大型的局域網絡環境中,主要作用是集中的管理、分配IP地址,使網絡環境中的主機動態的獲得IP地址、Gateway地址、DNS服務器地址等信息,並能夠提升地址的使用率。
DHCP協議采用客戶端/服務器模型,主機地址的動態分配任務由網絡主機驅動。當DHCP服務器接收到來自網絡主機申請地址的信息時,才會向網絡主機發送相關的地址配置等信息,以實現網絡主機地址信息的動態配置。
2.DHCP工作流程
2.1 DHCP Client發現階段
DHCP客戶機尋找DHCP服務器的階段。DHCP客戶機以廣播方式(因為DHCP服務器的IP地址對於客戶機來說是未知的)發送 DHCP discover發現信息來尋找DHCP服務器,源地址為0.0.0.0目的地址為255.255.255.255。網絡上每一台安裝了TCP/IP協議的主機 都會接收到這種廣播信息,但只有DHCP服務器才會做出響應。
2.2 DHCP Server提供階段
DHCP服務器提供IP地址的階段。在網絡中接收到DHCP discover發現信息的DHCP服務器都會做出響應,它從尚未出租的IP地址中挑選一個分配給DHCP客戶機,向DHCP客戶機發送一個包含出租的 IP地址和其他設置的DHCP offer信息。
2.3 DHCP Client選擇階段
DHCP客戶機選擇某台DHCP服務器提供的IP地址的階段。如果有多台DHCP服務器向DHCP客戶機發來的DHCP offer提供信息,則DHCP客戶機只接受第一個收到的DHCP offer提供信息,然后它就以廣播方式回答一個DHCP request請求信息,該信息中包含向它所選定的DHCP服務器請求IP地址的內容。之所以要以廣播方式回答,是為了通知所有的DHCP服務器,他將選擇某台DHCP服務器所提供的IP地址。
2.4 DHCP Server確認階段
DHCP服務器確認所提供的IP地址的階段。當DHCP服務器收到DHCP客戶機回答的DHCP request請求信息之后,它便向DHCP客戶機發送一個包含它所提供的IP地址和其他設置的DHCP ack確認信息,告訴DHCP客戶機可以使用它所提供的IP地址。然后DHCP客戶機便將其TCP/IP協議與網卡綁定。
另外,除DHCP客戶機選中的服務器外,其他的DHCP服務器都將收回之前為其提供的IP地址。
2.5 DHCP Client重新登錄
以后DHCP客戶機每次重新登錄網絡時,就不需要再發送DHCP discover發現信息了,而是直接發送包含前一次所分配的IP地址的DHCP request請求信息。當DHCP服務器收到這一信息后,它會嘗試讓DHCP客戶機繼續使用原來的IP地址,並回答一個DHCP ack確認信息。如果此IP地址已無法再分配給原來的DHCP客戶機使用時(比如此IP地址已分配給其它DHCP客戶機使用),則DHCP服務器給 DHCP客戶機回答一個DHCP nack否認信息。當原來的DHCP客戶機收到此DHCP nack否認信息后,它就必須重新發送DHCP discover發現信息來請求新的IP地址。
2.6 DHCP Client更新租約
DHCP服務器向DHCP客戶機出租的IP地址一般都有一個租借期限,期滿后DHCP服務器便會收回出租的IP地址。如果DHCP客戶 機要延長其IP租約,則必須更新其IP租約。DHCP客戶機啟動時和IP租約期限過一半時,DHCP客戶機都會自動向DHCP服務器發送更新其IP租約的 信息。
3.DHCP報文
3.1 報文內容
Op: 報文類型,分為 兩大類: Request(1) 和 Reply(2)
HW Type: 硬件類型,一般是以太網:1
HW Len: 硬件地址長度,單位字節。對應以太網:6(mac地址長度為6字節48bit)
Transaction ID:事務ID,隨機數,有客戶端生成,服務器Reply時,會把Request中的Transaction拷貝到Reply報文中。
Secs: 距離第一次發射IP請求或Renew請求過去的秒數
Flags:標志位,目前僅第一個bit有使用,置1 標明廣播
Client IP Address:當前客戶端的IP地址,如果當前客戶端沒有IP地址,則置0
Your IP Address: 服務器想客戶端提供IP地址時,會把IP地址填入本字段
(Next)Server IP Address:客戶端引導時需要的另一個服務器的IP地址
Gateway (Relay) IP Address: 網關(中繼)IP地址,有DHCP 中繼器在轉發DHCP報文的時候填入
Server Name: Server名字,有64bytes,一般不使用,填充為0
Boot File name: boot file的路徑,128bytes, 一般不使用,填充為0
Option: 選項,不定長度。
3.2 Option字段
Option | 名稱 | 描述 |
---|---|---|
0 | Pad | 填充位 |
1 | Subnet Mask | 子網 掩碼 |
3 | Router Address | 路由器地址 |
6 | DNS | DNS server |
15 | DN | 域名 |
50 | Requested IP Address | 請求的IP地址 |
51 | Address Lease Time | 地址租約時間 |
53 | DHCP Message Type | DHCP消息類型,如Discover、Request、Offer、ACK等 |
54 | Server Identifier | 服務器標識 |
55 | Parameter Request List | 參數請求列表 |
56 | DHCP Error Message | DHCP 錯誤消息 |
58 | Lease Renewal Time | 租約續期時間 |
59 | Lease Rebinding Time | 租約重新設定的時間 |
61 | Client Identifier | 客戶標識 |
119 | Domain Search List | 域名查找列表 |
255 | End | 結束 |
3.3 DHCP Message Type(53)
在DHCP Option中,我們着重看下DHCP Message Type(53),DHCP Message Type標識DHCP消息類型,主要有一下類型:
DHCP 消息類型 | 對應的Option值 |
---|---|
DHCPDISCOVER | 1 |
DHCPOFFER | 2 |
DHCPREQUEST | 3 |
DHCPDECLINE | 4 |
DHCPACK | 5 |
DHCPNAK | 6 |
DHCPRELEASE | 7 |
DHCPINFORM | 8 |
DHCPFORCERENEW | 9 |
DHCPLEASEQUERY | 10 |
DHCPLEASEUNASSIGNED | 11 |
DHCPLEASEUNKNOWN | 12 |
DHCPLEASEACTIVE | 13 |
4.抓包分析
詳細的抓包分析可以參見Wireshark分析DHCP
舉例:服務器用DHCP ACK包對DHCP請求進行響應
從上圖可以看出,在數據包中包含以下信息,表示將這些資源信息分配給Client.
Your(client) IP address:分配給Client的可用IP。
DHCP Message Type(53):DHCP服務器發送的消息類型(ACK)
Subnet Mask:Client端分配到的IP的子網掩碼;
Router:路由器
Domain Name Server:DNS,域名服務器
IP Address Lease Time:IP租用期
參考
DHCP通信原理詳解
DHCP的基本實現原理
DHCP協議 詳解
Wireshark分析DHCP