Virtual-Network--—DHCP協議學習以及對應報文分析

Virtual-Network–—DHCP協議學習以及對應報文分析

轉載

本文爲轉載:原文鏈接:https://blog.csdn.net/u014023993/article/details/87953466

原文鏈接:https://blog.csdn.net/u014023993/article/details/87953466

原文鏈接:https://blog.csdn.net/u014023993/article/details/87953466

請前往原文閱讀,本篇僅是個人記錄學習所用;

1. DHCP 簡介

1.1 DHCP 作用

DHCP(Dynamic Host Configurations Protocol),動態主機配置協議,前身是 BOOTP 協議,是一個局域網的網絡協議,使用 UDP 協議工作。

DHCP 通常被用於局域網環境,主要作用是集中的管理、分配 IP 地址,使 Client 動態的獲得IP地址、Gateway 地址、DNS 服務器地址等信息,並能夠提升地址的使用率。簡單來說,DHCP 就是一個不需要賬號密碼登錄的、自動給內網機器分配IP地址等信息的協議。

DHCP 涉及客戶端和服務端。在使用 DHCP 之前,必須要架設一臺 DHCP 服務器(很多時候使用該網段的路由器充當 DHCP 服務器)。

DHCP 客戶端一般來說是局域網中獨立的 PC 主機。DHCP 客戶端發出的DHCP DISCOVER 包是 DHCP 協議的開始。延續租期、發現、釋放IP地址等大多數 DHCP 中的行爲都是由 DHCP 客戶端主動發起。

DHCP 服務器端,在路由器上體現的就是給 LAN 端動態分配IP的功能。DHCP SERVER 負責接收客戶端的 DHCP 請求,管理 LAN 端所有的網絡IP信息,DHCP 通過“租約”來實現動態分配IP的功能,實現IP 的時分複用,從而解決 IP 資源短缺的問題。

DHCP 服務器管理IP的方式有三種:

  1. 人工配置(由管理員對每臺具體的計算機指定一個地址)

  2. 自動配置(服務器爲第一次連接網絡的計算機分配一個永久地址)

  3. 動態配置(在一定的期限內將地址租給計算機,租期結束後客戶必須續租或者停用該地址),路由器經常使用的是動態配置。

1.2 DHCP 工作機制

DHCP 維護了兩個租約表:靜態租約表及動態租約表。

靜態租約表:對應一個靜態租約存儲文件, Server 運行時從文件中讀取靜態租約表。

動態租約表:對應一個週期存儲文件, Server 週期性將租約表存進該文件,在程序開始時將會讀取上次存放的租約表。(租約表記錄了當前所有分配的租約,包括靜態鏈接的)。

客戶端發起請求,服務器讀取客戶端信息,並在租約表中進行檢索找到相應的表項,再根據客戶端的狀態執行不同的回覆。當收到客戶端的首次請求時,DHCP 服務器先查找靜態租約表;若存在請求的表項,返回這個客戶的靜態 IP 地址;否則,從 IP 地址池中選擇可用的 IP 分配給客戶,並添加信息到動態數據庫中。此外,服務器將會週期性的刷新租約表寫入文件存檔,在這個過程中會順便對動態租約表進行租期檢查。

2. DHCP 交互流程

2.1 正常交互流程

DHCP 正常交互流程如下圖所示:
在這裏插入圖片描述

  1. 客戶端請求 DHCP 服務器:發送 DHCP DISCOVER 包

當 DHCP 客戶端第一次登錄網絡的時候(也就是客戶端上沒有任何IP地址數據時),它會通過 UDP 67 端口向網絡上發出一個 DHCP DISCOVER 數據包(包中包含客戶端的 MAC 地址和計算機名等信息)。因爲客戶端還不知道自己屬於哪一個網絡,所以封包的源地址爲0.0.0.0,目標地址爲 255.255.255.255,然後再附上 DHCP DISCOVER 的信息,向網絡進行廣播。

DHCP DISCOVER 的等待時間預設爲 1 秒,也就是當客戶端將第一個DHCP DISCOVER 封包送出去之後,在 1 秒之內沒有得到迴應的話,就會進行第二次 DHCP DISCOVER 廣播。若一直沒有得到迴應,客戶端會將這一廣播包重新發送四次(以 2,4,8,16 秒爲間隔,加上 1-1000 毫秒之間隨機長度的時間)。如果都沒有得到DHCP Server的迴應,客戶端會從 169.254.0.0/16 這個自動保留的私有 IP 地址中選用一個IP地址。並且每隔 5 分鐘重新廣播一次,如果收到某個服務器的響應,則繼續IP租用過程。

  1. 服務端提供 IP 地址租用:發送 DHCP OFFER 包

當 DHCP Server 監聽到客戶端發出的 DHCP DISCOVER 廣播包後,它會從那些還沒有租出去的地址中,按照一定的規則選擇一個空置 IP ,通過 UDP 68 端口發送 DHCP OFFER 廣播包(包中包含IP地址、子網掩碼、地址租期等信息)。DHCP Server 爲此客戶保留它提供的 IP 地址,從而不會爲其他DHCP客戶分配此IP地址。

靜態租用:首先匹配 MAC 地址,看是否能在靜態租約表中找到對應的項,若能找到就把 IP 分配給他。靜態表中的IP不能被其他客戶使用。

動態租用:

a) Server 試圖分配給 Client 上次分配過的IP,在這之前檢查這個 IP 是否正在使用

b) DISCOVER 中含有 Request IP 時,檢查該IP是否在地址池範圍,是否正在使用,是否到期,是否是靜態 IP,網絡上是否已經存在

c) DISCOVER 不含 Request IP,從地址池上尋找一個最小的可用 IP 分配

  1. 接受 IP 租約::發送 DHCP REQUEST 包

如果客戶端收到網絡上多臺 DHC P服務器的響應,按照一定的規則挑選其中一個 DHCP OFFER (一般是最先到達的那個),並且會向網絡發送一個 DHCP REQUEST 廣播數據包(包中包含客戶端的 MAC 地址、接受的租約中的IP地址、提供此租約的 DHCP 服務器地址等),告訴所有 DHCP Server 它將接受哪一臺服務器提供的IP地址,其他的 DHCP 服務器撤銷它們未被採用的 IP。

  1. 租約確認:ACK

當 DHCP Server 接收到客戶端的 DHCP REQUEST 之後,會廣播返回給客戶端一個 DHCP ACK 消息包,表明已經接受客戶端的選擇,並將這一IP地址的合法租用以及其他的配置信息都放入該廣播包發給客戶端。

客戶端在接收到 DHCP ACK 廣播後,會向網絡發送三個針對此 IP 地址的 ARP 解析請求以執行衝突檢測,查詢網絡上有沒有其它端器使用該 IP 地址;如果發現該 IP 地址已經被使用,客戶端會發出一個 DHCP DECLINE 數據包給 DHCP Server,拒絕此IP地址租約,並重新發送 DHCP DISCOVER 信息。此時,在 DHCP 服務器管理控制檯中,會顯示此 IP 地址爲 BAD_ADDRESS。

如果網絡上沒有其它主機使用此IP地址,則客戶端的 TCP/IP 使用租約中提供的 IP 地址完成初始化,從而可以和其他網絡中的主機進行通訊。

  1. 租約 NAK

REQUEST 失敗,出現此種問題有如下兩種原因:

a) 請求的 IP 是靜態 IP,但是 MAC 地址無法與其對應。

b) DHCP ACK 中驗證失敗。

2.2 租約

租約生命週期分爲如下幾個階段

a) 分配(Allocation:):客戶端沒有租約,沒有IP地址,通過“分配”階段請求租約

b) 重新分配(Reallocation:):客戶端已經有了租約,因此有了 IP 地址,但是重啓了。於是向授權其租約的服務器確認租約以及獲取操作參數

c) 正常操作(Normal Operation):租約有效,客戶端使用其分配的IP地址和其他參數進行業務

d) 更新(Renewal):在租約快過期時,客戶端向授予其租約的服務器請求更新租約

e) 重新綁定(Rebinding):如果更新失敗,那麼客戶端向任意有效的服務器請求重新綁定租約

f) 釋放(Release):客戶端不在使用被分配的IP地址,因此釋放該IP。

租約生命週期如下圖所示:

在這裏插入圖片描述
租約分配流程如下圖所示:

在這裏插入圖片描述
租約重新分配流程如圖所示:

在這裏插入圖片描述

租約更新和重新綁定如圖所示:

在這裏插入圖片描述

2.3 客戶端狀態機

客戶端的有限狀態機如圖所示:

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述
客戶端狀態機切換如圖所示:

在這裏插入圖片描述

2.4 參數配置

參數配置流程如下圖所示:

在這裏插入圖片描述

3. DHCP 報文

3.1 報文類型

DHCP 涉及報文如下:

DHCP DISCOVER

DHCP客戶端請求地址時,並不知道DHCP服務器的位置,因此DHCP客戶端會在本地網絡內以廣播方式發送請求報文,這個報文就是DISCOVER報文,目的是發現網絡中的DHCP服務器,所有收到DISCOVER報文的DHCP服務器都會發送回應報文,DHCP客戶端據此可以知道網絡中存在的DHCP服務器的位置。

DHCP OFFER

DHCP服務器收到DISCOVER報文後,就會在所配置的地址池中查找一個合適的IP地址,加上相應的租約期限和其他配置信息(如網關、DNS服務器等),構造一個OFFER報文,發送給用戶,告知用戶本服務器可以爲其提供IP地址。< 只是告訴client可以提供,是預分配,還需要client通過ARP檢測該IP是否重複>

DHCP REQUEST

DHCP客戶端可能會收到很多OFFER,所以必須在這些迴應中選擇一個。Client通常選擇第一個迴應OFFER報文的服務器作爲自己的目標服務器,並回應一個廣播REQUEST報文,通告選擇的服務器。DHCP客戶端成功獲取IP地址後,在地址使用租期過去1/2時,會向DHCP服務器發送單播REQUEST報文續延租期,如果沒有收到DHCP ACK報文,在租期過去3/4時,發送廣播REQUEST報文續延租期。

DHCP ACK

DHCP服務器收到REQUEST報文後,根據REQUEST報文中攜帶的用戶MAC來查找有沒有相應的租約記錄,如果有則發送ACK報文作爲迴應,通知用戶可以使用分配的IP地址。

DHCP NAK

如果DHCP服務器收到REQUEST報文後,沒有發現有相應的租約記錄或者由於某些原因無法正常分配IP地址,則發送NAK報文作爲迴應,通知用戶無法分配合適的IP地址。

DHCP RELEASE

當用戶不再需要使用分配IP地址時,就會主動向DHCP服務器發送RELEASE報文,告知服務器用戶不再需要分配IP地址,DHCP服務器會釋放被綁定的租約。

DHCP DECLINE

DHCP客戶端收到DHCP服務器迴應的ACK報文後,通過地址衝突檢測發現服務器分配的地址衝突或者由於其他原因導致不能使用,則發送DECLINE報文,通知服務器所分配的IP地址不可用。

DHCP INFORM

DHCP客戶端如果需要從DHCP服務器端獲取更爲詳細的配置信息,則發送INFORM報文向服務器進行請求,服務器收到該報文後,將根據租約進行查找,找到相應的配置信息後,發送ACK報文迴應DHCP客戶端。

下文對主要的報文格式進行介紹。

3.2 報文格式

報文格式如圖所示:

在這裏插入圖片描述

各字段含義如圖 13、圖 14、圖 15所示:

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

Op:操作碼,客戶端發包是1,服務端回覆是2

HType:用於本地網絡的硬件類型

HLen:硬件地址長度,對於用 MAC 地址的網絡,該值爲6(6字節,48位)

XID: 隨機生成的一段字符串,兩個數據包擁有相同的XID說明他們屬於同一次會話

CIAddr:客戶端會在發送請求時將自己的 IP 地址放在此處(更新租約時用)

YIAddr:服務器會將想要分配給客戶端的 IP 地址放在此處

SIAddr:一般來說是服務器的 IP 地址.

Chaddr:客戶端的 MAC 地址

GIAddr:如果需要跨子網進行 DHCP 地址發放,則在此處填入經過的路由器的 IP 地址

SName:服務器主域名

Options:可以自由添加的部分,用於存放客戶端向服務器請求信息和服務器的應答信息

Options 字段格式如圖所示:

在這裏插入圖片描述

Option 格式如圖所示:

在這裏插入圖片描述

DHCP Option 類別如下圖所示:

在這裏插入圖片描述

3.3 抓包

說了那麼多,通過 Wireshark 抓包實戰,看一下 DHCP 交互的具體流程及報文信息。

首先查看一下電腦的網絡配置,如圖所示

在這裏插入圖片描述

  1. 通過 Wireshark 抓包

  2. 通過命令 ipconfig /renew 更新網絡信息

通過 udp.port==67 過濾報文,只看到了兩個報文,一個是 REQUEST,另一個是 ACK ,具體信息如下:

在這裏插入圖片描述
由於之前電腦已經被分配了 192.168.0.100 的 IP 地址,因此在圖 20中的 Client IP 地址的值是 192.168.0.100。

ACK 報文如圖所示:
在這裏插入圖片描述

可以看到,電腦又被分配了 192.168.0.100 的地址(租約重新分配)。

如果想看一下 DISCOVER 及 OFFER 報文,該怎麼辦?通過如下命令:

  1. ipconfig /release

  2. ipconfig /renew

通過 udp.port==67 過濾報文,結果如圖 所示:

在這裏插入圖片描述

DISCOVER 報文格式如圖所示:

在這裏插入圖片描述

OFFER 報文格式如圖所示:

在這裏插入圖片描述
INFORM 報文格式如圖 25 所示:

在這裏插入圖片描述
RELEASE 報文格式如圖所示:

在這裏插入圖片描述

4. DHCP 中繼代理

家庭網絡大多隻有一個以太網的網段,與其連接的主機臺數也不會太多。因此,一臺 DHCP 服務器即可滿足 IP 地址分配的需求,而大多情況下都由寬帶路由器充當這個 DHCP 的角色。

但是,對於企業或者學校等大規模組織機構的網絡環境,一般會有多個以太網網段。這種情況下,如果爲每個網段都設置 DHCP 服務器將會很繁瑣,並且容易出錯。即使路由器可以分擔 DHCP 的概念,但是如果網絡中有 10 個路由器,就要爲路由器設置它們各自可分配 IP 地址的範圍,並且對這些範圍進行後續的變更維護,這樣就很耗時和難以管理了。

於是,DHCP 中繼代理器應運而生。有了中繼代理器後,對不同網段的IP地址分配可以由一個 DHCP 服務器統一進行管理和運維。

在每個網段設置一個 DHCP 中繼代理(可以用路由器或者直接在主機上配置),它可以設置 DHCP 服務器的IP地址,這樣就可以在 DHCP 服務器上爲每個網段註冊IP地址的分配範圍。

DHCP 客戶端向 DHCP 中繼代理髮送 DHCP 請求包,DHCP 中繼代理在收到這個廣播包後,再以單播的形式發送給 DHCP 服務器。服務器收到該包以後再向 DHCP 中繼代理返回應答,並由 DHCP 中繼代理將此包轉發給 DHCP 客戶端( DHCP 包中包含發出請求的主機的 MAC 地址。DHCP 代理正是利用這個 MAC 地址將包返回給 DHCP 客戶端)。由此,即使 DHCP 服務器不在同一個鏈路上也可以實現統一分配和管理 IP 地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章