計算機網絡 NAT

打開命令行輸入 ipconfig 查詢 ip 地址(私有地址);打開百度,輸入 ip 查詢,查詢 ip 地址(公網地址),這兩個地址是不一樣的。

私有地址不能用在 Internet上 (路由器將丟棄尋址這種地址的包) 。這些地址是不能夠在公網上面用的,只能用在局域網的內部。

私有地址有三種:①10.0.0.0~10.255.255.255/8 ②172.16.0.0~172.31.255.255/12 ③192.168.0.0~192.168.255.255/16。

工作原理

Network Address Translation,網絡地址轉換,就是替換 IP 報文頭部的地址信息。NAT 通常部署在一個組織的網絡出口位置,通過將內部網絡 IP 地址替換爲出口的 IP 地址提供公網可達性和上層協議的連接能力。

對於有 Internet 訪問需求而內部又使用私有地址的網絡,就要在組織的出口位置部署 NAT 網關,在報文離開私網進入 Internet 時,將源 IP 替換爲公網地址,通常是出口設備的接口地址。一個對外的訪問請求在到達目標以後,表現爲由本組織出口設備發起,因此被請求的服務端可將響應由 Internet 發回出口網關。出口網關再將目的地址替換爲私網的源主機地址,發回內部。這樣一次由私網主機向公網服務端的請求和響應就在通信兩端均無感知的情況下完成了。依據這種模型,數量龐大的內網主機就不再需要公有 IP 地址了。

一般使用私有 ip 作爲局域網內部的主機標識,使用公網 ip 作爲互聯網上通信的標識。

在整個 NAT 的轉換中,最關鍵的流程有以下幾點:

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

靜態 NAT

如果一個內部主機唯一佔用一個公網 IP,這種方式被稱爲一對一模型。此種方式下,轉換上層協議就是不必要的,因爲一個公網 IP 就能唯一對應一個內部主機。顯然,這種方式對節約公網 IP 沒有太大意義,主要是爲了實現一些特殊的組網需求。比如用戶希望隱藏內部主機的真實 IP,或者實現兩個 IP 地址重疊網絡的通信。

動態 NAT

它能夠將未註冊的 IP 地址映射到註冊 IP 地址池中的一個地址。不像使用靜態 NAT 那樣,無需靜態地配置路由器,使其將每個內部地址映射到一個外部地址,但必須有足夠的公有因特網 IP 地址,讓連接到因特網的主機都能夠同時發送和接收分組。

在這裏插入圖片描述

NAT重載

這是最常用的 NAT 類型。NAT重載也是動態 NAT,它利用源端口將多個私網 ip 地址映射到一個公網 ip 地址(多對一)。它也被稱爲端口地址特換(PAT)。通過使用 PAT(NAT重載),只需使用一個公網 ip 地址,就可將數千名用戶連接到因特網。其核心之處就在於利用端口號實現公網和私網的轉換。

面對私網內部數量龐大的主機,如果 NAT 只進行 IP 地址的簡單替換,就會產生一個問題:當有多個內部主機去訪問同一個服務器時,從返回的信息不足以區分響應應該轉發到哪個內部主機。此時,需要 NAT 設備根據傳輸層信息或其他上層協議去區分不同的會話,並且可能要對上層協議的標識進行轉換,比如 TCP 或 UDP 端口號。這樣 NAT 網關就可以將不同的內部連接訪問映射到同一公網 IP 的不同傳輸層端口,通過這種方式實現公網 IP 的複用和解複用。這種方式也被稱爲端口轉換PAT、NAPT或 IP 僞裝,但更多時候直接被稱爲 NAT,因爲它是最典型的一種應用模式。

舉個例子,客戶端 172.18.250.6 和百度服務器 202.108.22.5 通信,172.18.250.6 發送數據時,先轉換爲 219.155.6.240:1723(任意>1024的隨機端口),然後再利用這個身份發送數據給百度服務器,然後百度服務器迴應數據併發送給 219.155.6.240:1723,NAT 網關檢查自己的關聯表,意識到這是自己地私網中 172.18.250.6 的數據包,然後把這個數據發送給客戶端。

也就是說,利用端口號的唯一性實現了公網 ip 轉換爲私網 ip 的這一步。PAT(NAT重載)能夠使用傳輸層端口號來標識主機,因此,從理論上說,最多可讓大約 65000 臺主機共用一個公有 IP 地址。

NAT技術的優缺點

優點

  • 節省合法的公有 ip 地址
  • 地址重疊時,提供解決辦法
  • 網絡發生變化時,避免重新編址。

缺點

  • 破壞了 IP 端到端通信的能力。

IP協議的一個重要貢獻是把世界變得平等。在理論上,具有IP地址的每個站點在協議層面有相當的獲取服務和提供服務的能力,不同的IP地址之間沒有差異。人們熟知的服務器和客戶機實際是在應用協議層上的角色區分,而在網絡層和傳輸層沒有差異。一個具有IP地址的主機既可以是客戶機,也可以是服務器,大部分情況下,既是客戶機,也是服務器。端到端對等看起來是很平常的事情,而意義並不尋常。但在以往的技術中,很多協議體系下的網絡限定了終端的能力。正是IP的這個開放性,使得TCP/IP協議族可以提供豐富的功能,爲應用實現提供了廣闊平臺。因爲所有的IP主機都可以服務器的形式出現,所以通訊設計可以更加靈活。使用UNIX/LINUX的系統充分利用了這個特性,使得任何一個主機都可以建立自己的HTTP、SMTP、POP3、DNS、DHCP等服務。與此同時,很多應用也是把客戶端和服務器的角色組合起來完成功能。例如在VoIP應用中,用戶端向註冊服務器登錄自己的IP地址和端口信息過程中,主機是客戶端;而在呼叫到達時,呼叫處理服務器向用戶端發送呼叫請求時,用戶端實際工作在服務器模式下。在語音媒體流信道建立過程後,通訊雙向發送語音數據,發送端是客戶模式,接收端是服務器模式。而在P2P的應用中,一個用戶的主機既爲下載的客戶,同時也向其他客戶提供數據,是一種C/S混合的模型。上層應用之所以能這樣設計,是因爲IP協議棧定義了這樣的能力。試想一下,如果IP提供的能力不對等,那麼每個通信會話都只能是單方向發起的,這會極大限制通信的能力。細心的讀者會發現,前面介紹NAT的一個特性正是這樣一種限制。沒錯,NAT最大的弊端正在於此——破壞了IP端到端通信的能力。

  • 使 IP 會話的保持時效變短。

因爲一個會話建立後會在NAT設備上建立一個關聯表,在會話靜默的這段時間,NAT網關會進行老化操作。這是任何一個NAT網關必須做的事情,因爲IP和端口資源有限,通信的需求無限,所以必須在會話結束後回收資源。通常TCP會話通過協商的方式主動關閉連接,NAT網關可以跟蹤這些報文,但總是存在例外的情況,要依賴自己的定時器去回收資源。而基於UDP的通信協議很難確定何時通信結束,所以NAT網關主要依賴超時機制回收外部端口。通過定時器老化回收會帶來一個問題,如果應用需要維持連接的時間大於NAT網關的設置,通信就會意外中斷。因爲網關回收相關轉換表資源以後,新的數據到達時就找不到相關的轉換信息,必須建立新的連接。當這個新數據是由公網側向私網側發送時,就會發生無法觸發新連接建立,也不能通知到私網側的主機去重建連接的情況。這時候通信就會中斷,不能自動恢復。即使新數據是從私網側發向公網側,因爲重建的會話表往往使用不同於之前的公網IP和端口地址,公網側主機也無法對應到之前的通信上,導致用戶可感知的連接中斷。NAT網關要把回收空閒連接的時間設置到不發生持續的資源流失,又維持大部分連接不被意外中斷,是一件比較有難度的事情。在NAT已經普及化的時代,很多應用協議的設計者已經考慮到了這種情況,所以一般會設置一個連接保活的機制,即在一段時間沒有數據需要發送時,主動發送一個NAT能感知到而又沒有實際數據的保活消息,這麼做的主要目的就是重置NAT的會話定時器。

  • 使依賴 IP 進行主機跟蹤的機制失效。

NAT在實現上將多個內部主機發出的連接複用到一個IP上,這就使依賴IP進行主機跟蹤的機制都失效了。如網絡管理中需要的基於網絡流量分析的應用無法跟蹤到終端用戶與流量的具體行爲的關係。基於用戶行爲的日誌分析也變得困難,因爲一個IP被很多用戶共享,如果存在惡意的用戶行爲,很難定位到發起連接的那個主機。即便有一些機制提供了在NAT網關上進行連接跟蹤的方法,但是把這種變換關係接續起來也困難重重。基於IP的用戶授權不再可靠,因爲擁有一個IP的不等於一個用戶或主機。一個服務器也不能簡單把同一IP的訪問視作同一主機發起的,不能進行關聯。有些服務器設置有連接限制,同一時刻只接納來自一個IP的有限訪問(有時是僅一個訪問),這會造成不同用戶之間的服務搶佔和排隊。有時服務器端這樣做是出於DOS攻擊防護的考慮,因爲一個用戶正常情況下不應該建立大量的連接請求,過度使用服務資源被理解爲攻擊行爲。但是這在NAT存在時不能簡單按照連接數判斷。

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