更新時(shí)間:2024-06-04 08:46:49作者:佚名
點(diǎn)擊藍(lán)色“程序員cxuan”關(guān)注我
添加“星星”以便及時(shí)接收最新文章
大家好,這是cxuan計(jì)算機(jī)網(wǎng)絡(luò)系列文章的第11篇,在這篇文章中,我們來(lái)聊聊DHCP協(xié)議,在聊之前,先想象一個(gè)場(chǎng)景。
你現(xiàn)在站在地鐵上或者坐在辦公室里,你的手機(jī)或者電腦都有一個(gè)IP地址,如果你手動(dòng)輸入這個(gè)IP地址,你需要寫(xiě)下面這些東西……
在電腦上配置這些還好,一眨眼就能搞定。如果用手機(jī),就需要點(diǎn)IP地址,輸入IP地址,點(diǎn)子網(wǎng)掩碼,輸入子網(wǎng)掩碼,點(diǎn)默認(rèn)路由,輸入路由,點(diǎn)DNS服務(wù)器,輸入DNS服務(wù)器……這樣好麻煩啊。剛配置完留學(xué)之路,老板就叫你去開(kāi)會(huì),剛剛配置的地址就浪費(fèi)了。你換環(huán)境,又需要重新配置IP地址,于是又重復(fù)上述步驟。此時(shí),會(huì)議結(jié)束了,你手忙腳亂……
我們還為您節(jié)省了配置錯(cuò)誤的可能性。
上面的描述最讓人惱火的就是需要手動(dòng)配置IP地址。哇塞,為啥不能設(shè)置自動(dòng)配置IP地址呢?誰(shuí)說(shuō)不能設(shè)置的?沒(méi)錯(cuò)!那就是使用DHCP,也就是我們下面要講的。
了解 DHCP
DHCP 是動(dòng)態(tài)主機(jī)配置協(xié)議 ( Host ) 的縮寫(xiě),DHCP 可以自動(dòng)設(shè)置 IP 地址,并統(tǒng)一管理 IP 地址分配。這意味著,無(wú)論你是在開(kāi)會(huì)還是在辦公桌前工作,都可以省去手動(dòng)配置 IP 地址的繁瑣步驟。同時(shí),DHCP 也大大降低了手動(dòng)分配 IP 地址導(dǎo)致出錯(cuò)的幾率。
DHCP與IP關(guān)系密切,是IP網(wǎng)絡(luò)上使用的協(xié)議。如果要使用DHCP提供服務(wù),整個(gè)通信鏈路上都需要有DHCP服務(wù)器。連接到網(wǎng)絡(luò)上的設(shè)備使用DHCP協(xié)議向DHCP服務(wù)器申請(qǐng)IP地址,DHCP服務(wù)器會(huì)為設(shè)備分配一個(gè)唯一的IP地址。
除了 IP 地址,DHCP 服務(wù)器還會(huì)告訴您子網(wǎng)掩碼、默認(rèn)路由和 DNS 服務(wù)器。
DHCP 服務(wù)器
現(xiàn)在,您不需要手動(dòng)配置 IP 地址,也不再需要管理 IP 地址,管理工作已轉(zhuǎn)移到 DHCP 服務(wù)器,該服務(wù)器負(fù)責(zé)維護(hù) IP 地址池并在啟用 DHCP 的客戶端在網(wǎng)絡(luò)啟動(dòng)時(shí)將地址出租給它們。
由于 IP 地址是動(dòng)態(tài)的(臨時(shí)分配)而不是靜態(tài)的(永久分配),因此不再使用的 IP 地址會(huì)自動(dòng)返回到 IP 地址池以供重新分配。
那么誰(shuí)維護(hù) DHCP 服務(wù)器?
網(wǎng)絡(luò)管理員負(fù)責(zé)架設(shè)DHCP服務(wù)器,并以租約的形式向啟用DHCP的客戶端提供地址配置。啊,既然不用我管理了,那就舒服多了~
OK,現(xiàn)在你可以舒舒服服地開(kāi)發(fā)了。你用 192.168.1.4/x/x 這個(gè)接口發(fā)出請(qǐng)求,請(qǐng)求可以順利進(jìn)行。但是過(guò)了一段時(shí)間,你發(fā)現(xiàn) 192.168.1.4/x/x 這個(gè)接口的請(qǐng)求不起作用了。為什么?然后你查看自己的 IP 地址,發(fā)現(xiàn) IP 地址已經(jīng)變成了 192.168.1.7。怎么我正在使用的時(shí)候 IP 地址就變了?DHCP 就是個(gè)垃圾,一個(gè)破玩意兒!!@#¥%¥%……¥%
其實(shí)這也是DHCP服務(wù)器的一個(gè)功能,它通常會(huì)給每一個(gè)客戶端分配一個(gè)唯一的動(dòng)態(tài)IP地址,當(dāng)客戶端對(duì)該IP地址的租約到期后,該地址就會(huì)改變。
它唯一的意義在于如果你手動(dòng)設(shè)置了一個(gè)靜態(tài)IP,而DHCP服務(wù)器卻分配了一個(gè)動(dòng)態(tài)IP,并且這個(gè)動(dòng)態(tài)IP和靜態(tài)IP相同的話,那么必然會(huì)出現(xiàn)其中一個(gè)客戶端無(wú)法上網(wǎng)的情況。
我也遇到過(guò)這種情況,我虛擬機(jī)配置的靜態(tài)IP是192.168.1.8,手機(jī)也是用DHCP配置的192.168.1.8的IP地址,這時(shí)候我的虛擬機(jī)連不上網(wǎng)絡(luò),連上網(wǎng)絡(luò)后就連不上虛擬機(jī)了,檢查了一下,發(fā)現(xiàn)是IP地址沖突了...
DHCP服務(wù)器雖然可以提供IP地址,但是它如何知道哪些IP地址是空閑的,哪些IP地址正在使用呢?
其實(shí)這些信息都是在數(shù)據(jù)庫(kù)中配置的,我們來(lái)看看DHCP服務(wù)器維護(hù)了哪些信息。
這些參數(shù)主要包括主機(jī)名(Host name)、DHCP客戶端(DHCP)、域名(name)、IP地址(IP)、網(wǎng)關(guān)()、廣播地址()、默認(rèn)路由()。
OK,現(xiàn)在你知道了DHCP服務(wù)器需要保存哪些信息,看完上面的內(nèi)容,你應(yīng)該也知道DHCP有哪些組件了。現(xiàn)在我們來(lái)說(shuō)說(shuō)DHCP中都有哪些組件,這些組件一個(gè)都不能少。
DHCP 的組件
使用 DHCP 時(shí),了解所有組件非常重要。下面我列出了一些 DHCP 組件及其功能。
現(xiàn)在您了解了 DHCP 的組件,我將向您介紹 DHCP 的工作原理。
DHCP 的工作原理
在講DHCP工作機(jī)制之前我們先來(lái)了解一下DHCP報(bào)文。
DHCP 消息
DHCP 消息有以下幾種類型:
DHCP的工作機(jī)制比較簡(jiǎn)單,無(wú)非就是客戶端向服務(wù)器租用一個(gè)IP,服務(wù)器把這個(gè)IP提供給客戶端的過(guò)程。嗯,你很聰明,大致就是這樣,不過(guò)還是有些細(xì)節(jié)需要注意,我通過(guò)兩張圖跟大家說(shuō)一下。
DHCP獲取IP地址的過(guò)程主要分為兩個(gè)階段。
第一階段是DHCP查找包階段
搜索包階段主要分為兩個(gè)步驟:第一步是DHCP 包,第二步是DHCP offer包。
DHCP客戶端在通訊鏈路上發(fā)起廣播,查看鏈路上是否有可以提供DHCP數(shù)據(jù)包的服務(wù)器。然后通訊鏈路上的每個(gè)節(jié)點(diǎn)都會(huì)檢查自己是否可以提供DHCP數(shù)據(jù)包。此時(shí)DHCP服務(wù)器表示自己可以提供DHCP數(shù)據(jù)包,然后DHCP就會(huì)沿著通訊鏈路將DHCP數(shù)據(jù)包發(fā)回給DHCP客戶端。
第二階段是DHCP請(qǐng)求階段。
DHCP請(qǐng)求數(shù)據(jù)包也分為兩步:第一步是DHCP請(qǐng)求數(shù)據(jù)包,第二步是DHCP確認(rèn)數(shù)據(jù)包。
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è)置完成,接下來(lái)就可以在通信鏈路上與主機(jī)之間進(jìn)行TCP/IP通信了。
當(dāng)不再需要該 IP 地址時(shí),可以發(fā)送 DHCP 釋放數(shù)據(jù)包(DHCP )來(lái)釋放它。另外,DHCP 設(shè)置中通常有一個(gè)租約時(shí)間設(shè)置。DHCP 客戶端可以在這個(gè)時(shí)間限制內(nèi)發(fā)送 DHCP 請(qǐng)求數(shù)據(jù)包,通知自己想要延長(zhǎng)這個(gè)期限。
DHCP 狀態(tài)機(jī)
上面我們知道DHCP會(huì)發(fā)送幾個(gè)請(qǐng)求包,我們知道動(dòng)作總是伴隨著狀態(tài)的變化,DHCP也是一樣,當(dāng)DHCP發(fā)送/接收各種包的時(shí)候,它的狀態(tài)也在隨之變化,DHCP協(xié)議可以在客戶端和服務(wù)器上運(yùn)行狀態(tài)機(jī),狀態(tài)決定了協(xié)議接下來(lái)要處理的消息類型。
狀態(tài)之間的轉(zhuǎn)換(箭頭)是由于接收和發(fā)送消息或計(jì)時(shí)器到期而發(fā)生的。以下是 DHCP 的狀態(tài)輪換圖。
客戶端一開(kāi)始沒(méi)有任何消息,處于INIT狀態(tài)。然后客戶端在通信鏈路上發(fā)起廣播DHCP。
在選擇狀態(tài)下,客戶端收集消息,直到確定要使用的地址和服務(wù)器。
一旦 DHCP 客戶端做出選擇,它就會(huì)發(fā)送一條消息并進(jìn)入 DHCP 狀態(tài),在該狀態(tài)下,它很可能會(huì)收到不需要的 ACK 響應(yīng)。如果在此狀態(tài)下未找到合適的地址,客戶端將發(fā)送并恢復(fù)到 INIT 狀態(tài),但這種情況不太可能發(fā)生。
處于該狀態(tài)的客戶端有可能接受發(fā)送的消息,獲得超時(shí)時(shí)間T1和T2,然后進(jìn)入Bound狀態(tài),在該狀態(tài)下該地址可以使用,直到過(guò)期。
當(dāng)?shù)谝粋€(gè)定時(shí)器T1到期后,客戶端進(jìn)入續(xù)約狀態(tài),再次嘗試建立租約時(shí)間,如果收到新的ACK消息,則表示續(xù)約成功,然后返回到Bound狀態(tài)。
如果沒(méi)有收到 ACK,T2 最終會(huì)過(guò)期并進(jìn)入該狀態(tài)。進(jìn)入此狀態(tài)的客戶端會(huì)重新嘗試獲取地址。如果最終租約過(guò)期,客戶端必須放棄租用的地址,并且如果沒(méi)有其他地址或網(wǎng)絡(luò)連接可用,客戶端會(huì)斷開(kāi)連接。
DHCP 沖突
現(xiàn)在我們來(lái)討論一下DHCP沖突的問(wèn)題。DHCP沖突其實(shí)就是IP重復(fù),當(dāng)一個(gè)子網(wǎng)內(nèi)有兩臺(tái)或多臺(tái)主機(jī)配置了相同的IP地址時(shí),就會(huì)發(fā)生IP沖突,這種情況的后果可能是兩臺(tái)沖突的主機(jī)混在一起,一臺(tái)主機(jī)可能會(huì)收到另一臺(tái)主機(jī)的數(shù)據(jù)包。
那么造成這種情況的原因是什么呢?
造成這種情況的原因有很多。以下是兩個(gè)可能的原因:
當(dāng)檢測(cè)到IP沖突時(shí),系統(tǒng)通常會(huì)和Mac系統(tǒng)一樣彈出IP沖突彈窗。
DHCP 中繼代理
大部分常規(guī)家庭網(wǎng)絡(luò)(富人家庭除外)都只有一個(gè)以太網(wǎng),也就是一個(gè)局域網(wǎng)段,一臺(tái) DHCP 服務(wù)器完全可以滿足局域網(wǎng)內(nèi)客戶端的需求。但在更復(fù)雜的網(wǎng)絡(luò)中,比如企業(yè)或者學(xué)校,一臺(tái) DHCP 服務(wù)器顯然是不夠的。因此這種情況下往往需要對(duì) DHCP 進(jìn)行統(tǒng)一管理,具體實(shí)現(xiàn)方式可以是通過(guò) DHCP 中繼代理來(lái)轉(zhuǎn)發(fā) DHCP 流量,如下圖所示。
如上圖所示,有A、B兩個(gè)網(wǎng)段,DHCP客戶端與DHCP服務(wù)器不在同一網(wǎng)段,因此我們?cè)谕ㄓ嶆溌飞显O(shè)置中繼代理,DHCP客戶端通過(guò)訪問(wèn)中繼代理來(lái)訪問(wèn)DHCP服務(wù)器。
采用這種方法,我們不再需要在每個(gè)網(wǎng)段上都架設(shè)一臺(tái)DHCP服務(wù)器,而只需要在每個(gè)網(wǎng)段上架設(shè)一個(gè)中繼代理,它可以設(shè)置DHCP服務(wù)器的IP地址,這樣就可以將每個(gè)網(wǎng)段的IP地址分配范圍都注冊(cè)到DHCP服務(wù)器上。
DHCP客戶端向DHCP中繼代理發(fā)送DHCP請(qǐng)求報(bào)文,DHCP中繼代理收到廣播報(bào)文后,以單播形式發(fā)送給DHCP服務(wù)器,DHCP服務(wù)器收到報(bào)文后,返回應(yīng)答給DHCP中繼代理,DHCP中繼代理再將報(bào)文發(fā)送給DHCP客戶端。
DHCP 身份驗(yàn)證
我們總是假設(shè)一切都會(huì)順利,害怕出現(xiàn)問(wèn)題。這可能意味著我永遠(yuǎn)只是一名初級(jí)程序員。上面我們討論的 DHCP 服務(wù)器都是合理合法的,但互聯(lián)網(wǎng)是一把雙刃劍,并不是每個(gè)人都是合法公民。如果假設(shè)了一個(gè)未經(jīng)授權(quán)的 DHCP 服務(wù)器怎么辦?很可能會(huì)影響網(wǎng)絡(luò)。
為了避免這些問(wèn)題,在[]中指定了一種對(duì)DHCP消息進(jìn)行身份驗(yàn)證的方法。它定義了一個(gè)DHCP選項(xiàng),,如下所示
認(rèn)證選項(xiàng)的主要目的是確定 DHCP 消息是否來(lái)自授權(quán)發(fā)送者。
身份驗(yàn)證代碼屬性值為 90,() 給出選項(xiàng)中的字節(jié)數(shù)(不包括代碼和長(zhǎng)度字段的字節(jié)數(shù))。如果 () 和 () 屬性設(shè)置為 0,則身份驗(yàn)證信息字段將保存一個(gè)簡(jiǎn)單的共享配置令牌。只要客戶端和服務(wù)器上的配置令牌匹配,就會(huì)接受該消息。
上面我們講的只是其中一種,還有一種更安全的方法,就是所謂的延遲認(rèn)證。如果協(xié)議和算法都設(shè)置為1,就表示使用延遲認(rèn)證。在這種情況下,客戶端的消息或消息中包含認(rèn)證選項(xiàng),服務(wù)器用其中或消息中包含的認(rèn)證信息進(jìn)行響應(yīng)。這個(gè)認(rèn)證信息包括消息認(rèn)證碼,它提供發(fā)送者的認(rèn)證和消息的完整性驗(yàn)證。RDM 代表中繼檢測(cè)。中繼檢測(cè)包括單項(xiàng)增量值,只要經(jīng)過(guò)代理中繼,這個(gè)中繼檢測(cè)的值就會(huì)+1。
雖然 DHCP 身份驗(yàn)證可以確保安全性,但由于以下兩個(gè)原因,它尚未得到廣泛應(yīng)用:
總結(jié)
這篇文章我跟大家討論一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)中很容易被忽略的概念。為什么容易被忽略呢?因?yàn)槲覀冊(cè)陂_(kāi)發(fā)的時(shí)候通常不會(huì)關(guān)心IP地址的配置,也就是在搭建環(huán)境的時(shí)候才會(huì)用到。但是如果你想系統(tǒng)地學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)default是什么意思default是什么意思,DHCP的重要性是不能忽視的。DHCP包括工作機(jī)制、DHCP消息信息、DHCP狀態(tài)機(jī)、DHCP認(rèn)證等,這些都是你需要了解和掌握的。
超過(guò)
先前的建議
另外,cxuan整理了6個(gè)PDF,在公眾號(hào)回復(fù)cxuan即可收到作者全部PDF。