STUN協議淺析

來源:互聯網
上載者:User

libjingle的UDP打洞是通過STUN/TURN協議進行的,本文介紹了STUN的基本工作原理。

轉自:http://blog.163.com/philly_li/blog/static/392674052008414252404/

STUN協議的全稱是Simple Traversal of User Datagram Protocol Through Network Address Translators,主要功能是檢測是否位於NAT後面,如果位於NAT後面,經過NAT轉換後的地址和連接埠是什麼,另外可以檢測NAT的類型。

基本思想

在私網內部安裝一個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通訊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.