原文地址:http://blog.csdn.net/windeal3203/article/details/50677166
DHCP: 動態主機配置協議
TCP/IP協議想要運行正常的話,網絡中的主機和路由器不可避免地需要配置一些信息(如接口的IP地址等)。有了這些配置信息主機/路由器才能提供/使用特定的網絡服務。
主機信息的必要元素有:IP地址、子網掩碼、DNS服務器IP地址
TCP/IP協議配置主機信息主要有三種方法:
1. 手動配置
2. 動態獲取
3. 根據特定算法計算。
在網絡中,我們把主機分為兩大類,服務器主機和客戶端主機,
+ 服務器主機: 一般采用手動配置
+ 客戶端主機: 一般采用動態獲取
服務器一般采用手動配置,而客戶端一般動態獲取。主要基於以下原因:
1. 客戶主機比服務主機移動更頻繁
2. 服務主機需要提供更可靠的服務,其配置信息應該減少對其他系統/主機的依賴
3. 客戶主機比服務主機的數量要多得多。
4. 客戶主機使用者的網絡配置知識比服務主機的使用者低
DHCP有Bootp協議發展而來。Bootp協議提供了有限的主機信息配置,且主機信息已經配置就很難被修改。DHCP提供 幾乎所有的主機信息的配置,且引入了租約等概念,使得主機信息能夠動態發生變化。 DHCP向后兼容Bootp。
DHCP基於UDP/IP傳輸。DHCP服務器使用端口號67,DHCP 客戶端使用端口號68.
DHCP 協議內容
DHCP 主要分為兩部分: 地址的管理 和 配置信息的傳遞
+ 地址管理: 地址管理處理IP‘地址的動態分配、向客戶端提供地址租約
+ 配置信息的傳遞: 包含DHCP報文格式、狀態機
DHCP 地址管理
地址池 與 地址租約
在IP地址的動態分配中,DHCP客戶端想DHCP服務器發送IP地址請求。DHCP服務器會維護一個 IP地址池,DHCP從地址池從取出一個IP回應給DHCP客戶端。在地址分配時,DHCP服務器也會指定回應給DHCP客戶端的IP地址的租約期,該地址只有在該租約期內可用,不過DHCP客戶端可用在租約期內請求延長租約(更新租約期)。
DHCP 報文
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: 選項,不定長度。 DHCP報文中比較重要的字段,后面會有比較詳細的介紹。
DHCP Option
DHCP從Bootp拓展而來,DHCP報文也是有Bootp報文發展而來。但是DHCP在Bootp之上添加了許多功能,其報文也需要有一定的拓展。如果Bootp報文不能滿足的內容,就以Option的形式存在於DHCP報文中。
DHCP協議其實就是攜帶許多Option的Bootp
DHCP有許多類型的Option,長度不一(但都是整數字節)。Option遵循以下格式
+ 如果Option沒有值,則只有標志位之類的內容,則以一個字節表示
+ 如果Opiton有值,即Opiton是以下name-value對,則Opiton需要多個字節表示,其中第一個字節表示 option的名字,第二字節表示value的長度,第三個字節開始表示value。
DHCP支持大量的Option(Bootp也支持其中的部分),下面列舉一些常用的
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 | 結束 |
上面是常用的Option,DHCP報文與Option 255標識報文的結束。
在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 |
DHCP 協議 操作流程
主機新加入網絡時,獲取IP的流程
1. 新的client加入網絡時,會使用0.0.0.0作為源地址,發送discover廣播報文,查詢網絡上有哪些DHCP server,以及這些DHCP server 能Offer哪些IP地址
2. DHCP服務器接收到DHCP Discover報文后,回應Offer報文,提供IP地址(可能包含DNS等其他信息)給client
3. client 根據收到的Offer報文,選擇一個DHCP server,並選擇它提供的IP地址。然后廣播Request報文,想DHCP Server請求該IP地址,同時想本地網絡(尤其是其他DHCP Server)公告自己已經選擇了某個DHCP Server的某個IP地址。
4. DHCP Server 回應ACK報文,將IP地址分配給Client端 (特殊情況:DHCP Server在發送Offer報文和接收到Request的短暫時間內把IP分配給了其他主機)
5. DHCP Client 收到ACK報文后,會針對獲得的IP地址發送ARP Request,進行IP地址沖突檢測。
6. 如果IP地址已經被其他主機使用,則Client放棄該IP地址,想Server發送DHCP DECLINE報文告訴Server該地址不能使用。然后一段時間后(一般10s)再此嘗試獲取該IP地址
7. 如果Client仍然無法使用該IP地址,則發送DHCP RELEASE報文,放棄該地址。
主機已經有IP地址,只想更新租約
1. 此時可以跳過DHCP Discover報文和DHCP Offer報文
2. Client發送攜帶當前IP地址的Request報文
3. 如果Server同意Client續約,則發送DHCP ACK報文。如果拒絕續約,則發送DHCPNAK報文。
* 主機只想更新IP地址以外的信息*
用DHCPINFORM 取代 DHCP Request報文。