tft每日頭條

 > 生活

 > dhcp協議是什麼

dhcp協議是什麼

生活 更新时间:2024-11-24 07:59:31

文章主要脈絡如下。

dhcp協議是什麼(通俗易懂地聊聊)1

哈喽小夥伴們大家好啊,這裡是 cxuan 計算機網絡連載系列的文章第 11 篇,本篇文章我們來聊一聊 DHCP 協議。在聊之前,先想象一個場景。

你現在站在地鐵上或者坐在辦公室中,你的手機也好,電腦也好都有一個 IP 地址,假如這個 IP 地址是你手動輸入的,你需要寫下面這些東西 ……

dhcp協議是什麼(通俗易懂地聊聊)2

電腦配置這些還好,直接咔咔咔的配置完了,如果你用的是手機,那麼你需要點到 IP 地址,輸入 IP 地址,點到子網掩碼,輸入子網掩碼,點到默認路由,輸入路由,點到 DNS 服務器,輸入 DNS 服務器 …… 這玩意這麼麻煩啊,恰好你剛配置完,領導叫你開會,得嘞,剛配置好的地址白瞎了。換了一個環境,需要重新配置 IP 地址,于是你把上面的步驟再重複了一遍,這時候散會了,然後你炸了。。。。。。

我們還省去了你有可能配置錯誤的時候。

上面這段描述最讓人惱火的就是你需要手動配置 IP 地址,woc,為啥不能設置成自動配置 IP 地址呢?誰說不能的,能!那就是用 DHCP, 這也是我們下面要聊的内容。

認識 DHCP

DHCP 的全稱是 Dynamic Host Configuration Protocol 動态主機配置協議。使用 DHCP 就能實現自動設置 IP 地址、統一管理 IP 地址分配。也就是不管你是在開會還是在工位幹活,都省去了手動配置 IP 地址這一步繁瑣的操作,同時 DHCP 也大大減少了可能由于你手動分配 IP 地址導緻錯誤的幾率。

DHCP 與 IP 密切相關,它是 IP 網絡上所使用的協議。如果你想要使用 DHCP 提供服務的話,那麼在整條通信鍊路上就需要 DHCP 服務器的存在,連接到網絡的設備使用 DHCP 協議從 DHCP 服務器請求 IP 地址。DHCP 服務器會為設備分配一個唯一的 IP 地址。

dhcp協議是什麼(通俗易懂地聊聊)3

除了 IP 地址外,DHCP 服務器還會把子網掩碼,默認路由,DNS 服務器告訴你。

DHCP 服務器

現在,你不需要手動配置 IP 地址,也不再需要管理 IP 地址了,管理權已經移交給了 DHCP 服務器,DHCP 服務器會維護 IP 地址池,在網絡上啟動時會将地址租借給啟用 DHCP 的客戶端。

由于 IP 地址是動态的(臨時分配)而不是靜态的(永久分配),因此不再使用的 IP 地址會自動返回 IP 地址池中進行重新分配。

那麼 DHCP 服務器由誰維護呢?

網絡管理員負責建立 DHCP 服務器,并以租約的形式向啟用 DHCP 的客戶端提供地址配置,啊,既然不需要我管理,那就很舒服了~

好了,現在你能舒舒服服的開發了,你用 postman 配了一條 192.168.1.4/x/x 的接口進行請求,請求能夠順利進行,但是過了一段時間後,你發現 192.168.1.4/x/x 這個接口請求不通了,這是為啥呢?然後你用 ipconfig 查詢了一下自己的 IP 地址,發現 IP 地址變成了 192.168.1.7,怎麼我用着用着 IP 地址還改了?DHCP 是個垃圾,破玩意!!@#¥%¥%……¥%

其實,這也是一個 DHCP 服務器的一個功能,DHCP 服務器通常為每個客戶端分配一個唯一的動态 IP 地址,當該 IP 地址的客戶端租約到期時,該地址就會更改。

唯一意思說的就是,如果你手動設置了一個靜态 IP,同時 DHCP 服務器分配了一個動态 IP,這個動态 IP 和靜态 IP 一樣,那麼必然會有一個客戶端無法上網。

我就遇到過這種情況,我使用虛拟機配置的靜态 IP 是192.168.1.8,手機使用 DHCP 也同樣配置了 192.168.1.8 的 IP 地址,此時我的虛拟機還沒有接入網絡,當我接入網絡時,我怎樣也連不上虛拟機了,一查才發現 IP 地址沖突了 ……

雖然 DHCP 服務器能提供 IP 地址,但是他怎麼知道哪些 IP 地址空閑,哪些 IP 地址正在使用呢?

實際上,這些信息都配置在了數據庫中,下面我們就來一起看一下 DHCP 服務器維護了哪些信息。

  • 網絡上所有有效的 TCP/IP 配置參數

這些參數主要包括主機名(Host name)、DHCP 客戶端(DHCP client)、域名(Domain name)、IP 地址IP address)、網關(Netmask)、廣播地址(Broadcast address)、默認路由(default rooter)

  • 有效的 IP 地址和排除的 IP 地址,保存在 IP 地址池中等待分配給客戶端
  • 為某些特定的 DHCP 客戶端保留的地址,這些地址是靜态 IP,這樣可以将單個 IP 地址一緻地分配給單個DHCP 客戶端

好了,現在你知道 DHCP 服務器都需要保存哪些信息了,并且看過上面的内容,你應該知道一個 DHCP 的組件有哪些了,下面我們就來聊一聊 DHCP 中都有哪些組件,這些組件缺一不可。

DHCP 的組件

使用 DHCP 時,了解所有的組件很重要,下面我為你列出了一些 DHCP 的組件和它們的作用都是什麼。

  • DHCP Server,DHCP 服務器,這個大家肯定都知道,因為我們上面就一直在探讨 DHCP 服務器的内容,使用 DHCP ,是一定要有 DHCP 服務器的,要不然誰給你提供服務呢?
  • DHCP Client,DHCP 客戶端,這個大家應該也知道,畢竟隻有一個服務端不行啊,沒有客戶端你為誰服務啊?DHCP 的客戶端可以是計算機、移動設備或者其他需要連接到網絡的任何設備,默認情況下,大多數配置為接收 DHCP 信息
  • Ip address pool: 你得有 IP 地址池啊,雖然說你 DHCP 提供服務,但是你也得有工具啊,沒有工具玩兒啥?IP 地址池是 DHCP 客戶端可用的地址範圍,這個地址範圍通常由最低 -> 最高順序發送。
  • Subnet:這個組件是子網,IP 網絡可以劃分一段一段的子網,子網更有助于網絡管理。
  • Lease:租期,這個表示的就是 IP 地址續約的期限,同時也代表了客戶端保留 IP 地址信息的時間長度,一般租約到期時,客戶端必須續約。
  • DHCP relay:DHCP 中繼器,這個一般比較難想到,DHCP 中繼器一般是路由器或者主機。DHCP 中繼器通常應對 DHCP 服務器和 DHCP 客戶端不再同一個網段的情況,如果 DHCP 服務器和 DHCP 客戶端在同一個網段下,那麼客戶端可以正确的獲得動态分配的 IP 地址;如果不在的話,就需要使用 DHCP 中繼器進行中繼代理。

現在 DHCP 的組件你了解後,下面我就要和你聊聊 DHCP 的工作機制了。

DHCP 工作機制

在聊 DHCP 工作機制前,先來看一下 DHCP 的報文消息

DHCP 報文

DHCP 報文共有以下幾種:

  • DHCP DISCOVER :客戶端開始 DHCP 過程發送的包,是 DHCP 協議的開始
  • DHCP OFFER :服務器接收到 DHCPDISCOVER 之後做出的響應,它包括了給予客戶端的 IP 租約過期時間、服務器的識别符以及其他信息
  • DHCP REQUEST :客戶端對于服務器發出的 DHCPOFFER 所做出的響應。在續約租期的時候同樣會使用。
  • DHCP ACK :服務器在接收到客戶端發來的 DHCPREQUEST 之後發出的成功确認的報文。在建立連接的時候,客戶端在接收到這個報文之後才會确認分配給它的 IP 和其他信息可以被允許使用。
  • DHCP NAK :DHCPACK 的相反的報文,表示服務器拒絕了客戶端的請求。
  • DHCP RELEASE :一般出現在客戶端關機、下線等狀況。這個報文将會使 DHCP 服務器釋放發出此報文的客戶端的 IP 地址
  • DHCP INFORM :客戶端發出的向服務器請求一些信息的報文
  • DHCP DECLINE :當客戶端發現服務器分配的 IP 地址無法使用(如 IP 地址沖突時),将發出此報文,通知服務器禁止使用該 IP 地址。

DHCP 的工作機制比較簡單,無非就是客戶端向服務器租借 IP ,服務器提供 IP 給客戶端的這個過程呗。嗯,你很聰明,大緻是這樣的,不過有一些細節需要注意下,下面我通過兩張圖來和你聊一下。

關于從 DHCP 中獲取 IP 地址的流程,主要分為兩個階段。

第一個階段是 DHCP 查找包的階段

dhcp協議是什麼(通俗易懂地聊聊)4

查找包的階段主要分為兩步:第一步是 DHCP 發現包,第二步是 DHCP 提供包。

DHCP 客戶端在通信鍊路上發起廣播,看看鍊路上有沒有能提供 DHCP 包的服務器,然後通信鍊路上的各個節點會檢查自己是否能夠提供 DHCP 包,這時 DHCP 服務器說它能夠提供 DHCP 包,然後 DHCP 就發出一個 DHCP 包沿着通信鍊路返回給 DHCP 客戶端。

第二個階段是 DHCP 的請求階段。

dhcp協議是什麼(通俗易懂地聊聊)5

DHCP 的請求包也分為兩步:第一步是 DHCP 請求包,第二步是 DHCP 确認包。

DHCP 客戶端在通信鍊路上發起 DHCP 請求包,請求包主要是告訴 DHCP 服務器,它想要用上一步提供的網絡設置,然後 DHCP 服務器向 DHCP 客戶端發送确認包,表示允許 DHCP 客戶端使用第二步發送的網絡設置。

至此,DHCP 的網絡設置就結束了,然後通信鍊路上的主機之間就可以進行 TCP/IP 通信了。

當不需要 IP 地址時,可以發送 DHCP 解除包(DHCP RELEASE)進行解除。另外,DHCP 的設置中通常會有一個租期時間的設定,DHCP 客戶端在這個時限内可以發送 DHCP 請求包通知想要延長這個期限。

DHCP 狀态機

我們上面知道 DHCP 會發送幾種請求包,我們知道,動作肯定伴随着狀态的更改,DHCP 也是一樣的,在 DHCP 發送/接收各種包的時候,其狀态也在發生相應的改變。DHCP 協議可以在客戶端和服務器上運行狀态機。狀态決定了協議接下來要處理的消息類型。

狀态之間的轉換(箭頭)是由于接收和發送消息或者計時器到期才發生的轉換。下面是 DHCP 的狀态輪轉圖。

dhcp協議是什麼(通俗易懂地聊聊)6

客戶端在開始時沒有消息,此時處于 INIT 狀态,然後客戶端會在通信鍊路上發起一個廣播 DHCP DISCOVER。

在 Selecting 選擇狀态下,客戶端會收集 DHCPOFFER 消息,直到确定要使用的地址和服務器為止。

一旦 DHCP 客戶端做好選擇後,它就會發送 DHCPREQUEST 消息并進入 Requesting 狀态,在這個狀态下它很可能收到并不需要的 ACK 響應,如果這個狀态下沒有找到合适的地址的話,那麼客戶端就會發送DHCPDECLINE 并恢複為 INIT 狀态,但是這種發生的概率比較小。

在處于 Requesting 狀态下的客戶端很可能接受發送過來的 DHCPACK 消息,獲取超時時間 T1 和 T2,然後進入 Bound 綁定狀态,在這個狀态下可以使用地址直到地址過期。

在第一個計時器 T1 到期時,客戶端會進入 renewing 續訂狀态,并重新嘗試建立租約時間,如果收到新的 ACK 消息就表示續訂成功,然後就恢複為 Bound 狀态。

如果沒有收到 ACK 那麼 T2 會最終過期進入 Rebinding 狀态,進入這個狀态的客戶端會重新嘗試獲取地址,如果最終的租約到期,那麼客戶端必須放棄租約地址,并且如果沒有其他地址或網絡連接要使用,客戶端将斷開連接。

DHCP 沖突

現在我們讨論一下 DHCP 沖突的問題,DHCP 沖突其實就是 IP 重了,當一個子網中兩個或者更多主機配置了相同的 IP 地址時,就會發生 IP 沖突的現象。發生這種情況可能導緻的後果是兩個沖突的主機混在一起,一台主機可能接收了另一台主機的數據包。

那麼造成這種情況的原因是啥呢?

造成這種情況的原因有很多,這裡我列舉兩個可能出現的情況:

  • 第一種情況是一台主機配置了靜态 IP 地址,這台主機聯網後,其 IP 地址不會在 DHCP 服務器中,然後另外一個主機入網,DHCP 服務器給這台主機自動分配了相同的 IP 地址,這兩個地址就産生了 IP 沖突。
  • 第二種情況是,客戶端從 DHCP 服務器獲得了 IP 地址,然後這台主機下線了,随着租約到期,DHCP 會将這個 IP 地址又分配給了其他主機,等到這個主機重新上線後,由于某種原因,計算機無法訪問 DHCP 服務器,這種情況下會造成 IP 沖突。

當檢測到 IP 沖突時,通常 Windows 系統和 Mac 系統會彈出 IP 沖突的彈窗。

dhcp協議是什麼(通俗易懂地聊聊)7

DHCP 中繼代理

常規家庭網絡(土豪除外)中大多數都隻有一個以太網,也就是 LAN 網段,一個 DHCP 服務器完全可以滿足 LAN 中的客戶機使用。但是,在更複雜的網絡中,比如企業或者學校,一台 DHCP 服務器顯然就無法滿足了。因此,這種情況下,往往需要 DHCP 的統一管理,具體實現方式可以通過 DHCP 中繼代理 來轉發 DHCP 流量,如下圖所示。

dhcp協議是什麼(通俗易懂地聊聊)8

如上圖所示,存在兩個網段 A 和網段 B,DHCP 客戶機和 DHCP 服務器不在一個網段内,所以我們在通信鍊路上架設了一個中繼代理,DHCP 客戶機通過訪問中繼代理以達到訪問 DHCP 服務器的目的。

使用這種方式,我們不再需要在每個網段都設置一個 DHCP 服務器,隻需要在每個網段架設一個中繼代理即可。它可以設置 DHCP 服務器的 IP 地址,從而可以在 DHCP 服務器上為每個網段注冊 IP 地址的分配範圍。

DHCP 客戶端會向 DHCP 中繼代理發送 DHCP 請求包,而 DHCP 中繼代理在收到這個廣播包之後再以單播的形式發送給 DHCP 服務器。服務器收到該包以後再向 DHCP 中繼代理返回應答,并由 DHCP 中繼代理将此包發送給 DHCP 客戶端。

DHCP 認證

我們總是假想所有情況都能夠順利進行,害怕出問題,這也許意味着我永遠隻是個初級程序員吧。我們上面探讨的 DHCP 服務器都是合理的、合法的,但是互聯網是一把雙刃劍,不是所有人都是合法公民。如果假設了一個未經授權的 DHCP 服務器怎麼辦?它很可能會對網絡造成影響。

為了避免這些問題,在 [RFC3118] 中指定了一種認證 DHCP 消息的方法。它定義了一個 DHCP 選項,即Authentication 選項,如下所示

dhcp協議是什麼(通俗易懂地聊聊)9

認證選項的主要目的就是确定 DHCP 消息是否來自一個授權的發送方

身份驗證的代碼(code)屬性值是 90,而長度(Length)給出了選項中的字節數(不包括代碼和長度字段的字節)。如果協議(Protocol)和算法(Algorithm)屬性被設置為 0 ,則認證信息字段将保存一個簡單的共享配置的 token,token 大家開發應該都接觸過吧,就是一條認證信息。隻要配置令牌在客戶端和服務器上匹配,這條消息就會被接受。

我們上面聊到的隻是其中的一種,還有一種更安全的方法是涉及所謂的延遲身份認證,如果協議和算法都被設置為 1,就表示使用了延遲身份認證。在這種情況下,客戶端的 DHCPDISCOVER 消息或 DHCPINFORM 消息包括身份驗證選項,并且服務器以其 DHCPOFFER 或 DHCPACK 消息中包含的身份驗證信息進行響應。這個認證信息中包括一個消息認證碼,它提供對發送方的認證和消息的完整性校驗。RDM 表示中繼檢測,中繼檢測包括一個單項遞增的值,隻要經過一個代理中繼,那麼這個中繼檢測的值就會 1。

雖然 DHCP 認證能夠确保安全性,但是它沒有被廣泛使用,原因有兩點:

  • 首先,該方法要求在 DHCP 服務器和每個需要身份驗證的客戶端之間分配共享密鑰。
  • 其次,在 DHCP 已經被廣泛使用之後,才指定了 Authentication 選項。
總結

這篇文章我和你探讨了計算機網絡中一個比較容易忽視的概念,為什麼說他容易忽視呢?因為我們平常開發過程中基本上不會管 IP 地址的配置的,也就是環境搭建的時候會用到一些,但是要系統學習計算機網絡的話,DHCP 的重要性不可忽視,DHCP 包括工作機制、DHCP 報文消息,DHCP 狀态機、DHCP 認證這些都是需要你了解并掌握的。

原文鍊接:趣聊 DHCP ,有點意思

關注我,帶你更好的學習計算機網絡。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved