1 概述瀏覽器
1.1 簡介緩存
NAT英文全稱是「Network Address Translation」,中文意思是「網絡地址轉換」,它是一個IETF(Internet Engineering Task Force, Internet工程任務組)標準,容許一個總體機構以一個公用IP(Internet Protocol)地址出如今Internet上。顧名思義,它是一種把內部私有網絡地址(IP地址)翻譯成合法網絡IP地址的技術。所以咱們能夠認爲,NAT在必定程度上,可以有效的解決公網地址不足的問題。安全
1.2 分類服務器
NAT有三種類型:靜態NAT(Static NAT)、動態地址NAT(Pooled NAT)、網絡地址端口轉換NAPT(Port-Level NAT)。網絡
其中,網絡地址端口轉換NAPT(Network Address Port Translation)則是把內部地址映射到外部網絡的一個IP地址的不一樣端口上。它能夠將中小型的網絡隱藏在一個合法的IP地址後面。NAPT與 動態地址NAT不一樣,它將內部鏈接映射到外部網絡中的一個單獨的IP地址上,同時在該地址上加上一個由NAT設備選定的端口號。網站
NAPT是使用最廣泛的一種轉換方式,在HomeGW中也主要使用該方式。它又包含兩種轉換方式:SNAT和DNAT。spa
(1)源NAT(Source NAT,SNAT):修改數據包的源地址。源NAT改變第一個數據包的來源地址,它永遠會在數據包發送到網絡以前完成,數據包假裝就是一具SNAT的例子。翻譯
(2)目的NAT(Destination NAT,DNAT):修改數據包的目的地址。Destination NAT恰好與SNAT相反,它是改變第一個數據懈的目的地地址,如平衡負載、端口轉發和透明代理就是屬於DNAT。代理
咱們在沒有理解NAT原理前固然理解不了上面所說的功能,咱們先看下NAT的原理。路由
2 原理
2.1 地址轉換
NAT的基本工做原理是,當私有網主機和公共網主機通訊的IP包通過NAT網關時,將IP包中的源IP或目的IP在私有IP和NAT的公共IP之間進行轉換。
以下圖所示,NAT網關有2個網絡端口,其中公共網絡端口的IP地址是統一分配的公共 IP,爲202.20.65.5;私有網絡端口的IP地址是保留地址,爲192.168.1.1。私有網中的主機192.168.1.2向公共網中的主機202.20.65.4發送了1個IP包(Dst=202.20.65.4,Src=192.168.1.2)。
當IP包通過NAT網關時,NAT Gateway會將IP包的源IP轉換爲NAT Gateway的公共IP並轉發到公共網,此時IP包(Dst=202.20.65.4,Src=202.20.65.5)中已經不含任何私有網IP的信息。因爲IP包的源IP已經被轉換成NAT Gateway的公共IP,Web Server發出的響應IP包(Dst= 202.20.65.5,Src=202.20.65.4)將被髮送到NAT Gateway。
這時,NAT Gateway會將IP包的目的IP轉換成私有網中主機的IP,而後將IP包(Des=192.168.1.2,Src=202.20.65.4)轉發到私有網。對於通訊雙方而言,這種地址的轉換過程是徹底透明的。轉換示意圖以下。
若是內網主機發出的請求包未通過NAT,那麼當Web Server收到請求包,回覆的響應包中的目的地址就是私網IP地址,在Internet上沒法正確送達,致使鏈接失敗。
2.2 鏈接跟蹤
在上述過程當中,NAT Gateway在收到響應包後,就須要判斷將數據包轉發給誰。此時若是子網內僅有少許客戶機,能夠用靜態NAT手工指定;但若是內網有多臺客戶機,而且各自訪問不一樣網站,這時候就須要鏈接跟蹤(connection track)。以下圖所示:
在NAT Gateway收到客戶機發來的請求包後,作源地址轉換,而且將該鏈接記錄保存下來,當NAT Gateway收到服務器來的響應包後,查找Track Table,肯定轉發目標,作目的地址轉換,轉發給客戶機。
2.3 端口轉換
以上述客戶機訪問服務器爲例,當僅有一臺客戶機訪問服務器時,NAT Gateway只須更改數據包的源IP或目的IP便可正常通信。可是若是Client A和Client B同時訪問Web Server,那麼當NAT Gateway收到響應包的時候,就沒法判斷將數據包轉發給哪臺客戶機,以下圖所示。
此時,NAT Gateway會在Connection Track中加入端口信息加以區分。若是兩客戶機訪問同一服務器的源端口不一樣,那麼在Track Table里加入端口信息便可區分,若是源端口正好相同,那麼在執行SNAT和DNAT的同時對源端口也要作相應的轉換,以下圖所示。(這裏的理解灰常重要)
如今就能夠理解NAT協議的應用了吧。
3.NAT協議的應用
NAT主要能夠實現如下幾個功能:數據包假裝、平衡負載、端口轉發和透明代理。
數據假裝: 能夠將內網數據包中的地址信息更改爲統一的對外地址信息,不讓內網主機直接暴露在因特網上,保證內網主機的安全。同時,該功能也經常使用來實現共享上網。
端口轉發: 當內網主機對外提供服務時,因爲使用的是內部私有IP地址,外網沒法直接訪問。所以,須要在網關上進行端口轉發,將特定服務的數據包轉發給內網主機。
負載平衡: 目的地址轉換NAT能夠重定向一些服務器的鏈接到其餘隨機選定的服務器。(不是很明白)
失效終結: 目的地址轉換NAT能夠用來提供高可靠性的服務。若是一個系統有一臺經過路由器訪問的關鍵服務器,一旦路由器檢測到該服務器當機,它可使用目的地址轉換NAT透明的把鏈接轉移到一個備份服務器上。(如何轉移的?)
透明代理: NAT能夠把鏈接到因特網的HTTP鏈接重定向到一個指定的HTTP代理服務器以緩存數據和過濾請求。一些因特網服務提供商就使用這種技術來減小帶寬的使用而不用讓他們的客戶配置他們的瀏覽器支持代理鏈接。(如何重定向的?)