從NAT技術及其優劣談網絡的基本設計思想

【前言】

本文章最適合的人羣爲,有基本的網絡基礎知識,至少了解OSI7層模型,IPV4協議,NATDHCP。本文比起具體技術細節更多體現的是一些設計思想,但也可能涉及一部分的技術細節。當然需要了解細節或技術基礎的小夥伴們請參考專門的資料。


【簡單介紹】

NAT network address translation 中文名爲網絡地址轉換。正如其名,NAT能轉換的是不同的網絡協議的地址,而不僅僅是同一個協議之內的地址轉換(例如,最廣泛應用的IPV4 公私網之間的地址轉換)(本文後面的NAT所指的是這一種技術),一個不同網絡層協議的轉換的實例是NAT-PTIPV4-IPV6的轉換)。

值得補充的是,NAT-PTIPV6的過渡技術中是不值得推薦的一種技術,但還是應該瞭解NAT的本質意義。下面我們還是簡單的給出在IPV4NAT應用的定義:

======================================以下摘自網絡======================================

網絡地址轉換(NAT,NetworkAddress Translation)屬接入廣域網(WAN)技術是一種將私有保留地址轉化爲合法IP地址的轉換技術它被廣泛應用於各種類型Internet 接入方式和各種類型的網絡中。原因很簡單,NAT不僅完美地解決了lP地址不足的問題,而且還能夠有效地避免來自網絡外部的***,隱藏並保護網絡內部的計算機。

NAT的實現方式有三種即靜態轉換Static Nat、動態轉換Dynamic Nat和端口多路複用OverLoad

靜態轉換是指將內部網絡的私有IP地址轉換爲公有IP地址,IP地址對是一對一的,是一成不變的,某個私有IP地址只轉換爲某個公有IP地址。藉助於靜態轉換,可以實現外部網絡對內部網絡中某些特定設備(如服務器)的訪問。

動態轉換是指將內部網絡的私有IP地址轉換爲公用IP地址時,IP地址是不確定的,是隨機的,所有被 授權訪問上Internet的私有IP地址可隨機轉換爲任何指定的合法IP地址。也就是說,只要指定哪些內部地址可以進行轉換,以及用哪些合法地址作爲外部地址時,就可以進行動態轉換。動態轉換可以使用多個合法外部地址集。當ISP提供的合法IP地址略少於網絡內部的計算機數量時。可以採用動態轉換的方 式。

端口多路複用(Port address Translation,PAT)是指改變外出數據包的源端口並進行端口轉換,即端口地址轉換(PAT,Port AddressTranslation).採用端口多路複用方式。內部網絡的所有主機均可共享一個合法外部IP地址實現對Internet的訪問,從而可以最大限度地節約IP地址資源。同時,又可隱藏網絡內部的所有主機,有效避免來自internet的***。因此,目前網絡中應用最多的就是端口多路複用方式。

一個最簡單的只轉換源地址的NAT過程如圖所示:

222624108.jpg

=========================================================================================

【NAT需求】

現在是一些總結:首先我們可以理解到私網地址設計的原因,就是爲了節省IP地址,讓IP地址可以在局域網內複用。而私網地址不可以在公網上出現,那是因爲所有的ISP路由器必須有過濾私網地址的功能。那麼爲了讓私網地址起到更強大的作用,它需要和NAT技術配合起來。


由此我們可以理解,NAT出現的需求主要是爲了解決IPV4地址缺乏的問題,當然還有人把其應用在服務器的負載均衡上,還有人認爲NAT使得網絡更安全。讓我們回到主要需求上:靜態NAT與一對一的動態NAT實際上根本不能使得地址變多,因爲這些技術都是使得公網地址與私網地址有一對一的映射關係。真正能緩解IPV4地址危機的技術是PAT端口多路複用(Portaddress Translation),通常這種技術還要和DHCP配合取得更好的效果。實際上,僅僅單一的DHCP技術也能起到節省IP地址的功能。如果僅僅是靜態分配,沒有聯網的主機將浪費了IP地址,假設沒有使用DHCP技術能同時支持的主機數爲X,則使用了DHCP讓全網同時在線的人數達到X。


回到PAT,由於端口號有65535那麼多,減去1024個知名端口理論上還有60000多個那麼多,但是實際上聯網主機的連接數一定不只有一個,所以一個IP地址大概能提供幾千臺主機同時上網(理論上如此,實際上並不會有那麼重的負載)。


最後的結論是:私網地址+DHCP+NAT(PAT)三種技術的結合,大大緩解了IP地址短缺的問題,導致我們現在的IPV4還在苦苦支撐,也因此IPV6如今還不是那麼必須

【NAT的缺陷】

我們已經看到了NAT技術強大的作用,那麼NAT的缺點呢?對NAT缺點的討論迴應了本文的主題:網絡設計問題。NAT技術實際上破壞了很多的設計原則。

·1 NAT打破了Internet端到端的連接模型。即任何一個主機可在任何時間給任何一臺主機發送數據包。設想一下采用了NAT技術的主機,當NAT盒子(實現NAT的設備可以使路由器,防火牆等)崩潰的時候,是無法正常與因特網通信的。另外一個理解是,主要採用了NAT的一方(A方)先發送數據給另一方(B方),另一方纔能與採用了NAT的一方通信。因爲只有一個最先到來的數據包告訴B方,B方纔能獲知A方與NAT的映射(即轉換後的地址)B方根本無法主動發送消息給A方。最後的問題是,如果外部的主機想使用內網的服務器,必須進行特殊的配置或者採用NAT穿越(NATtraversal)技術

·2 NAT將Internet從一個無連接網絡改變成一個面向連接的網絡特有的形式。問題在於NAT盒子必須爲每一個經過的連接維護必要的信息(映射關係)讓網絡維護連接狀態時面向連接網絡的特性而不是無連接網絡的特性。面向連接的網絡的特點是非常脆弱(尤其是,保存連接上下文信息的是NAT盒子這一種情況)。設想通信雙方在傳輸層採用TCP的情況:在無NAT情況下,路由器崩潰僅會導致未被確認的數據包重傳。但如果NAT盒子崩潰,那麼所有的TCP連接都被摧毀。

·3 NAT違反了IP的一個基本的理念與結構模型:IP的結構模型聲明IP地址唯一標識了世界上的一臺機器。但有了NAT之後,成千上萬的機器可能會使用同一個IP地址。不過,這有時候也是一種優勢,比如用在服務器的負載均衡上。

·4 最重要的一點,NAT違反了最基本的協議分層規則:第K層不應該對第K+1層在本層的有效載荷字段放什麼做任何假設。回想一下分層模型的基本作用:區分協議,服務,與接口。底層的協議對高層的協議提供的是服務,而根本不管底層協議如何實現與改變,無論底層如何演進與更新都不應該對高層有任何影響。NAT工作在網絡層,但卻要求傳輸層一定要使用有端口號的協議,如TCP,UDP。並且,如果TCP升級了,使用了32位的端口號(而不是現在的16位),NAT將無法正常工作。NAT的特性顯然破壞了層次之間的獨立性。

·5 還有一些NAT相關的疑難問題:例如,某些應用層協議(如FTP)使用多於一個的連接。在FTP應用層正文內會包含一個IP地址,用於告訴主機下一個連接的IP是什麼,但NAT不會意識到這一點,它無法識別應用層數據,因此也無法對此進行轉換。目前的解決方法是給NAT打補丁,但每次都有問題就打補丁顯然不是一個好主意。

·事實上,NAT雖然存在如此多的問題但仍然被廣泛應用,如今經常與防火牆結合在一起提供隱私性。下面我拋磚引玉(挖坑=.=)再提出一些NAT在實際應用中的問題:

1)NAT技術經常和防火牆技術結合,同樣牽扯上關係的還有***技術。通常都要採用NAT穿越來解決此類問題

2)NAT與路由相結合:NAT生效的時機究竟應該是在查找路由表之前還是之後?對於這個問題的最簡單答案是:轉換源IP的時候,通常先查找路由表再做NAT。而轉換目標IP時則相反,必須先做NAT再查找路由表(通常發生在公網數據包返回私網的情況)

3)關於NAT與防火牆/ACL過濾也有與(2)同樣的問題,即NAT與過濾生效的先後順序。本人做了如下總結:

■數據包出(私網到公網):

A 防火牆對目標地址做限制:不管是否先進行NAT,目標地址不會變,無影響

B 防火牆對源地址做限制:如果先進行NAT,則新的源地址是隨機產生的,映射關係爲動態,不可行

結論:數據包出是先經過防火牆再進行NAT。


■數據包入(公網到私網):

A 防火牆對目標地址做限制:此時的NAT映射是靜態映射,即使採用的是PAT,一個端口二元組也固定對應一個新IP端口二元組(一種服務)因此先進行NAT或先在防火牆過濾性能上是等價的

B 防火牆對源地址做限制,但NAT並不改變源地址,無影響

結論:數據包入,先進行NAT或防火牆過濾都可。

4)更深入的NAT研究-多種NAT模式

222606565.jpg


★★★非常看些看完這篇文章的大神們,如有任何疑問或錯誤請不吝賜教。

主要參考文獻:

《計算機網絡》Andrew S.T





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章