計(jì)算機(jī)網(wǎng)絡(luò)我也連載了很多篇了,大家可以在我的公眾號(hào)「程序員cxuan」 或者我的 github 系統(tǒng)學(xué)習(xí)。 計(jì)算機(jī)網(wǎng)絡(luò)第一篇,聊一聊網(wǎng)絡(luò)基礎(chǔ) :計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)知識(shí)總結(jié) 計(jì)算機(jī)網(wǎng)絡(luò)第二篇,聊一聊 TCP/IP 基礎(chǔ):TCP/IP 基礎(chǔ)知識(shí)總結(jié) 計(jì)算機(jī)網(wǎng)絡(luò)第三篇,這些應(yīng)用層協(xié)議你也應(yīng)該知道:拿下計(jì)網(wǎng)協(xié)議后,我就是公園里最靚的仔 計(jì)算機(jī)網(wǎng)絡(luò)第四篇,這篇文章寫(xiě)的時(shí)間很長(zhǎng)了,圖文精美,非常值得花時(shí)間閱讀:40 張圖帶你搞懂 TCP 和 UDP 計(jì)算機(jī)網(wǎng)絡(luò)第五篇,網(wǎng)絡(luò)層之路由器的基本概念:路由器你竟然是這樣的... 計(jì)算機(jī)網(wǎng)絡(luò)第六篇,了解一下 IP 基礎(chǔ)知識(shí)的概念:IP 基礎(chǔ)知識(shí)總結(jié) 計(jì)算機(jī)網(wǎng)絡(luò)第七篇,全方位了解一下網(wǎng)絡(luò)層的知識(shí):我畫(huà)了 40 張圖就是為了讓你搞懂計(jì)算機(jī)網(wǎng)絡(luò)層 計(jì)算機(jī)網(wǎng)絡(luò)第八篇,了解一下 ARP 協(xié)議是什么:ARP,這個(gè)隱匿在計(jì)網(wǎng)背后的男人 計(jì)算機(jī)網(wǎng)絡(luò)第九篇,DNS 協(xié)議是面試經(jīng)常會(huì)考到的點(diǎn),這篇帶你深入了解一下 DNS 協(xié)議:萬(wàn)字長(zhǎng)文爆肝 DNS 協(xié)議! 計(jì)算機(jī)網(wǎng)絡(luò)第十篇 Ping 的工作原理你懂了,那 ICMP 你懂不懂? 哈嘍小伙伴們大家好啊,這里是 cxuan 計(jì)算機(jī)網(wǎng)絡(luò)連載系列的文章第 11 篇,本篇文章我們來(lái)聊一聊 DHCP 協(xié)議。在聊之前,先想象一個(gè)場(chǎng)景。 你現(xiàn)在站在地鐵上或者坐在辦公室中,你的手機(jī)也好,電腦也好都有一個(gè) 電腦配置這些還好,直接咔咔咔的配置完了,如果你用的是手機(jī),那么你需要點(diǎn)到 IP 地址,輸入 IP 地址,點(diǎn)到子網(wǎng)掩碼,輸入子網(wǎng)掩碼,點(diǎn)到默認(rèn)路由,輸入路由,點(diǎn)到 DNS 服務(wù)器,輸入 DNS 服務(wù)器 ...... 這玩意這么麻煩啊,恰好你剛配置完,領(lǐng)導(dǎo)叫你開(kāi)會(huì),得嘞,剛配置好的地址白瞎了。換了一個(gè)環(huán)境,需要重新配置 IP 地址,于是你把上面的步驟再重復(fù)了一遍,這時(shí)候散會(huì)了,然后你炸了。。。。。。
上面這段描述最讓人惱火的就是你需要手動(dòng)配置 IP 地址,woc,為啥不能設(shè)置成自動(dòng)配置 IP 地址呢?誰(shuí)說(shuō)不能的,能!那就是用 認(rèn)識(shí) DHCP
DHCP 與 IP 密切相關(guān),它是 IP 網(wǎng)絡(luò)上所使用的協(xié)議。如果你想要使用 DHCP 提供服務(wù)的話,那么在整條通信鏈路上就需要
DHCP 服務(wù)器現(xiàn)在,你不需要手動(dòng)配置 IP 地址,也不再需要管理 IP 地址了,管理權(quán)已經(jīng)移交給了 DHCP 服務(wù)器,DHCP 服務(wù)器會(huì)維護(hù) IP 地址池,在網(wǎng)絡(luò)上啟動(dòng)時(shí)會(huì)將地址租借給啟用 DHCP 的客戶端。 由于 IP 地址是動(dòng)態(tài)的(臨時(shí)分配)而不是靜態(tài)的(永久分配),因此不再使用的 IP 地址會(huì)自動(dòng)返回 IP 地址池中進(jìn)行重新分配。
網(wǎng)絡(luò)管理員負(fù)責(zé)建立 DHCP 服務(wù)器,并以租約的形式向啟用 DHCP 的客戶端提供地址配置,啊,既然不需要我管理,那就很舒服了~ 好了,現(xiàn)在你能舒舒服服的開(kāi)發(fā)了,你用 postman 配了一條 192.168.1.4/x/x 的接口進(jìn)行請(qǐng)求,請(qǐng)求能夠順利進(jìn)行,但是過(guò)了一段時(shí)間后,你發(fā)現(xiàn) 192.168.1.4/x/x 這個(gè)接口請(qǐng)求不通了,這是為啥呢?然后你用 其實(shí),這也是一個(gè) DHCP 服務(wù)器的一個(gè)功能,DHCP 服務(wù)器通常為每個(gè)客戶端分配一個(gè)唯一的動(dòng)態(tài) IP 地址,當(dāng)該 IP 地址的客戶端租約到期時(shí),該地址就會(huì)更改。 唯一意思說(shuō)的就是,如果你手動(dòng)設(shè)置了一個(gè)靜態(tài) IP,同時(shí) DHCP 服務(wù)器分配了一個(gè)動(dòng)態(tài) IP,這個(gè)動(dòng)態(tài) IP 和靜態(tài) IP 一樣,那么必然會(huì)有一個(gè)客戶端無(wú)法上網(wǎng)。
雖然 DHCP 服務(wù)器能提供 IP 地址,但是他怎么知道哪些 IP 地址空閑,哪些 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)。
好了,現(xiàn)在你知道 DHCP 服務(wù)器都需要保存哪些信息了,并且看過(guò)上面的內(nèi)容,你應(yīng)該知道一個(gè) DHCP 的組件有哪些了,下面我們就來(lái)聊一聊 DHCP 中都有哪些組件,這些組件缺一不可。 DHCP 的組件使用 DHCP 時(shí),了解所有的組件很重要,下面我為你列出了一些 DHCP 的組件和它們的作用都是什么。
現(xiàn)在 DHCP 的組件你了解后,下面我就要和你聊聊 DHCP 的工作機(jī)制了。 DHCP 工作機(jī)制在聊 DHCP 工作機(jī)制前,先來(lái)看一下 DHCP 的報(bào)文消息 DHCP 報(bào)文DHCP 報(bào)文共有一下幾種:
DHCP 的工作機(jī)制比較簡(jiǎn)單,無(wú)非就是客戶端向服務(wù)器租借 IP ,服務(wù)器提供 IP 給客戶端的這個(gè)過(guò)程唄。嗯,你很聰明,大致是這樣的,不過(guò)有一些細(xì)節(jié)需要注意下,下面我通過(guò)兩張圖來(lái)和你聊一下。 關(guān)于從 DHCP 中獲取 IP 地址的流程,主要分為兩個(gè)階段。 第一個(gè)階段是 DHCP 查找包的階段 查找包的階段主要分為兩步:第一步是 DHCP 發(fā)現(xiàn)包,第二步是 DHCP 提供包。 DHCP 客戶端在通信鏈路上發(fā)起 第二個(gè)階段是 DHCP 的請(qǐng)求階段。 DHCP 的請(qǐng)求包也分為兩步:第一步是 DHCP 請(qǐng)求包,第二步是 DHCP 確認(rèn)包。 DHCP 客戶端在通信鏈路上發(fā)起 DHCP 請(qǐng)求包,請(qǐng)求包主要是告訴 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 地址時(shí),可以發(fā)送 DHCP 狀態(tài)機(jī)我們上面知道 DHCP 會(huì)發(fā)送幾種請(qǐng)求包,我們知道,動(dòng)作肯定伴隨著狀態(tài)的更改,DHCP 也是一樣的,在 DHCP 發(fā)送/接收各種包的時(shí)候,其狀態(tài)也在發(fā)生相應(yīng)的改變。DHCP 協(xié)議可以在客戶端和服務(wù)器上運(yùn)行狀態(tài)機(jī)。狀態(tài)決定了協(xié)議接下來(lái)要處理的消息類(lèi)型。 狀態(tài)之間的轉(zhuǎn)換(箭頭)是由于接收和發(fā)送消息或者計(jì)時(shí)器到期才發(fā)生的轉(zhuǎn)換。下面是 DHCP 的狀態(tài)輪轉(zhuǎn)圖。 客戶端在開(kāi)始時(shí)沒(méi)有消息,此時(shí)處于 在 一旦 DHCP 客戶端做好選擇后,它就會(huì)發(fā)送 DHCPREQUEST 消息并進(jìn)入 在處于 Requesting 狀態(tài)下的客戶端很可能接受發(fā)送過(guò)來(lái)的 DHCPACK 消息,獲取超時(shí)時(shí)間 在第一個(gè)計(jì)時(shí)器 T1 到期時(shí),客戶端會(huì)進(jìn)入 如果沒(méi)有收到 ACK 那么 T2 會(huì)最終過(guò)期進(jìn)入 DHCP 沖突現(xiàn)在我們討論一下 DHCP 沖突的問(wèn)題,DHCP 沖突其實(shí)就是 IP
造成這種情況的原因有很多,這里我列舉兩個(gè)可能出現(xiàn)的情況:
當(dāng)檢測(cè)到 IP 沖突時(shí),通常 Windows 系統(tǒng)和 Mac 系統(tǒng)會(huì)彈出 IP 沖突的彈窗。 DHCP 中繼代理常規(guī)家庭網(wǎng)絡(luò)(土豪除外)中大多數(shù)都只有一個(gè) 如上圖所示,存在兩個(gè)網(wǎng)段 A 和網(wǎng)段 B,DHCP 客戶機(jī)和 DHCP 服務(wù)器不在一個(gè)網(wǎng)段內(nèi),所以我們?cè)谕ㄐ沛溌飞霞茉O(shè)了一個(gè)中繼代理,DHCP 客戶機(jī)通過(guò)訪問(wèn)中繼代理以達(dá)到訪問(wèn) DHCP 服務(wù)器的目的。 使用這種方式,我們不再需要在每個(gè)網(wǎng)段都設(shè)置一個(gè) DHCP 服務(wù)器,只需要在每個(gè)網(wǎng)段架設(shè)一個(gè)中繼代理即可。它可以設(shè)置 DHCP 服務(wù)器的 IP 地址,從而可以在 DHCP 服務(wù)器上為每個(gè)網(wǎng)段注冊(cè) IP 地址的分配范圍。 DHCP 客戶端會(huì)向 DHCP 中繼代理發(fā)送 DHCP 請(qǐng)求包,而 DHCP 中繼代理在收到這個(gè)廣播包之后再以單播的形式發(fā)送給 DHCP 服務(wù)器。服務(wù)器收到該包以后再向 DHCP 中繼代理返回應(yīng)答,并由 DHCP 中繼代理將此包發(fā)送給 DHCP 客戶端。 DHCP 認(rèn)證我們總是假想所有情況都能夠順利進(jìn)行,害怕出問(wèn)題,這也許意味著我永遠(yuǎn)只是個(gè)初級(jí)程序員吧。我們上面探討的 DHCP 服務(wù)器都是合理的、合法的,但是互聯(lián)網(wǎng)是一把雙刃劍,不是所有人都是合法公民。如果假設(shè)了一個(gè)未經(jīng)授權(quán)的 DHCP 服務(wù)器怎么辦?它很可能會(huì)對(duì)網(wǎng)絡(luò)造成影響。 為了避免這些問(wèn)題,在 [RFC3118] 中指定了一種認(rèn)證 DHCP 消息的方法。 它定義了一個(gè) DHCP 選項(xiàng),即Authentication 選項(xiàng),如下所示 認(rèn)證選項(xiàng)的主要目的就是確定 DHCP 消息是否來(lái)自一個(gè)授權(quán)的發(fā)送方。 身份驗(yàn)證的代碼(code)屬性值是 90,而長(zhǎng)度(Length)給出了選項(xiàng)中的字節(jié)數(shù)(不包括代碼和長(zhǎng)度字段的字節(jié))。如果協(xié)議(Protocol)和算法(Algorithm)屬性被設(shè)置為 0 ,則 我們上面聊到的只是其中的一種,還有一種更安全的方法是涉及所謂的 雖然 DHCP 認(rèn)證能夠確保安全性,但是它沒(méi)有被廣泛使用,原因有兩點(diǎn):
總結(jié)這篇文章我和你探討了計(jì)算機(jī)網(wǎng)絡(luò)中一個(gè)比較容易忽視的概念,為什么說(shuō)他容易忽視呢?因?yàn)槲覀兤匠i_(kāi)發(fā)過(guò)程中基本上不會(huì)管 IP 地址的配置的,也就是環(huán)境搭建的時(shí)候會(huì)用到一些,但是要系統(tǒng)學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)的話,DHCP 的重要性不可忽視,DHCP 包括工作機(jī)制、DHCP 報(bào)文消息,DHCP 狀態(tài)機(jī)、DHCP 認(rèn)證這些都是需要你了解并掌握的。 另外,添加我的微信 becomecxuan,加入每日一題群,每天一道面試題分享,更多內(nèi)容請(qǐng)參見(jiàn)我的 Github,成為最好的 bestJavaer,已經(jīng)收錄此篇文章,詳情見(jiàn)原文鏈接。 我自己肝了六本 PDF,微信搜索「程序員cxuan」關(guān)注公眾號(hào)后,在后臺(tái)回復(fù) cxuan ,領(lǐng)取全部 PDF,這些 PDF 如下 |
|
來(lái)自: 悅光陰 > 《待分類(lèi)》