引言
在上一章中,我們詳細介紹了域名系統(DNS)和地址解析協議(ARP)的工作原理,從而對域名解析和介質訪問控制(MAC)地址定址有了更深入的瞭解。在今天的章節中,我們將繼續探討動態主機配置協議(DHCP)和網路地址轉換(NAT)技術,以便更好地理解IP地址的動態分配和解決IPv4地址枯竭問題的NAT技術的引入。
DHCP
在我們日常生活中,動態主機配置協議(DHCP)是非常常見的,儘管我們可能從未直接配置過DHCP,但它與我們息息相關。舉個例子,我們的手機需要上網,我們有沒有手動配置過IP地址呢?肯定沒有,這是因為我們的手機或者電腦已經自動透過DHCP進行了配置。我們的電腦通常會透過DHCP動態獲取IP地址,這大大簡化了繁瑣的IP配置過程。
接下來,讓我們一起來看看我們的電腦是如何透過四個步驟來獲取IP地址的過程。
首先需要說明的是,DHCP客戶端程式監聽的是埠號68,而DHCP伺服器程式監聽的是埠號67。
DHCP互動過程一共包括4個步驟:
- DHCP發現(DHCP DISCOVER):客戶端首先傳送一個DHCP發現報文,由於客戶端沒有IP地址,也不知道DHCP伺服器的地址,因此使用UDP廣播通訊。該報文使用廣播目的地址255.255.255.255(埠67),並將源IP地址設定為0.0.0.0(埠68)。DHCP客戶端將該報文傳遞給鏈路層,鏈路層將幀廣播到所有網路裝置。
- DHCP提供(DHCP OFFER):DHCP伺服器收到DHCP發現報文後,用DHCP提供報文向客戶端做出響應。該報文仍然使用廣播地址255.255.255.255,其中包含伺服器提供的可租用的IP地址、子網掩碼、預設閘道器、DNS伺服器以及租用期。
- DHCP請求(DHCP REQUEST):客戶端收到一個或多個伺服器的DHCP提供報文後,從中選擇一個伺服器,並向選中的伺服器傳送DHCP請求報文,以確認所要求的配置引數。
- DHCP確認(DHCP ACK):最後,伺服器用DHCP確認報文對DHCP請求報文進行響應,回應所要求的引數。一旦客戶端收到DHCP確認後,互動過程完成,客戶端可以在租用期內使用由DHCP伺服器分配的IP地址。
如果租用的DHCP IP地址快要到期,客戶端會向伺服器傳送DHCP請求報文:
- 如果伺服器同意繼續租用,則用DHCP確認報文進行響應,客戶端將繼續使用該IP地址並延長租期。
- 如果伺服器不同意繼續租用,則用DHCP否定確認(DHCP NACK)報文進行響應,客戶端必須停止使用該租用的IP地址。
在DHCP互動過程中,全程使用UDP廣播通訊。
咦,我發現我們正在使用廣播方式,但如果 DHCP 伺服器和客戶端不在同一個區域網中,而且路由器不會轉發廣播包,那難道每個網路都需要有一個獨立的 DHCP 伺服器嗎?
為了解決這個問題,出現了 DHCP 中繼代理。透過使用 DHCP 中繼代理,我們可以統一由一個 DHCP 伺服器來管理不同網段的 IP 地址分配。這樣,我們就能夠更有效地管理整個網路。
嗯,具體的運作過程是這樣的:當 DHCP 客戶端需要獲取 IP 地址時,它會向 DHCP 中繼代理傳送 DHCP 請求包。而 DHCP 中繼代理在接收到這個廣播包後,會將其以單播的方式傳送給 DHCP 伺服器。
一旦伺服器收到了這個包,它會向 DHCP 中繼代理返回應答,並由 DHCP 中繼代理將這個包轉發給 DHCP 客戶端。透過這種方式,即使 DHCP 伺服器和客戶端不在同一個鏈路上,我們仍然可以實現對 IP 地址的統一分配和管理。
有了 DHCP 中繼代理的存在,我們可以更加靈活地設計和管理網路,不再需要為每個網路單獨配置一個 DHCP 伺服器,從而提高了網路的效率和可擴充套件性。
NAT
IPv4 地址的緊缺性是一個現實問題。儘管我們可以透過使用無分類地址來減緩 IPv4 地址消耗速度,但是網際網路使用者的快速增長仍然導致 IPv4 地址的耗盡風險。
為了應對這個問題,我們引入了網路地址轉換(NAT)的方法,再次緩解了 IPv4 地址的耗盡問題。
簡單來說,NAT 是一種技術,它在同一公司、家庭、教室等內部網路中的主機與外部通訊時,將私有 IP 地址轉換為公共 IP 地址。
如果每個私有IP地址都需要一個對應的公有IP地址的話,那麼如何解決IPv4地址耗盡的問題呢?這種觀點似乎有些站不住腳。
普通的NAT轉換的確沒有太多意義。不過,由於絕大多數的網路應用都是使用傳輸層協議TCP或UDP來傳輸資料,所以可以將IP地址和埠號一起進行轉換。這樣一來,只需要一個全球IP地址就可以了,這種轉換技術被稱為網路地址與埠轉換NAPT。
或許這聽起來有些抽象,但是透過下面的圖解,你就能立即明白了。
在這個網路拓撲中,有兩個客戶端(192.168.1.10和192.168.1.11)同時與伺服器(183.232.231.172)進行通訊,這兩個客戶端的本地埠都是1025。
在這種情況下,兩個私有IP地址都會被轉換為公有地址120.229.175.121,但是透過使用不同的埠號進行區分。為了實現客戶端A和B與伺服器之間的同時通訊,我們需要生成一個NAPT路由器的轉換表。這個轉換表可以正確地轉換地址和埠的組合。這個轉換表是在NAT路由器上自動生成的。例如,在TCP的情況下,當建立TCP連線的初始握手SYN包傳送後,轉換表就會被生成。當收到關閉連線的FIN包的確認應答時,該條目會從轉換表中刪除。
NAT 確實有著許多優點,但難道就沒有任何侷限性嗎?
當然,沒有任何方案是完美的,NAT也有一些缺陷。其中一些問題包括:
-
外部網路無法主動與NAT內部伺服器建立連線,因為NAT轉換表中沒有相關記錄。
-
生成和轉換轉換表會帶來效能開銷,可能會影響網路通訊的速度和效率。
-
如果NAT路由器重啟,所有的TCP連線都將被重置,可能導致網路中斷和資料丟失。
-
NAT可能會導致網路延遲,尤其是在大量資料傳輸和高負載情況下。
雖然NAT在解決IPv4地址短缺問題和網路安全方面發揮了重要作用,但它也有這些限制和缺點。在實際應用中,需要權衡利弊並綜合考慮其他解決方案。
總結
在本章中,我們學習了動態主機配置協議(DHCP)和網路地址轉換(NAT)技術。DHCP是一種常見的協議,它簡化了IP地址配置的過程,透過四個步驟來實現IP地址的動態分配。DHCP中繼代理的引入使得在不同網路中只需要一個DHCP伺服器來管理IP地址的分配。而NAT技術則解決了IPv4地址的緊缺問題,透過將私有IP地址轉換為公共IP地址來實現內部網路與外部通訊。NAT還可以實現網路地址與埠轉換(NAPT),透過埠號的轉換來實現多個客戶端與伺服器的通訊。然而,NAT也存在一些侷限性,例如無法主動建立連線和效能開銷。綜上所述,DHCP和NAT技術在網路中起到了重要的作用,但在實際應用中需要綜合考慮其利弊。