NAT技術詳解(網絡地址轉換)

組織對不起,90年的事我瞞不住了——NAT(網絡地址轉換)

NAT(Network Addresss Translation),網絡地址轉換,本質上是一種允許在互聯網的不同地方重複使用相同的IP地址集的機制,同時作爲公網IP地址和私網IP地址的過渡環節,同時也具有了一定的防禦功能——過濾數據包。NAT作爲IPv4和IPv6的過渡方案,它的出現緩解了20世紀90年代初的IPv4地址數量不足的問題。,但也在一定程度上阻撓了IPv6的發展。

NAT是一個非常複雜的東西,因爲NAT與許多協議都有着非常緊密的關係,特別是防火牆,許多協議甚至針對NAT會有一些特定的規定。很難在一篇文章內將這些亂七八糟的的東西,全部都講的非常清楚,該文章只講述NAT一些比較基礎的概念,與其他協議交互方面不打算細說。

致敬一下大佬的文章:CSDN博主逃離地球的小小呆的《NAT(地址轉換技術)詳解》,大佬的文章給我了許多幫助,讓我在看TCP/IP協議的時候有了更加深刻的理解。
網址:https://blog.csdn.net/gui951753/article/details/79593307?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

1. 那一年(20世紀90年代)互聯網的發展究竟遭遇了什麼

20世紀80年代,也就是互聯網剛剛出現的時候,由於受到硬件條件的限制,IPv4網絡地址最多可以分配16 777 216+65 536+256 = 16 843 008個,而且還是一個蘿蔔一個坑,一個電腦一個IP地址。這種主機數量在80年代確實也沒有什麼問題,但是到了90年代IPv4地址數量不足的問題開始越來越嚴重。
在這裏插入圖片描述
在這裏插入圖片描述
在當時有兩個方法處理這個問題:一個是IPv6地址,一種在現有的基礎上進行改造,並且採取有效的措施來管理IP地址的分配和使用(也就是現在的NAT)。但是全都用IPv6地址,硬件措施跟不上(很貴,小錢包頂不住啊)。所以,爲了省錢,當時互聯網大佬就在IPv4上發展出了子網,同時也有了NAT在子網內允許地址重複的協議。採用NAT技術之後,互聯網地址就不再需要是全球唯一的,因此可以在互聯網的不同部分(稱爲地址範圍(address realm))被重複使用。允許在多個範圍中的同一地址重複使用,大大緩解了地址耗盡的問題。一個坑可以塞多幾個地瓜,這個世界的IP地址也分成了公網IP和私網IP。

那麼事實證明,這個NAT協議那是相當的頂,直到最近IPv4的43億個地址才被分配完成。

2011年2月3日中國農曆新年, IANA對外宣佈:IPv4地址空間最後5個地址塊已經被分配給下屬的5個地區委員會。2011年4月15日,亞太區委員會APNIC對外宣佈,除了個別保留地址外,本區域所有的IPv4地址基本耗盡。UTC+1時間2019年11月25日 15:35 分(北京時間 22:35 分),負責英國、歐洲、中東和部分中亞地區互聯網資源分配的歐洲網絡協調中心(RIPE NCC)宣佈,全球所有 43 億個 IPv4 地址已全部分配完畢,這意味着沒有更多的 IPv4 地址可以分配給 ISP(網絡服務提供商)和其他大型網絡基礎設施提供商。(騰訊新聞,百度百科)——————————圖片來自CSDN諮詢,下文鏈接。

在這裏插入圖片描述

但具有諷刺意味的是,快速發展和廣泛使用的NAT卻嚴重影響了IPv6的推進進程。在IPv6的諸多益處中,其中一項就是使得不再需要NAT。

上面提到的IPv4,IPv6,子網都是一些很長的事情,所以我不打算細說。在這裏放一個鏈接,有興趣看一下。(博主自己的還沒有寫嘛)

  1. CSDN博主逃離地球的小小呆的《子網劃分詳解與子網劃分實例精析》,網址:https://blog.csdn.net/gui951753/article/details/79412524?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
  2. CSDN博主chao199512的《IPV4與IPV6的區別(史上最詳細)》,網址:https://blog.csdn.net/chao199512/article/details/86139714

2. 講完了NAT的前世今生,來更加直觀的感受到NAT的作用

1.打開百度搜索->打IP地址查詢
在這裏插入圖片描述

2.用命令行,《如何在電腦上查找ip地址》,網址:http://xinzhi.wenda.so.com/a/1520415964612980
在這裏插入圖片描述
電腦IP:169.254.120.+++以及113.117.208.+++,有明顯的不同,這就是NAT非常直觀的一種體現:私網IP和公網IP的不同。
在這裏插入圖片描述

3. NAT工作機理(數據進入之前的處理)

NAT的工作原理就是重寫通過路由器的數據包的識別信息,可以這樣不太準確的理解,NAT的工作原理就是替換IP報文頭部的地址信息,實現由公網IP地址向私網IP地址的轉換

NAT需要重寫往一個方向傳輸的數據包的源IP地址,重寫往另一個方向傳輸的數據包的目的IP地址。這允許傳出的數據包的源IP地址變爲NAT路由器中面向Intemet的網絡接日地址,而不是原始主機的接口地址。因此,在另外一邊的互聯網上的主機看來,數據包是來自於具備全局路由IP的NAT路由器,而不是位於NAT內部的私有地址的主機。

3.1 對於如何替換IP報文頭部的地址信息,有兩種基本思路:

基本NAT(即靜態NAT)和NAPT(也稱爲動態NAT),除非進行區分很重要,否則我們所說的NAT將同時包括傳統的NAT和NAPT。

  1. 基本NAT,也稱爲靜態NAT(邊路單挑,極限一換一):利用地址池中的地址重寫IP地址,但是保留端口不變,即只執行IP地址重寫,本質上就是將私有地址改寫爲一個公共地址——往往取自於一個由ISP(Internet服務供應商)提供的地址池或公有地址範圍。這種類型的NAT不是最流行的,因爲它無助於減少需要使用的IP地址數量,而且全局可路由的地址數量必須大於或等於希望同時訪間Intemet的內部主機數量。
  2. NAPT,也稱爲動態NAT(團戰多對多):NAPT也稱爲IP僞裝,通常將所有的地址都重寫到一個地址,NAPT有時必須重寫端口號,以避免衝突。NAPT使用傳輸層標識符(即TCP和UDP端日, ICMP查詢標識符)來確定一個特定的數據包到底和NAT內部的哪臺私有主機關聯。這使得大量的內部主機(即好幾千臺)能夠同時訪問互聯網,而使用的公有地址數量卻很少,通常只需要一個。
    在這裏插入圖片描述

在NAT “後面”或者“內部”使用的私有地址範圍不受除了本地網絡管理人員之外的任何人的限制。因此,有可能在私有範圍內採用全局地址空間。原則上,這是可以接受的。然而,當這樣的全局地址也被互聯網上的另一個實體所使用時,在私有範圍內的本地系統極有可能無法達到使用相同地址的公共系統,這是因爲採用相同地址的本地系統會屏蔽掉使用相同地址的遠端系統。

爲了避免這種不良情況的發生,保留了三個IPv4地址範圍作爲私有地址範圍使用 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/160這些地址範圍經常被用來作爲嵌人式DHCP服務器的地址池的默認值。

3.2 NAT工作步驟

  1. 網絡被分爲私網和公網兩個部分,NAT網關設置在私網到公網的路由出口位置,雙向流量必須都要經過NAT網關
  2. 網絡訪問只能先由私網側發起,公網無法主動訪問私網主機;
  3. NAT網關在兩個訪問方向上完成兩次地址的轉換或翻譯,出方向做源信息替換,入方向做目的信息替換;
  4. NAT網關的存在對通信雙方是保持透明的;
  5. NAT網關爲了實現雙向翻譯的功能,需要維護一張關聯表,把會話的信息保存下來。

3.3 也正是因爲NAT重寫數據包的識別信息的基本原理,帶來許多問題

  1. 需要做特殊配置才能使處於NAT內部的主機能夠提供可供互聯網訪問的服務,因爲互聯網上的用戶無法直接訪問具備私有地址的主機,
  2. 同時NAT協議破壞了破壞了IP端到端通信的能力,讓外網無法直接訪問NAT之後的主機提供的服務。(比如翻牆出去懟某國“** virus”)
  3. 爲了使NAT正常工作,每一個隸屬於同一個連接或關聯的雙向數據包都必須通過相同的NAT。這是因爲NAT必須重寫每個數據包的尋址信息,以便私有地址空間的系統和Intemet主機之間能夠正常通信。
  4. NAT會對一些應用協議造成困擾,尤其是那些在應用層的有效載荷內記錄IP地址信息的協議。NAT在實現上將多個內部主機發出的連接複用到一個IP上,這就使依賴IP進行主機跟蹤的機制都失效了。如網絡管理中需要的基於網絡流量分析的應用無法跟蹤到終端用戶與流量的具體行爲的關係。基於用戶行爲的日誌分析也變得困難,因爲一個IP被很多用戶共享,如果存在惡意的用戶行爲,很難定位到發起連接的那個主機。
  5. NAT使IP會話的保持時效變短。因爲一個會話建立後會在NAT設備上建立一個關聯表,在會話靜默的這段時間,NAT網關會進行老化操作。

弊端5:參考了,CSDN博主逃離地球的小小呆的《NAT(地址轉換技術)詳解》,網址:https://blog.csdn.net/gui951753/article/details/79593307?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

4. NAT訪問:地址和端口轉換行爲(數據報過了NAT之後的處理)

這一點應該大部分用於NAPT,用來處理公網IP地址向私網IP地址轉換問題。

  1. 使用符號X:x表示在私有地址範圍中的主機使用IP地址X、端口號x
  2. Y:y表示遠程地址Y:y
  3. NAT需要NAT需要使用一個外部地址(通常是公共的和全局路由的) x1′和端日號x1l′來創建一個映射

在這裏插入圖片描述
在這裏插入圖片描述

4.1 過濾行爲

在這裏插入圖片描述

4.2 端口轉發,處理位於NAT之後的服務器

通過端口轉發,進人NAT的流量被轉發到一個位於NAT後面的特定配置的目的地址。通過採用NAT端口轉發,就可以讓服務器給互聯網提供服務,即使它們被分配了私有的、不可路由的地址。

端口轉發,通常需要採用轉發到的服務器的地址和端口號來靜態配置NAT端口轉發就像一個始終存在的靜態NAT映射。如果服務器的IP地址被更改, NAT必須更新尋址信息。端口轉發也有侷限性,只有一個端口號集合用於綁定每個(IP地址,傳輸協議)組合。因此,如果NAT只有一個外部IP地址,它最多將相同傳輸協議的一個端口轉發到一個內部機器。

4.3 髮夾和NAT環回,處理處於同一個NAT私有地址空間內服務器訪問問題

在這裏插入圖片描述

5. NAT穿越(NAT-T,NAT traversal)(進入的過程中的處理)

那麼好前面講完了,公網IP與端口和私網IP地址與端口如何進行轉換的問題,現在來談一下使用了NAT設備之後主機之間如何創建連接的問題。

NAT穿越(NAT traversal)涉及TCP/IP網絡中的一個常見問題,即在處於使用了NAT設備的私有TCP/IP網絡中的主機之間建立連接的問題。

5.1 針孔(pinhole)和打孔(hole punching)

先講解一下概念:

  1. 當NAT對在執行時間內的單一應用程序創建一種臨時映射,且這種臨時映射只允許通過一部分的臨時信息流量,這種映射被稱爲針孔(pinhole),隨着程序之間的通信,針孔通常會動態地創建和刪除。
  2. 通過採用針孔試圖使位於NAT之後的兩個或兩個以上的系統直接通信的方法稱爲打孔(hole punching)。

爲了打一個孔,一個客戶機需通過一個向外的連接來訪問一臺已知的服務器,這樣便在本地的NAT中創建了一個映射。當另一個客戶機訪問同一臺服務器時,由於服務器和每個客戶機均有連接,因此知道它們的外部尋址信息。它然後在客戶機之間交換它們的外部尋址信息。一旦知道了這個信息,一個客戶機便可以嘗試直接連接到其他的客戶機。流行的對等應用Skype便使用了這種方法。
在這裏插入圖片描述

5.2 單邊的自地址確定(UNilateral Self-Address)

單邊的自動地址確定(UNSAF,UNilateral Self-Address),確定如何識別通過NAT的流量的啓發式嘗試,它是一個脆弱的過程,類似於ICE技術,已被推薦爲其他替代品)。

應用程序使用一系列方法來定位其流量在通過NAT時所採用的地址。這便稱爲確定(fixing) (學習和維護)地址信息。地址確定的方法分爲直接和間接兩種。

  1. 間接方法涉及通過NAT與NAT交換流量來推測其行爲,這是最廣泛的用法,最知名便是VoIP應用。VoIP應用參考:CSDN博主葉廣明_微信ye_guangming的《VOIP簡介》,網址:https://blog.csdn.net/china_video_expert/article/details/70164428
  2. 直接方法涉及應用程序和NAT本身通過一個或多個特殊協議(還不是IETF的標準)來進行直接會話。

5.3 NAT的會話穿越工具:STUN

一個UNSAF和NAT穿越的主要功能,就是NAT會話穿越工具(SessionTraversal Utilities for NAT, STUN) 。 STUN源自於UDP簡單隧道穿越NAT(Simple Tumeling of UDP through NAT),現在被稱爲“經典的STUN” 。STUN服務器的主要工作是回顯發送給它的STUN請求,以確定客戶端的尋址信息。它需要在NAT一側存在一臺有效的“其他”合作服務器,以及幾臺被配置了全局IP地址的可在互聯網上被訪間到的公共STUN服務器。

STUN被設想爲一種“臨時”的解決方案,直到制定和實施更復雜的直接協議,或由於IPv6的廣泛採用而使得NAT成爲過時的。 作爲一個相對比較簡單的客戶機/服務器協議,它能夠以在多種環境中確定在NAT中使用的外部IP地址和端口號,也可以通過保持激活的信息來維持當前的NAT綁定。

5.3.1 STUN報頭結構

在這裏插入圖片描述
在這裏插入圖片描述

5.4 利用NAT中繼的穿越(最後一手保證措施)

利用NAT中繼的穿越(Traversal Using Relays around NAT,TURN)爲多個系統提供了一種通信方式,即使它們均位於並未協作的NAT後。作爲支持在這種情況下通信的最後手段,它需要一箇中繼服務器在無法通信的系統之間傳遞數據。使用STUN和一些TURN特定報文的擴展,即使大多數其他方法都失敗了它也能照樣支持通信,只要每個客戶端均能連接到不在NAT後的公共服務器。
在這裏插入圖片描述
通常位於NAT後的TURN客戶機會訪問位於公共互聯網上的TURN服務器,並暗示了它希望連接的其他系統(稱爲對等(peer))。通過使用一種特殊的DNSNAPTR記錄,或通過手動配置,便可以找到用於通信的服務器的地址和相應的協議。

客戶端從服務器端獲待的地址和端口信息,稱爲中繼傳輸地址(relayed transport address),就是TURN服務器用於和其他對等客戶機通信的地址和端日號。客戶端也獲得了它自已的服務器反向傳輸地址。對等客戶機也得到了代表它們外部地址的服務器反向傳輸地址。這些地址是客戶端和服務器用來連接客戶機及其對等所必需的。交換尋址信息的方窪並沒有在TURN中定義。相反,爲了能夠更加有效地使用TURN服務器,這些信息必須使用其他一些機制來完成交換。

5.4.1 TURN請求利用了STUN報文的形式

TURN請求採用了STUN報文的形式,其中報文類型是一個分配請求。

TURN通過6種方法、 9個屬性以及6個錯誤響應代碼增強STUN。這些大致可以分爲支持建立和維護分配、認證以及操作隧道。6種方法和它們的方法號如下:分配(Allocate) ( 3 ),刷新(Refresh) (4),發送(Send) (6),數據(Data) (7),創建權限(CreatePermission) (8),隧道綁定(CharmelBind)( 9 )。

前兩種方法用於建立並保持分配存活。 Send和Data使用STUN報文封裝從客戶端發送到服務器的數據,反之亦然o GreatePermission用於創建或刷新一個權限, CharmelBind通過一個16位的隧道號與一個特定的對等客戶端相關聯。錯誤報文表明與TURN功能相關的間題,如認證失敗或資源耗盡。
在這裏插入圖片描述

5.5 交互連接建立(Interactive Cormectivity Establishment, ICE)

鑑於NAT的廣泛部署及各種爲穿越它們所必須採用的機制,一種稱爲交互式連接建立( Interactive Cormectivity Establishment, ICE) 的通用功能被髮展出來,用於幫助位於NAT後的UDP應用程序主機建立連接。ICE是一套啓發式,利用它應用程序能夠以一個相對可預見的方式來執行UNSAF。在它的操作中, ICE使用了其他協議,如TURN和STUN。

6. 參考資料

  1. CSDN博主逃離地球的小小呆的《NAT(地址轉換技術)詳解》,網址:https://blog.csdn.net/gui951753/article/details/79593307?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
  2. CSDN博主擒賊先擒王的《NAT 詳解》,網址:https://blog.csdn.net/freeking101/article/details/77962312?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
  3. CSDN博主chao199512的《IPV4與IPV6的區別(史上最詳細)》,網址:https://blog.csdn.net/chao199512/article/details/86139714
  4. CSDN博主三支菸的《華爲路由器NAT經典配置》(轉載),網址:https://blog.csdn.net/qq_36357820/article/details/78918630?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5
  5. CSDN博主曹世宏的博客的《NAT穿越(NAT-T)原理》,網址:https://blog.csdn.net/qq_38265137/article/details/89423809
  6. CSDN博主葉廣明_微信ye_guangming的《VOIP簡介》,網址:https://blog.csdn.net/china_video_expert/article/details/70164428
  7. CSDN諮詢《最後一個 IPV4 地址分配完畢,正式向IPV6過渡!》郵件截圖,網址:https://blog.csdn.net/j3T9Z7H/article/details/103306122
  8. 騰訊新聞《全球最後5個IPv4地址被分配 亞太IP將先耗盡》,網址:https://tech.qq.com/a/20110204/000053.htm
  9. TCP/IP協議詳解(原書第二版)卷一,協議:P23,P209—P247
  10. 如何在電腦上查找ip地址》,網址:http://xinzhi.wenda.so.com/a/1520415964612980
  11. 百度百科《 NAT穿越》,網址:https://baike.baidu.com/item/NAT%E7%A9%BF%E8%B6%8A/2366420?fr=aladdin

在這裏插入圖片描述

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