什么是STUN協(xié)議?
接下來我們?yōu)榇蠹医榻B一下STUN協(xié)議。那么這個協(xié)議的意思是什么呢?我們通過文章來看一下。首先STUN(Simple Traversal of User Datagram Protocol through Network Address Translators (NATs),NAT的UDP簡單穿越)是一種網絡協(xié)議,它允許位于NAT(或多重NAT)后的客戶端找出自己的公網地址,查出自己位于哪種類型的NAT之后以及NAT為某一個本地端口所綁定的Internet端端口。這些信息被用來在兩個同時處于NAT 路由器之后的主機之間建立UDP通信。該協(xié)議由RFC 3489定義。
方案
一旦客戶端得知了Internet端的UDP端口,通信就可以開始了。如果NAT是完全圓錐型的,那么雙方中的任何一方都可以發(fā)起通信。如果NAT是受限圓錐型或端口受限圓錐型,雙方必須一起開始傳輸。
需要注意的是,要使用STUN RFC中描述的技術并不一定需要使用STUN協(xié)議——還可以另外設計一個協(xié)議并把相同的功能集成到運行該協(xié)議的服務器上。
SIP之類的協(xié)議是使用UDP分組在Internet上傳輸音頻和/或視頻數據的。不幸的是,由于通信的兩個末端往往位于NAT之后,因此用傳統(tǒng)的方法是無法建立連接的。這也就是STUN發(fā)揮作用的地方。
STUN協(xié)議是一個客戶機-服務器協(xié)議。一個VoIP電話或軟件包可能會包括一個STUN客戶端。這個客戶端會向STUN服務器發(fā)送請求,之后,服務器就會向STUN客戶端報告NAT路由器的公網IP地址以及NAT為允許傳入流量傳回內網而開通的端口。
以上的響應同時還使得STUN客戶端能夠確定正在使用的NAT類型——因為不同的NAT類型處理傳入的UDP分組的方式是不同的。四種主要類型中有三種是可以使用的:完全圓錐型NAT、受限圓錐型NAT和端口受限圓錐型NAT——但大型公司網絡中經常采用的對稱型NAT(又稱為雙向NAT)則不能使用。
演算法
STUN協(xié)議使用下列的演算法(取自 RFC 3489)來發(fā)現 NAT gateways 以及防火墻(firewalls):
一旦路經通過紅色箱子的終點時,UDP的溝通是沒有可能性的。一旦通過黃色或是綠色的箱子,就有連線的可能。