stun

stun

一種網絡協議
STUN(Simple Traversal of UDP over NATs,NAT的UDP簡單穿越)是一種網絡協議,它允許位于NAT(或多重NAT)後的客戶端找出自己的公網地址,查出自己位于哪種類型的NAT之後以及NAT為某一個本地端口所綁定的Internet端端口。這些信息被用來在兩個同時處于NAT路由器之後的主機之間建立UDP通信。該協議由RFC 3489定義。目前RFC 3489協議已被RFC 5389協議所取代,新的協議中,将STUN定義為一個協助穿越NAT的工具,并不獨立提供穿越的解決方案。它還有升級版本RFC 7350,目前正在完善中。
  • 中文名:
  • 外文名:
  • 别名:
  • 英文名:Simple Traversal of UDP over NATs
  • 位置:NAT的客戶端
  • 簡稱:stun
  • 屬性:網絡協議
  • 協議定義:RFC 3489
  • 功能:找出自己的公網地址

STUN簡介

STUN(Simple Traversal of UDP over NATs,NAT的UDP簡單穿越)是一種網絡協議,它允許位于NAT(或多重NAT)後的客戶端找出自己的公網地址,查出自己位于哪種類型的NAT之後以及NAT為某一個本地端口所綁定的Internet端端口。這些信息被用來在兩個同時處于NAT路由器之後的主機之間建立UDP通信。該協議由RFC3489定義。

一旦客戶端得知了Internet端的UDP端口,通信就可以開始了。如果NAT是完全圓錐型的,那麼雙方中的任何一方都可以發起通信。如果NAT是受限圓錐型或端口受限圓錐型,雙方必須一起開始傳輸。

需要注意的是,要使用STUN RFC中描述的技術并不一定需要使用STUN協議——還可以另外設計一個協議并把相同的功能集成到運行該協議的服務器上。

SIP之類的協議是使用UDP分組在Internet上傳輸音頻和/或視頻數據的。不幸的是,由于通信的兩個末端往往位于NAT之後,因此用傳統的方法是無法建立連接的。這也就是STUN發揮作用的地方。

STUN是一個客戶機-服務器協議。一個VoIP電話或軟件包可能會包括一個STUN客戶端。這個客戶端會向STUN服務器發送請求,之後,服務器就會向STUN客戶端報告NAT路由器的公網IP地址以及NAT為允許傳入流量傳回内網而開通的端口。

以上的響應同時還使得STUN客戶端能夠确定正在使用的NAT類型——因為不同的NAT類型處理傳入的UDP分組的方式是不同的。四種主要類型中有三種是可以使用的:完全圓錐型NAT、受限圓錐型NAT和端口受限圓錐型NAT——但大型公司網絡中經常采用的對稱型NAT(又稱為雙向NAT)則不能使用。

為什麼需要STUN:

因為NAT雖然解決了IP地址稀少的問題,但是也帶來了很多的問題。比如所有P2P應用,像文件SHARE,多媒體,和在線遊戲等等。

要想穿透NAT,首先知道NAT的一些特性:

NAT分為4種(加上防火牆的話,多幾種情況):

1.完全透明NAT(Full Cone NAT):

從相同内部主機(IN IPX)+端口(IN PORTX)發送的數據MAPING為相同的IP(OUT IP X)和端口(OUT PORT X)發送帶外網.并且從另一個服務器(Y),如果直連到MAPING的IP(OUT IP X)和端口(OUT PORT X )上,數據将會被轉發到内部主機上. (IN IPX), (IN PORTX)。

也就是說進内部網的數據包的SPORT,SPORT不受限制。

2.受限NAT(Restricted Cone)

從相同内部主機(IN IPX)+端口(IN PORTX)發送的數據MAPING為相同的IP(X)和端口發送帶外網.和完全NAT不同的是,隻有當為X時,外部機器的的請求就被轉發到主機(IN IPX)+端口(IN PORTX)。也就是說進内部網的數據包的,SPORT不受限制,SIP受限制,隻能為NAT MAP數據的IP。

3,端口受限NAT(Port Restricted Cone)

和受限NAT不同的是,隻有當外部主動請求的的源IP和端口,等于内部網發送的請求的目的IP和端口。

4.對稱NAT

如果發送的包的目的IP AND PORT,那麼MAPPING IP AND PORT,将相同。内部網同一台機器,同一個端口如果目的地址不同,那麼MAPPING的端口也不同,所以隻有他主動連的服務器才可能知道他的MAPPING後端口,别的服務器如果想連他隻能靠猜測端口。

總結:前面3重NAT,MAPING PORT和IP,是根據發送包的的内部網的IP和端口決定的。如果數據的内網IP和端口相同,那麼MAPPING後的端口和地址是固定。這個功能為我們的穿越提供了很好條件。

第4種NAT,打洞後的MAPPING地址和端口将變地不可靠。很難穿越。注意SERVERA,和SERVERB是兩個公網地址,而不是兩台機器。

STUN協議(淺析例子分析)

基本思想

在私網内部安裝一個STUN client,在公網上安裝一個STUN Server,STUN協議定義了一些消息格式,大體上分成Request/Response,client向server發送request,server發送response給client。如何檢測STUN client是否在NAT後面呢?原理很簡單,Server在收到client的UDP包以後,Server将接收到該包的地址和端口利用udp傳回來給client,client把這些地址和端口與本機的ip地址和端口進行比較,如果不同,說明在NAT後面,否則就位于NAT前面。為了檢測不同類型的NAT,STUN協議定義了一些消息屬性,要求Server有不同的動作,比如發送響應的時候使用不同的IP地址和端口,或者改變端口等等。STUN協議對NAT可能有效,但是對防火牆就無能為力了,因為防火牆可能不會打開UDP端口。

NAT分類

STUN協議将NAT粗略分為4種類型,即Full Cone、Restricted Cone、Port Restricted Cone和Symmetric。舉個實際例子來說明這四種NAT的區别:

A機器在私網(192.168.0.4)

NAT服務器(210.21.12.140)

B機器在公網(210.15.27.166)

C機器在公網(210.15.27.140)

現在,A機器連接過B機器,假設是A(192.168.0.4:5000)->NAT(轉換後210.21.12.140:8000)->B(210.15.27.166:2000)。

同時A從來沒有和C通信過。

則對于不同類型的NAT,有下列不同的結果:

Full Cone NAT:C發數據到210.21.12.140:8000,NAT會将數據包送到A(192.168.0.4:5000)。因為NAT上已經有了192.168.0.4:5000到210.21.12.140:8000的映射。

Restricted Cone:C無法和A通信,因為A從來沒有和C通信過,NAT将拒絕C試圖與A連接的動作。但B可以通過210.21.12.140:8000與A的192.168.0.4:5000通信,且這裡B可以使用任何端口與A通信。如:210.15.27.166:2001->210.21.12.140:8000,NAT會送到A的5000端口上。

Port Restricted Cone:C無法與A通信,因為A從來沒有和C通信過。而B也隻能用它的210.15.27.166:2000與A的192.168.0.4:5000通信,因為A也從來沒有和B的其他端口通信過。該類型NAT是端口受限的。

Symmetric NAT:上面3種類型,統稱為Cone NAT,有一個共同點:隻要是從同一個内部地址和端口出來的包,NAT都将它轉換成同一個外部地址和端口。但是Symmetric有點不同,具體表現在:隻要是從同一個内部地址和端口出來,且到同一個外部目标地址和端口,則NAT也都将它轉換成同一個外部地址和端口。但如果從同一個内部地址和端口出來,是到另一個外部目标地址和端口,則NAT将使用不同的映射,轉換成不同的端口(外部地址隻有一個,故不變)。而且和Port Restricted Cone一樣,隻有曾經收到過内部地址發來包的外部地址,才能通過NAT映射後的地址向該内部地址發包。

現針對Symmetric NAT舉例說明:

A機器連接過B機器,假使是A(192.168.0.4:5000)->NAT(轉換後210.21.12.140:8000)->B(210.15.27.166:2000)。

如果此時A機器(192.168.0.4:5000)還想連接C機器(210.15.27.140:2000),則NAT上産生一個新的映射,對應的轉換可能為A(192.168.0.4:5000)->NAT(轉換後210.21.12.140:8001)->C(210.15.27.140:2000)。此時,B隻能用它的210.15.27.166:2000通過NAT的210.21.12.140:8000與A的192.168.0.4:5000通信,C也隻能用它的210.15.27.140:2000通過NAT的210.21.12.140:8001與A的192.168.0.4:5000通信,而B或者C的其他端口則均不能和A的192.168.0.4:5000通信。

STUN的簡單操作過程:

發送請求。請求分為兩種

1.Binding Requests, sent over UDP。

用來發現NAT的公網地址,和MAPPING後的端口。

2.Binding Response,

服務器産生Binding Response,并把得到的MAPPINGIP和端口,返回到客戶端,客戶端比較MAPPING地址是否和本機地址相同,如果是說明是本機也是公網,否則判斷NAT的類型(判斷方法:client uses additional STUN Binding Requests)。

3.Binding Error。

4.Shared Secret Requests, sent over TLS over TCP。

這個請求要求服務器返回一臨時用戶名和密碼,用來下一步的Binding Requests/Response,用來驗證信息的完整性。

5.Shared Secret Response。

6.Shared Secret Error Response。

上一篇:金立W100

下一篇:捷渡行車記錄儀

相關詞條

相關搜索

其它詞條