目前存在三種地址轉換方式。壹種是經常被簡記為NAT的網絡地址轉換(有時也叫做“網絡地址端口轉換”,記做NAPT),這種方式支持端口的映射並允許多臺主機***享壹個公用IP地址。
第二種也可以稱作NAT或“基本NAT”,“靜態NAT,但在技術上更簡單壹點,僅支持地址轉換,不支持端口映射,這就需要對每壹個當前連接都要對應壹個IP地址。寬帶(broadband)路由器通常使用這種方式來允許壹臺指定的計算機去接收所有的外部連接,甚至當路由器本身只有壹個可用外部IP時也如此,這臺路由器有時也被標記為DMZ主機。
第三種稱作動態NAT(pooledNAT)是在外部網絡中定義了壹系列的合法地址,采用動態分配的方式映射到內部網絡。
支持端口轉換的NAT又可以分為兩類:源地址轉換和目的地址轉換NAT 。前壹種情形下發起連接的計算機的IP地址將會被重寫,後壹種情況下被連接計算機的IP地址將被重寫。實際上,以上兩種方式通常會壹起使用以支持雙向通信。
受到NAT影響的應用程序
壹些高層協議(比如FTP,Quake,SIP)是在IP包的有效數據內發送網絡層(第三層)信息的。比如,主動模式的FTP使用單獨的端口分別來控制命令傳輸和數據傳輸。當請求壹個文件傳輸時,主機在發送請求的同時也通知對方自己想要在哪個端口接受數據。但是,如果主機是在壹個簡單的NAT防火墻後發送的請求,那麽由於端口的映射將會使對方接收到的信息無效。
壹個應用層網關(Application Layer Gateway或ALG)可以修正這個問題。運行在NAT防火墻設備上的ALG軟件模塊可以更新任何由地址轉換而導致無效的信息。顯然,ALG需要明白它所要修正的上層協議,所以每個有這種問題的協議都需要有壹個單獨的ALG。
但是,除FTP外的大多數傳統的客戶機-服務器協議不需要發送網絡層(第三層)信息,也就不需要ALG。
這個問題的另壹個可能的解決方法是使用象STUN這樣的技術,但是這只針對建立在UDP上的高層協議,並且需要它內建這中技術。這種技術對對稱NAT也是無效的。還有壹種可能的方案是UPnP,但它需要和NAT設備配合起來使用