通訊網路/NAT 和 PAT 協議
當 IP 地址被引入時,只有理論上的四 十億個 IP 地址中的一小部分可供分配。在早期,這並不是一個問題,因為網際網路僅用於學術研究人員、少數高科技公司和美國政府之間的使用。但隨著網際網路在 1990 年代中期普及,很快就 明顯地發現,沒有足夠的 IP 地址來滿足需求。作為回應,IPv6 被提議作為一種長期解決方案。但 IPv6 與 IPv4 非常不同,並且具有複雜性,這減緩了其採用速度。因此,需要一種實用的短期解決方案,於是引入了網路地址轉換 (NAT)。
NAT 背後的基本理念是為 NAT 裝置分配一個 IP 地址。我們將此稱為公共 IP 地址。在 NAT 裝置後面的本地網路中,每個計算裝置都會被分配一個私有 IP 地址,如下所示
在圖 1 中,NAT 裝置的公共 IP 地址是 145.12.131.7,而私有 IP 地址在 192.168.X.X 範圍內。這個私有 IP 地址範圍是三個常見範圍之一
Class A: 10.0.0.0 - 10.255.255.255/8 Class B: 172.16.0.0 - 172.31.255.255/12 Class C: 192.168.0.0 - 192.168.255.255/16
請記住,私有 IP 地址僅在該本地區域網內有效。它在公共網際網路上不被識別。對於來自私有 IP 地址和埠的資料包,必須將其轉換為唯一的公共 IP 地址和埠,然後才能將其傳送到網際網路。從私有 IP 地址和埠到公共 IP 地址和埠的對映通常透過 NAT 裝置內部的轉換表完成。圖 2 顯示了一個示例
在步驟 1 中,私有 IP 地址為 192.168.100.3 的主機透過埠 3855 上的 HTTP 請求請求 www.yahoo.com 的主頁。當 HTTP 資料包到達 NAT 裝置(步驟 2)時,它會查詢轉換表,查詢此私有(IP 地址,埠)組合的現有公共(IP 地址,埠)條目。如果不存在現有條目,則 NAT 裝置將建立一個新的公共(IP 地址,埠)條目。如果存在現有條目,則轉換過程將使用現有條目。請記住,轉換表中的每個條目都必須始終保持唯一!完成表查詢後,IP 資料包將被更改,以便新的 IP 地址和埠替換舊的 IP 地址和埠。最後,在步驟 3 中,更改後的資料包被路由到 www.yahoo.com。整個網路地址轉換過程對於最終主機是完全透明的。換句話說,192.168.100.3 上的主機和雅虎網頁伺服器都不會意識到資料包已被更改。
來自雅虎網頁伺服器的資料包現在將經歷反向轉換過程才能到達請求主機。
反向過程類似於原始轉換過程。當給出公共(IP 地址,埠)對時,它將查詢轉換表以查詢相應的私有(IP 地址,埠)對。唯一的區別是,如果缺少條目,則資料包將被丟棄。完成查詢和更改後(步驟 5),資料包(現在包含原始私有(IP 地址,埠)資訊)將被髮送到 192.168.100.3 埠 3855 的請求主機。
NAT 有時與代理混淆,但它們在透明性方面實際上截然不同。NAT 對最終主機是完全透明的,即只有 NAT 裝置知道正在進行 IP 轉換。但對於代理,源應用程式/主機很清楚發生了變化,因為它必須專門配置為使用代理。
在資料包內儲存其 [私有] IP 地址資訊的應用程式會發現,一旦 IP 轉換完成並且資料包在網際網路上,其 IP 地址與其實際 IP 地址不匹配。例如:FTP
主要抱怨之一是 NAT 的廣泛使用導致 IPv6 的部署延遲,而 IPv6 是更理想的長期解決方案。儘管 NAT 存在所有問題,但對於大多數家庭使用者來說,它仍然“足夠好”。因此,美國 DSL 和有線網際網路客戶中 IPv6 的採用速度將繼續緩慢。對於網際網路純粹主義者來說,整個 NAT 解決方案被認為是一種快速“駭客”而不是長期解決方案。原始的網際網路是為端到端通訊設計的,其中每個主機都有一個公共 IP 地址。
透過 NAT 的簡單 UDP 穿越 (STUN) :假設主機 A 和主機 B 都位於非對稱 NAT 後面,並且兩者都與直接連線到網際網路的伺服器 S 建立了 UDP 會話。然後,主機 A 可以使用與 S 的現有連線相同的源 IP 和埠來啟動與主機 B 的會話。同時,S 知道 A 與 B 的會話的公共 IP 和埠,因為它與 A 與 S 的會話相同。然後,S 將此資訊傳遞給 B,B 啟動與 A 的 UDP 會話。
使用中繼 NAT (TURN) 的穿越:此設定需要一個直接連線到網際網路的中介伺服器 S。主機 A 和 B 都必須與 S 啟動會話,然後 S 將它們的訊息中繼到彼此。
與 NAT 相關但略有不同的概念是埠地址轉換 (PAT)。PAT 允許從外部主機啟動的傳入會話對映到特定的內部主機和埠。例如,在圖 4 中
所有傳入到路由器埠 80 的請求都轉發到內部主機 192.168.100.2 埠 7575。同樣,所有傳入到路由器埠 22 的連線都重定向到主機 192.168.100.1 埠 22。這種型別的設定對於希望在 NAT 裝置後面執行伺服器的使用者來說很常見。PAT 的唯一缺點是它僅限於每個路由器埠一個條目。
網路地址轉換 (NAT) 是一種廣泛使用的解決 IP 地址短缺問題的方案。NAT 引入了“私有”IP 地址的概念,該地址僅在本地區域網 (LAN) 內有效,並且必須轉換為在網際網路上使用的“公共”IP 地址。使用 NAT,我們可以讓多個私有 IP 地址共享單個公共 IP 地址,從而推遲部署長期解決方案來解決 IP 地址短缺問題的需求。
問題
- STUN 和 TURN 被提議作為兩種繞過 NAT 的方法。你能描述另外兩種繞過 NAT 的方法嗎?
- (T/F) STUN 和 TURN 都只能用於 UDP,不能用於 TCP。
答案
- 通用即插即用 (mkiUPnP),假設路由器或 NAT 裝置配置為接受它。另一種方法是隧道到伺服器。再一種方法是使用應用層閘道器,假設路由器或 NAT 裝置內建了它。
- 錯誤 - STUN 僅適用於 UDP,但 TURN 適用於 UDP 和 TCP。
http://computer.howstuffworks.com/nat.htm/printable
http://en.wikipedia.org/wiki/Network_address_translation
http://www.brynosaurus.com/pub/net/draft-ford-midcom-p2p-01.txt



