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