STUNSession Traversal Utilities for NAT,NAT對談穿越應用程式)是一種網路協定,它允許位於NAT(或多重NAT)後的客戶端找出自己的公網位址,查出自己位於哪種類型的NAT之後以及NAT為某一個本地埠所繫結的Internet端埠。這些資訊被用來在兩個同時處於NAT路由器之後的主機之間建立UDP通訊。該協定由 RFC 5389 定義。

方案

一旦客戶端得知了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使用下列的演算法(取自RFC 3489)來發現NAT中介軟體以及防火牆(firewalls):

 

一旦路經通過紅色箱子的終點時,則無法通過NAT穿透建立UDP連接。一旦通過黃色或是綠色的箱子,就有連線的可能。

註:此演算法在RFC 3489被提出,但在RFC 5389中被刪除。詳細的原因可以到RFC 5389的Page 45中19.Changes since RFC 3489檢視。

參見

外部連結

實現