分類  >  互聯網 >

NAT與NAT穿梭學習總結

tags:    時間:2013-12-27 15:42:46
NAT與NAT穿越學習總結
1、引言
網路地址轉換(Network Address Translation,簡稱NAT)是一種在IP分組通過路由器或防火牆時重寫源IP地址或/和目的IP地址的技術。這種技術被普遍使用在有多台主機但只通過一個公有IP地址訪問網際網路的私有網路中。20世紀90年代中期,NAT是作為一種解決IPv4地址短缺以避免保留IP地址困難的方案而流行起來的。家庭和小型辦公室的路由器一般都集成了防火牆,DHCP伺服器和NAT功能。

NAT穿越是廣泛用於P2P領域的通信方式。在視頻會議過程中,NAT穿越也在內外網消息通信中起到了至關重要的作用,平台伺服器之間、與會終端之間、以及平台伺服器和與會終端之間都可能存在信令或多媒體流等的NAT穿越。

本文總結學習NAT的4種類型,以及NAT穿越的協議或框架。

2、NAT的類型
NAT有4種不同的類型:Full Cone、Address Restricted Cone、Port Restricted Cone和Symmetric(對稱形),其中Full Cone、Address Restricted Cone、Port Restricted Cone等3種類型又統稱為Cone NAT(圓錐形NAT)。

2.1 Full Cone
這種NAT內部的機器A連接過外網機器C后,NAT會打開一個埠。然後外網的任何發到這個打開的埠的UDP數據報都可以到達A,不管是不是C發過來的。
 例如 A:192.168.8.100  NAT:202.100.100.100  C:292.88.88.88 A(192.168.8.100:5000) -> NAT(202.100.100.100:8000) -> C(292.88.88.88:2000) 任何發送到 NAT(202.100.100.100:8000)的數據都可以到達A(192.168.8.100:5000) 


2.2 Full Cone
這種NAT內部的機器A連接過外網的機器C后,NAT打開一個埠。然後C可以用任何埠和A通信,其它的外網機器則不行。
 例如 A:192.168.8.100  NAT:202.100.100.100  C:292.88.88.88 A(192.168.8.100:5000) -> NAT(202.100.100.100 : 8000) -> C(292.88.88.88:2000) 任何從C發送到 NAT(202.100.100.100:8000)的數據都可以到達A(192.168.8.100:5000) 


2.3 Full Cone
這種NAT內部的機器A連接過外網的機器C后,NAT打開一個埠。然後C可以用原來的埠和A通信,C的其它埠或其它的外網機器則不行。
 例如 A:192.168.8.100  NAT:202.100.100.100  C:292.88.88.88 A(192.168.8.100:5000) -> NAT(202.100.100.100 : 8000) -> C(292.88.88.88:2000) 只有從C(202.88.88.88:2000)發送到NAT(202.100.100.100:8000)的數據,才可以到達A(192.168.8.100:5000) 


2.4 Full Cone
對於這種NAT,連接不同的外部Server,NAT打開的埠會變化。也就是內部機器A連接外網機器B時,NAT會打開一個埠;連接外網機器C時,NAT又會打開另外一個埠。
對於雙方都是Port Restricted Cone NAT的時候,則需要利用UDP打洞原理進行「先打洞,然後才能直接通信」。

對於Cone NAT要採用UDP打洞,需要一個公網機器Server C來充當「介紹人」。處於NAT之後的內網的A、B先分別和C通信,打開各自的NAT埠,C這個時候知道A、B的公網IP和埠。現在A和B想直接連接,比如A給B直接發包,除非B是Full Cone,否則不能通信。反之亦然。

為什麼會這樣?因為對於處於NAT之後的A、B。如果想A要與外界的D通信,則首先必須要A發包到D,然後A經過NAT設備NA,NA把A的內網地址和埠轉換為NA的外網地址和埠。和D通信之後,D才能經過NA和A通信。也就是說,只能A和外界主動通信,外界不能主動和處於NA之後的A通信,這種包會被NA直接丟棄的。這也就是前面所說的Port Restricted Cone 的情形!
 A(192.168.8.100:5000) -> NA(202.100.100.100:8000) -> D(292.88.88.88:2000) 

但是我們可以這樣:
 A --- NA --- Server C --- NB --- B 其中:	A、B 為主機; NA、NB 為NAT設備; Server C為外網的機器; 

如果A想與B通信,那麼其過程如下:
(1)A首先連接 C,C得到A的外網NA的地址和埠;
(2)B也要連接C,C得到B的外網NB的地址和埠;
(3)A告訴C說我要和B通訊;
(4)C通過NB發信息給B,讓B知道A的外網NA的地址和埠;
(5)B向NA發數據包(肯定會被NA丟棄,因為NA上並沒有 A->NB 的合法session),但是NB上就建立了有B->NA的合法session了;
(6)B發數據包給C,讓 C 通知 A,我已經把洞打好了;
(7)A接收到通知后,向 B 的外網NB發數據包,這樣就不會被NB丟棄掉了。因為對於NB來說,它看到的是A的外網NA的地址,而通過第5步,B已經讓NA成為NB的合法通信對象了。所以,當NA發數據包給NB時,NB就會接收並轉發給B。

注意: 路由器和防火牆的UDP打洞的埠有個時間限制的,在一定時間內如果沒有數據通訊會自動關閉。

3、NAT穿越
3.1 STUN
1、簡介
STUN是一種NAT穿越協議,其全稱是Simple Traversal of UDP Through NAT,即UDP對NAT的簡單穿越方式。

2、應用模型

如上圖所示,如果STUN ClientA想與STUN ClientB通信,那麼其過程如下:
(1)STUN ClientA通過NA向STUN Server發送UDP請求STUN 消息詢問並註冊自身的轉換后地址;
(2)STUN Server收到請求消息,產生響應消息,響應消息中攜帶請求消息的源埠,即STUN ClientA在NA上對應的外部埠,然後響應消息通過NA發送給STUN ClientA;
(3)STUN ClientB通過NB向STUN Server發送UDP請求STUN 消息詢問並註冊自身的轉換后地址;
(4)STUN Server收到請求消息,產生響應消息,響應消息中攜帶請求消息的源埠,即STUN ClientB在NB上對應的外部埠,然後響應消息通過NB發送給STUN ClientB;
(5)STUN ClientA將其在NA上對應的外部地址和埠信息包含在消息中,發送給STUN Server請求要和STUN ClientB通訊;
(6)STUN Server收到請求信息后,查詢STUN ClientB的註冊地址,並通過NB將請求轉發給STUN ClientB;
(7)STUN ClientB通過消息體中的內容得知STUN ClientA在的外部地址和埠,並將其在NB上對應的外部地址和埠信息包含在響應消息中,然後將響應信息發送給STUN ClientA,STUN ClientA收到響應信息后也知道了STUN ClientB的外部地址和埠,這樣就在STUN ClientA和STUN ClientB之間建立了連接,解決了穿越NAT的通信建立問題以及作為被叫時的問題。

本端的接收地址和埠號為NAT外的地址和埠號。由於通過STUN協議已在NAT上預先建立媒體流的NAT映射表項,因此,媒體流可順利穿越NAT。

需要注意的是,NAT/PAT對於地址轉換關係是有一定生命期的,某個地址轉換后在一段時間內沒有被使用將會被清除,當這個業務流再次出現時,將會建立一個新的地址轉換關係,這就意味著STUN的詢問過程以及終端的註冊過程都需要再執行一遍才能保證通信的正確。解決這個問題一個比較通行的方案是採用某種方式保持NAT/PAT的轉換關係,例如在NAT/PAT生命期內重複註冊一次,比如NAT/PAT的生命期是3分鐘,那麼就將註冊重複周期設置為2分鐘。

另外,STUN Server並非指一個專用的伺服器,而是指一種功能、一個協議,我們可以在軟交換服務或者任何一個需要此功能的伺服器上內置此協議。

3、優點和局限性
在NAT採用對稱模式(Symmetric NAT)工作時,STUN的方案就會出現問題。假如我們在軟交換服務上提供STUN Server功能,終端A通過STUN可以獲得NAT為終端A與軟交換服務之間通信分配的地址A',並將這個地址註冊在軟交換服務上,當一個公網上的終端B呼叫終端A時,A'和B通過軟交換服務完成呼叫建立過程。當B試圖向A'發送媒體流時,問題就出現了。因為對稱NAT只允許從軟交換服務發送數據給地址A',從B發送的媒體流將被丟棄。所以,STUN無法應用於工作在對稱模式的NAT。
STUN協議最大的優點是無需現有NAT/FW設備做任何改動,同時STUN方式可在多個NAT串聯的網路環境中使用。STUN的局限性在於STUN並不適合支持TCP連接的穿越,同時STUN方式不支持NAT的對稱模式(Symmetric NAT)。

3.2 TURN
1、簡介
TURN的全稱為Traversal Using Relay NAT,即通過Relay方式穿越NAT。另外,這種方式又稱SPAN(Simple Protocol for Augmenting NATs)方式。

2、應用模型
TURN方式解決NAT問題的思路與STUN相似,也是基於私網接入用戶通過某種機制預先得到其私有地址對應在公網的地址(STUN方式得到的地址為出口NAT上的地址,TURN方式得到地址為TURN Server上的地址),然後在報文負載中所描述的地址信息直接填寫該公網地址的方式,實際應用原理也是一樣的。

3、優點和局限性
TURN應用模型通過分配TURN Server的地址和埠作為客戶端對外的接受地址和埠,即私網用戶發出的報文都要經過TURN Server進行Relay轉發,這種方式除了具有STUN方式的優點外,還解決了STUN應用無法穿透對稱NAT(Symmetric NAT)以及類似的Firewall設備的缺陷,即無論企業網/駐地網出口為哪種類型的NAT/FW,都可以實現NAT的穿透,同時TURN支持基於TCP的應用,如H323協議。TURN的局限性在於所有報文都必須經過TURN Server轉發,增大了包的延遲和丟包的可能性。

3.3 ICE
1、簡介
ICE的全稱Interactive Connectivity Establishment(互動式連接建立),由IETF的MMUSIC工作組開發出來的,它所提供的是一種框架,使各種NAT穿透技術可以實現統一。ICE跟STUN和TURN不一樣,ICE不是一種協議,而是一個框架(Framework),它整合了STUN和TURN。

2、應用模型

如上圖所示,如果A想與B通信,那麼其過程如下:
(1)A收集所有的IP地址,並找出其中可以從STUN伺服器和TURN伺服器收到流量的地址;
(2)A向STUN伺服器發送一份地址列表,然後按照排序的地址列表向B發送啟動信息,目的是實現節點間的通信;
(3)B向啟動信息中的每一個地址發送一條STUN請求;
(4)A將第一條接收到的STUN請求的回複信息發送給B;
(5)B接到STUN回復后,從中找出那些可在A和B之間實現通信的地址;
(6)利用列表中的排序列最高的地址進一步的設備間通信;
  由於該技術是建立在多種NAT穿透協議的基礎之上,並且提供了一個統一的框架,所以ICE具備了所有這些技術的優點,同時還避免了任何單個協議可能存在的缺陷。因此,ICE可以實現在未知網路拓撲結構中實現的設備互連,而且不需要進行對手配置。另外,由於該技術不需要為VoIP流量手動打開防火牆,所以也不會產生潛在的安全隱患。

3.4 UPnP
UPnP是若干網路協議的組合,主要用於設備的互聯,但是一種叫做Internet Gateway Device (IGD) Protocol的防火牆穿越技術是基於UPnP的,其允許網路設備或者點對點應用程序通過動態開啟和閉合與外部服務之間的通信埠穿過NAT網關與外界通信。

4、參考資料
[1] NAT and Traversal NAT(TURN/STUN/ICE)
http://www.cnblogs.com/whyandinside/archive/2010/12/08/1900492.html
[2] ICE 原理學習
http://blog.csdn.net/voipmaker/article/details/8453702

推薦閱讀文章

Bookmark the permalink ,來源:互聯網