1. 程式人生 > >【轉載】DHCP協議 詳解

【轉載】DHCP協議 詳解

為了學習作業系統,今天又在windows上裝了一把virtualbox+debian。安裝的過程中遇到了網路配置的問題。學習了一下橋接,NAT,僅主機三種模式的區別。在這個過程中又遇到了DHCP協議,稍做了瞭解。轉載至此,方便檢視。

原文地址: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報文。

        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
            </div>

原文地址: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報文。

        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
            </div>