自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

趣聊 DHCP ,有點意思

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
本篇文章我們來聊一聊 DHCP 協(xié)議。在聊之前,先想象一個場景。你現(xiàn)在站在地鐵上或者坐在辦公室中,你的手機(jī)也好,電腦也好都有一個 IP 地址,假如這個 IP 地址是你手動輸入的,你需要寫下面這些東西 ……

[[386236]]

 


 

 

 

本篇文章我們來聊一聊 DHCP 協(xié)議。在聊之前,先想象一個場景。

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

 

電腦配置這些還好,直接咔咔咔的配置完了,如果你用的是手機(jī),那么你需要點到 IP 地址,輸入 IP 地址,點到子網(wǎng)掩碼,輸入子網(wǎng)掩碼,點到默認(rèn)路由,輸入路由,點到 DNS 服務(wù)器,輸入 DNS 服務(wù)器 …… 這玩意這么麻煩啊,恰好你剛配置完,領(lǐng)導(dǎo)叫你開會,得嘞,剛配置好的地址白瞎了。換了一個環(huán)境,需要重新配置 IP 地址,于是你把上面的步驟再重復(fù)了一遍,這時候散會了,然后你炸了。。。。。。

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

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

認(rèn)識 DHCP

DHCP 的全稱是 Dynamic Host Configuration Protocol 動態(tài)主機(jī)配置協(xié)議。使用 DHCP 就能實現(xiàn)自動設(shè)置 IP 地址、統(tǒng)一管理 IP 地址分配。也就是不管你是在開會還是在工位干活,都省去了手動配置 IP 地址這一步繁瑣的操作,同時 DHCP 也大大減少了可能由于你手動分配 IP 地址導(dǎo)致錯誤的幾率。

DHCP 與 IP 密切相關(guān),它是 IP 網(wǎng)絡(luò)上所使用的協(xié)議。如果你想要使用 DHCP 提供服務(wù)的話,那么在整條通信鏈路上就需要 DHCP 服務(wù)器的存在,連接到網(wǎng)絡(luò)的設(shè)備使用 DHCP 協(xié)議從 DHCP 服務(wù)器請求 IP 地址。DHCP 服務(wù)器會為設(shè)備分配一個唯一的 IP 地址。

 

除了 IP 地址外,DHCP 服務(wù)器還會把子網(wǎng)掩碼,默認(rèn)路由,DNS 服務(wù)器告訴你。

DHCP 服務(wù)器

現(xiàn)在,你不需要手動配置 IP 地址,也不再需要管理 IP 地址了,管理權(quán)已經(jīng)移交給了 DHCP 服務(wù)器,DHCP 服務(wù)器會維護(hù) IP 地址池,在網(wǎng)絡(luò)上啟動時會將地址租借給啟用 DHCP 的客戶端。

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

那么 DHCP 服務(wù)器由誰維護(hù)呢?

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

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

其實,這也是一個 DHCP 服務(wù)器的一個功能,DHCP 服務(wù)器通常為每個客戶端分配一個唯一的動態(tài) IP 地址,當(dāng)該 IP 地址的客戶端租約到期時,該地址就會更改。

唯一意思說的就是,如果你手動設(shè)置了一個靜態(tài) IP,同時 DHCP 服務(wù)器分配了一個動態(tài) IP,這個動態(tài) IP 和靜態(tài) IP 一樣,那么必然會有一個客戶端無法上網(wǎng)。

我就遇到過這種情況,我使用虛擬機(jī)配置的靜態(tài) IP 是192.168.1.8,手機(jī)使用 DHCP 也同樣配置了 192.168.1.8 的 IP 地址,此時我的虛擬機(jī)還沒有接入網(wǎng)絡(luò),當(dāng)我接入網(wǎng)絡(luò)時,我怎樣也連不上虛擬機(jī)了,一查才發(fā)現(xiàn) IP 地址沖突了 ……

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

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

  • 網(wǎng)絡(luò)上所有有效的 TCP/IP 配置參數(shù)

這些參數(shù)主要包括主機(jī)名(Host name)、DHCP 客戶端(DHCP client)、域名(Domain name)、IP 地址IP address)、網(wǎng)關(guān)(Netmask)、廣播地址(Broadcast address)、默認(rèn)路由(default rooter)。

  • 有效的 IP 地址和排除的 IP 地址,保存在 IP 地址池中等待分配給客戶端
  • 為某些特定的 DHCP 客戶端保留的地址,這些地址是靜態(tài) IP,這樣可以將單個 IP 地址一致地分配給單個DHCP 客戶端

好了,現(xiàn)在你知道 DHCP 服務(wù)器都需要保存哪些信息了,并且看過上面的內(nèi)容,你應(yīng)該知道一個 DHCP 的組件有哪些了,下面我們就來聊一聊 DHCP 中都有哪些組件,這些組件缺一不可。

DHCP 的組件

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

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

現(xiàn)在 DHCP 的組件你了解后,下面我就要和你聊聊 DHCP 的工作機(jī)制了。

DHCP 工作機(jī)制

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

  • DHCP 報文DHCP 報文共有以下幾種:
  • DHCP DISCOVER :客戶端開始 DHCP 過程發(fā)送的包,是 DHCP 協(xié)議的開始
  • DHCP OFFER :服務(wù)器接收到 DHCPDISCOVER 之后做出的響應(yīng),它包括了給予客戶端的 IP 租約過期時間、服務(wù)器的識別符以及其他信息
  • DHCP REQUEST :客戶端對于服務(wù)器發(fā)出的 DHCPOFFER 所做出的響應(yīng)。在續(xù)約租期的時候同樣會使用。
  • DHCP ACK :服務(wù)器在接收到客戶端發(fā)來的 DHCPREQUEST 之后發(fā)出的成功確認(rèn)的報文。在建立連接的時候,客戶端在接收到這個報文之后才會確認(rèn)分配給它的 IP 和其他信息可以被允許使用。
  • DHCP NAK :DHCPACK 的相反的報文,表示服務(wù)器拒絕了客戶端的請求。
  • DHCP RELEASE :一般出現(xiàn)在客戶端關(guān)機(jī)、下線等狀況。這個報文將會使 DHCP 服務(wù)器釋放發(fā)出此報文的客戶端的 IP 地址
  • DHCP INFORM :客戶端發(fā)出的向服務(wù)器請求一些信息的報文
  • DHCP DECLINE :當(dāng)客戶端發(fā)現(xiàn)服務(wù)器分配的 IP 地址無法使用(如 IP 地址沖突時),將發(fā)出此報文,通知服務(wù)器禁止使用該 IP 地址。
  • DHCP 的工作機(jī)制比較簡單,無非就是客戶端向服務(wù)器租借 IP ,服務(wù)器提供 IP 給客戶端的這個過程唄。嗯,你很聰明,大致是這樣的,不過有一些細(xì)節(jié)需要注意下,下面我通過兩張圖來和你聊一下。

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

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

 

查找包的階段主要分為兩步:第一步是 DHCP 發(fā)現(xiàn)包,第二步是 DHCP 提供包。

DHCP 客戶端在通信鏈路上發(fā)起廣播,看看鏈路上有沒有能提供 DHCP 包的服務(wù)器,然后通信鏈路上的各個節(jié)點會檢查自己是否能夠提供 DHCP 包,這時 DHCP 服務(wù)器說它能夠提供 DHCP 包,然后 DHCP 就發(fā)出一個 DHCP 包沿著通信鏈路返回給 DHCP 客戶端。

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

 

DHCP 的請求包也分為兩步:第一步是 DHCP 請求包,第二步是 DHCP 確認(rèn)包。

DHCP 客戶端在通信鏈路上發(fā)起 DHCP 請求包,請求包主要是告訴 DHCP 服務(wù)器,它想要用上一步提供的網(wǎng)絡(luò)設(shè)置,然后 DHCP 服務(wù)器向 DHCP 客戶端發(fā)送確認(rèn)包,表示允許 DHCP 客戶端使用第二步發(fā)送的網(wǎng)絡(luò)設(shè)置。

至此,DHCP 的網(wǎng)絡(luò)設(shè)置就結(jié)束了,然后通信鏈路上的主機(jī)之間就可以進(jìn)行 TCP/IP 通信了。

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

DHCP 狀態(tài)機(jī)

我們上面知道 DHCP 會發(fā)送幾種請求包,我們知道,動作肯定伴隨著狀態(tài)的更改,DHCP 也是一樣的,在 DHCP 發(fā)送/接收各種包的時候,其狀態(tài)也在發(fā)生相應(yīng)的改變。DHCP 協(xié)議可以在客戶端和服務(wù)器上運行狀態(tài)機(jī)。狀態(tài)決定了協(xié)議接下來要處理的消息類型。

狀態(tài)之間的轉(zhuǎn)換(箭頭)是由于接收和發(fā)送消息或者計時器到期才發(fā)生的轉(zhuǎn)換。下面是 DHCP 的狀態(tài)輪轉(zhuǎn)圖。

 

客戶端在開始時沒有消息,此時處于 INIT 狀態(tài),然后客戶端會在通信鏈路上發(fā)起一個廣播 DHCP DISCOVER。

在 Selecting 選擇狀態(tài)下,客戶端會收集 DHCPOFFER 消息,直到確定要使用的地址和服務(wù)器為止。

一旦 DHCP 客戶端做好選擇后,它就會發(fā)送 DHCPREQUEST 消息并進(jìn)入 Requesting 狀態(tài),在這個狀態(tài)下它很可能收到并不需要的 ACK 響應(yīng),如果這個狀態(tài)下沒有找到合適的地址的話,那么客戶端就會發(fā)送DHCPDECLINE 并恢復(fù)為 INIT 狀態(tài),但是這種發(fā)生的概率比較小。

在處于 Requesting 狀態(tài)下的客戶端很可能接受發(fā)送過來的 DHCPACK 消息,獲取超時時間 T1 和 T2,然后進(jìn)入 Bound 綁定狀態(tài),在這個狀態(tài)下可以使用地址直到地址過期。

在第一個計時器 T1 到期時,客戶端會進(jìn)入 renewing 續(xù)訂狀態(tài),并重新嘗試建立租約時間,如果收到新的 ACK 消息就表示續(xù)訂成功,然后就恢復(fù)為 Bound 狀態(tài)。

如果沒有收到 ACK 那么 T2 會最終過期進(jìn)入 Rebinding 狀態(tài),進(jìn)入這個狀態(tài)的客戶端會重新嘗試獲取地址,如果最終的租約到期,那么客戶端必須放棄租約地址,并且如果沒有其他地址或網(wǎng)絡(luò)連接要使用,客戶端將斷開連接。

DHCP 沖突

現(xiàn)在我們討論一下 DHCP 沖突的問題,DHCP 沖突其實就是 IP 重了,當(dāng)一個子網(wǎng)中兩個或者更多主機(jī)配置了相同的 IP 地址時,就會發(fā)生 IP 沖突的現(xiàn)象。發(fā)生這種情況可能導(dǎo)致的后果是兩個沖突的主機(jī)混在一起,一臺主機(jī)可能接收了另一臺主機(jī)的數(shù)據(jù)包。

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

造成這種情況的原因有很多,這里我列舉兩個可能出現(xiàn)的情況:

  • 第一種情況是一臺主機(jī)配置了靜態(tài) IP 地址,這臺主機(jī)聯(lián)網(wǎng)后,其 IP 地址不會在 DHCP 服務(wù)器中,然后另外一個主機(jī)入網(wǎng),DHCP 服務(wù)器給這臺主機(jī)自動分配了相同的 IP 地址,這兩個地址就產(chǎn)生了 IP 沖突。
  • 第二種情況是,客戶端從 DHCP 服務(wù)器獲得了 IP 地址,然后這臺主機(jī)下線了,隨著租約到期,DHCP 會將這個 IP 地址又分配給了其他主機(jī),等到這個主機(jī)重新上線后,由于某種原因,計算機(jī)無法訪問 DHCP 服務(wù)器,這種情況下會造成 IP 沖突。

當(dāng)檢測到 IP 沖突時,通常 Windows 系統(tǒng)和 Mac 系統(tǒng)會彈出 IP 沖突的彈窗。

 

DHCP 中繼代理

常規(guī)家庭網(wǎng)絡(luò)(土豪除外)中大多數(shù)都只有一個以太網(wǎng),也就是 LAN 網(wǎng)段,一個 DHCP 服務(wù)器完全可以滿足 LAN 中的客戶機(jī)使用。但是,在更復(fù)雜的網(wǎng)絡(luò)中,比如企業(yè)或者學(xué)校,一臺 DHCP 服務(wù)器顯然就無法滿足了。因此,這種情況下,往往需要 DHCP 的統(tǒng)一管理,具體實現(xiàn)方式可以通過 DHCP 中繼代理 來轉(zhuǎn)發(fā) DHCP 流量,如下圖所示。

 

如上圖所示,存在兩個網(wǎng)段 A 和網(wǎng)段 B,DHCP 客戶機(jī)和 DHCP 服務(wù)器不在一個網(wǎng)段內(nèi),所以我們在通信鏈路上架設(shè)了一個中繼代理,DHCP 客戶機(jī)通過訪問中繼代理以達(dá)到訪問 DHCP 服務(wù)器的目的。

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

DHCP 客戶端會向 DHCP 中繼代理發(fā)送 DHCP 請求包,而 DHCP 中繼代理在收到這個廣播包之后再以單播的形式發(fā)送給 DHCP 服務(wù)器。服務(wù)器收到該包以后再向 DHCP 中繼代理返回應(yīng)答,并由 DHCP 中繼代理將此包發(fā)送給 DHCP 客戶端。

DHCP 認(rèn)證

我們總是假想所有情況都能夠順利進(jìn)行,害怕出問題,這也許意味著我永遠(yuǎn)只是個初級程序員吧。我們上面探討的 DHCP 服務(wù)器都是合理的、合法的,但是互聯(lián)網(wǎng)是一把雙刃劍,不是所有人都是合法公民。如果假設(shè)了一個未經(jīng)授權(quán)的 DHCP 服務(wù)器怎么辦?它很可能會對網(wǎng)絡(luò)造成影響。

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

 

認(rèn)證選項的主要目的就是確定 DHCP 消息是否來自一個授權(quán)的發(fā)送方。

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

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

雖然 DHCP 認(rèn)證能夠確保安全性,但是它沒有被廣泛使用,原因有兩點:

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

總結(jié)

這篇文章我和你探討了計算機(jī)網(wǎng)絡(luò)中一個比較容易忽視的概念,為什么說他容易忽視呢?因為我們平常開發(fā)過程中基本上不會管 IP 地址的配置的,也就是環(huán)境搭建的時候會用到一些,但是要系統(tǒng)學(xué)習(xí)計算機(jī)網(wǎng)絡(luò)的話,DHCP 的重要性不可忽視,DHCP 包括工作機(jī)制、DHCP 報文消息,DHCP 狀態(tài)機(jī)、DHCP 認(rèn)證這些都是需要你了解并掌握的。

本文轉(zhuǎn)載自微信公眾號「程序員cxuan」,作者嵌入式系統(tǒng)。轉(zhuǎn)載本文請聯(lián)系程序員cxuan公眾號。

 

責(zé)任編輯:武曉燕 來源: 程序員cxuan
相關(guān)推薦

2022-02-10 20:09:24

Dubbo源碼Provider

2016-08-16 11:53:37

2010-06-11 10:24:35

模塊化UPS

2021-06-07 17:34:39

拓?fù)渑判?/a>排序算法數(shù)據(jù)結(jié)構(gòu)與算法

2022-01-28 09:01:49

架構(gòu)

2021-08-12 23:03:21

5G運營商基站

2020-12-24 08:37:41

Css前端加載動畫

2022-10-19 08:01:17

Gif動圖前端

2024-02-23 09:02:21

前端開源項目

2020-10-15 14:50:24

寄存器CPU部件

2009-10-10 14:00:42

思科AXP

2023-09-22 17:36:37

2021-01-28 22:31:33

分組密碼算法

2020-05-22 08:16:07

PONGPONXG-PON

2018-06-07 13:17:12

契約測試單元測試API測試

2022-08-08 08:25:21

Javajar 文件

2021-08-04 09:32:05

Typescript 技巧Partial

2018-11-29 09:13:47

CPU中斷控制器

2019-02-13 14:15:59

Linux版本Fedora

2021-01-29 08:32:21

數(shù)據(jù)結(jié)構(gòu)數(shù)組
點贊
收藏

51CTO技術(shù)棧公眾號