?
STUN
?STUN(Simple Traversal of User Datagram Protocol through Network Address Translators (NATs),NAT的UDP簡單穿越)是一種網(wǎng)絡(luò)協(xié)議,它允許位于NAT(或多重NAT)后的客戶端找出自己的公網(wǎng)地址,查出自己位于哪種類型的NAT之后以及NAT為某一個本地端口所綁定的Internet端端口。這些信息被用來在兩個同時處于NAT 路由器之后的主機(jī)之間建立UDP通信。該協(xié)議由RFC 3489定義
一旦客戶端得知了Internet端的UDP端口,通信就可以開始了。如果NAT是完全圓錐型的,那么雙方中的任何一方都可以發(fā)起通信。如果NAT是受限圓錐型或端口受限圓錐型,雙方必須一起開始傳輸。
需要注意的是,要使用STUN RFC中描述的技術(shù)并不一定需要使用STUN協(xié)議——還可以另外設(shè)計(jì)一個協(xié)議并把相同的功能集成到運(yùn)行該協(xié)議的服務(wù)器上。
SIP之類的協(xié)議是使用UDP分組在Internet上傳輸音頻和/或視頻數(shù)據(jù)的。不幸的是,由于通信的兩個末端往往位于NAT之后,因此用傳統(tǒng)的方法是無法建立連接的。這也就是STUN發(fā)揮作用的地方。
STUN是一個客戶機(jī)-服務(wù)器協(xié)議。一個VoIP電話或軟件包可能會包括一個STUN客戶端。這個客戶端會向STUN服務(wù)器發(fā)送請求,之后,服務(wù)器就會向STUN客戶端報(bào)告NAT路由器的公網(wǎng)IP地址以及NAT為允許傳入流量傳回內(nèi)網(wǎng)而開通的端口。
以上的響應(yīng)同時還使得STUN客戶端能夠確定正在使用的NAT類型——因?yàn)椴煌腘AT類型處理傳入的UDP分組的方式是不同的。四種主要類型中有三種是可以使用的:完全圓錐型NAT、受限圓錐型NAT和端口受限圓錐型NAT——但大型公司網(wǎng)絡(luò)中經(jīng)常采用的對稱型NAT(又稱為雙向NAT)則不能使用。
算法
NAT設(shè)備的類型對于TCP穿越NAT,有著十分重要的影響,根據(jù)端口映射方式,NAT可分為如下4類,前3種NAT類型可統(tǒng)稱為cone類型。
(1)全克隆( Full Cone) : NAT把所有來自相同內(nèi)部IP地址和端口的請求映射到相同的外部IP地址和端口。任何一個外部主機(jī)均可通過該映射發(fā)送IP包到該內(nèi)部主機(jī)。
(2)限制性克隆(Restricted Cone) : NAT把所有來自相同內(nèi)部IP地址和端口的請求映射到相同的外部IP地址和端口。但是,只有當(dāng)內(nèi)部主機(jī)先給IP地址為X的外部主機(jī)發(fā)送IP包,該外部主機(jī)才能向該內(nèi)部主機(jī)發(fā)送IP包。
(3)端口限制性克隆( Port Restricted Cone) :端口限制性克隆與限制性克隆類似,只是多了端口號的限制,即只有內(nèi)部主機(jī)先向IP地址為X,端口號為P的外部主機(jī)發(fā)送1個IP包,該外部主機(jī)才能夠把源端口號為P的IP包發(fā)送給該內(nèi)部主機(jī)。
(4)對稱式NAT ( Symmetric NAT) :這種類型的NAT與上述3種類型的不同,在于當(dāng)同一內(nèi)部主機(jī)使用相同的端口與不同地址的外部主機(jī)進(jìn)行通信時, NAT對該內(nèi)部主機(jī)的映射會有所不同。對稱式NAT不保證所有會話中的私有地址和公開IP之間綁定的一致性。相反,它為每個新的會話分配一個新的端口號。
NAT設(shè)備的類型對于TCP穿越NAT,有著十分重要的影響,根據(jù)端口映射方式,NAT可分為如下4類,前3種NAT類型可統(tǒng)稱為cone類型。
(1)全克隆( Full Cone) : NAT把所有來自相同內(nèi)部IP地址和端口的請求映射到相同的外部IP地址和端口。任何一個外部主機(jī)均可通過該映射發(fā)送IP包到該內(nèi)部主機(jī)。
(2)限制性克隆(Restricted Cone) : NAT把所有來自相同內(nèi)部IP地址和端口的請求映射到相同的外部IP地址和端口。但是,只有當(dāng)內(nèi)部主機(jī)先給IP地址為X的外部主機(jī)發(fā)送IP包,該外部主機(jī)才能向該內(nèi)部主機(jī)發(fā)送IP包。
(3)端口限制性克隆( Port Restricted Cone) :端口限制性克隆與限制性克隆類似,只是多了端口號的限制,即只有內(nèi)部主機(jī)先向IP地址為X,端口號為P的外部主機(jī)發(fā)送1個IP包,該外部主機(jī)才能夠把源端口號為P的IP包發(fā)送給該內(nèi)部主機(jī)。
(4)對稱式NAT ( Symmetric NAT) :這種類型的NAT與上述3種類型的不同,在于當(dāng)同一內(nèi)部主機(jī)使用相同的端口與不同地址的外部主機(jī)進(jìn)行通信時, NAT對該內(nèi)部主機(jī)的映射會有所不同。對稱式NAT不保證所有會話中的私有地址和公開IP之間綁定的一致性。相反,它為每個新的會話分配一個新的端口號。
STUN 使用下列的算法(取自 RFC 3489)來發(fā)現(xiàn) NAT gateways 以及防火墻(firewalls):
一旦路經(jīng)通過紅色箱子的終點(diǎn)時,UDP的溝通是沒有可能性的。一旦通過黃色或是綠色的箱子,就有連線的可能.
?STUN客戶端向STUN服務(wù)器發(fā)送請求,要求得到自身經(jīng)NAT映射后的地址:
??????? a,收不到服務(wù)器回復(fù),則認(rèn)為UDP被防火墻阻斷,不能通信,網(wǎng)絡(luò)類型:Blocked.
??????? b,收到服務(wù)器回復(fù),對比本地地址,如果相同,則認(rèn)為無NAT設(shè)備,進(jìn)入第2步,否則認(rèn)為有NAT設(shè)備,進(jìn)入3步.
??? 2, (已確認(rèn)無NAT設(shè)備)STUN客戶端向STUN服務(wù)器發(fā)送請求,要求服務(wù)器從其他IP和PORT向客戶端回復(fù)包:
??????? a,收不到服務(wù)器從其他IP地址的回復(fù),認(rèn)為包被前置防火墻阻斷,網(wǎng)絡(luò)類型:Symmetric UDP Firewall.
??????? b,收到則認(rèn)為客戶端處在一個開放的網(wǎng)絡(luò)上,網(wǎng)絡(luò)類型:Opened.
??? 3, (已確認(rèn)存在NAT設(shè)備)STUN客戶端向STUN服務(wù)器發(fā)送請求,要求服務(wù)器從其他IP和PORT向客戶端回復(fù)包:
??????? a,收不到服務(wù)器從其他IP地址的回復(fù),認(rèn)為包被前置NAT設(shè)備阻斷,進(jìn)入第4步.
??????? b,收到則認(rèn)為NAT設(shè)備類型為Full Cone,即網(wǎng)絡(luò)類型:Full Cone NAT.
??? 4, STUN客戶端向STUN服務(wù)器的另外一個IP地址發(fā)送請求,要求得到自身經(jīng)NAT映射后的地址,并對比之:
??????? a,地址不相同,則網(wǎng)絡(luò)類型:Symmetric NAT.
??????? b,相同則認(rèn)為是Restricted NAT,進(jìn)入第5步,進(jìn)一步確認(rèn)類型.
??? 5, (已確認(rèn)Restricted NAT設(shè)備)STUN客戶端向STUN服務(wù)器發(fā)送請求,要求服務(wù)器從相同IP的其他PORT向客戶端回復(fù)包:
??????? a,收不到服務(wù)器從其他PORT地址的回復(fù),認(rèn)為包被前置NAT設(shè)備阻斷,網(wǎng)絡(luò)類型:Port Restricted cone NAT.
??????? b,收到則認(rèn)為網(wǎng)絡(luò)類型: Restricted cone NAT.
??????? a,收不到服務(wù)器回復(fù),則認(rèn)為UDP被防火墻阻斷,不能通信,網(wǎng)絡(luò)類型:Blocked.
??????? b,收到服務(wù)器回復(fù),對比本地地址,如果相同,則認(rèn)為無NAT設(shè)備,進(jìn)入第2步,否則認(rèn)為有NAT設(shè)備,進(jìn)入3步.
??? 2, (已確認(rèn)無NAT設(shè)備)STUN客戶端向STUN服務(wù)器發(fā)送請求,要求服務(wù)器從其他IP和PORT向客戶端回復(fù)包:
??????? a,收不到服務(wù)器從其他IP地址的回復(fù),認(rèn)為包被前置防火墻阻斷,網(wǎng)絡(luò)類型:Symmetric UDP Firewall.
??????? b,收到則認(rèn)為客戶端處在一個開放的網(wǎng)絡(luò)上,網(wǎng)絡(luò)類型:Opened.
??? 3, (已確認(rèn)存在NAT設(shè)備)STUN客戶端向STUN服務(wù)器發(fā)送請求,要求服務(wù)器從其他IP和PORT向客戶端回復(fù)包:
??????? a,收不到服務(wù)器從其他IP地址的回復(fù),認(rèn)為包被前置NAT設(shè)備阻斷,進(jìn)入第4步.
??????? b,收到則認(rèn)為NAT設(shè)備類型為Full Cone,即網(wǎng)絡(luò)類型:Full Cone NAT.
??? 4, STUN客戶端向STUN服務(wù)器的另外一個IP地址發(fā)送請求,要求得到自身經(jīng)NAT映射后的地址,并對比之:
??????? a,地址不相同,則網(wǎng)絡(luò)類型:Symmetric NAT.
??????? b,相同則認(rèn)為是Restricted NAT,進(jìn)入第5步,進(jìn)一步確認(rèn)類型.
??? 5, (已確認(rèn)Restricted NAT設(shè)備)STUN客戶端向STUN服務(wù)器發(fā)送請求,要求服務(wù)器從相同IP的其他PORT向客戶端回復(fù)包:
??????? a,收不到服務(wù)器從其他PORT地址的回復(fù),認(rèn)為包被前置NAT設(shè)備阻斷,網(wǎng)絡(luò)類型:Port Restricted cone NAT.
??????? b,收到則認(rèn)為網(wǎng)絡(luò)類型: Restricted cone NAT.
實(shí)現(xiàn): http://sourceforge.net/projects/stun/
STUNT
STUNT (Simple Traversal of UDP Through NATs and TCP too )), which extends STUN to include TCP functionality, is a lightweight protocol that allows applications running behind a NAT to determine external IP and port-binding properties, packet filtering rules and various timeouts associated with TCP connections through the NAT. Knowing these parameters allows applications to establish TCP sessions between two NAT'ed hosts. As a result P2P and other applications can work through existing NAT infrastructure without sacrificing the benefits of TCP.
實(shí)現(xiàn): https://gforge.cis.cornell.edu/frs/?group_id=15
XSTUNT
XSTUNT is a C/C++ library which implements "STUNT #2" approach in "Characterization and Measurement of TCP Traversal through NAT and Firewalls". It provides programmers with a set of simple functions to create STUNT connections through cooperating with a particular XSTUNT server
?實(shí)現(xiàn):http://www.cis.nctu.edu.tw/~gis87577/xDreaming/XSTUNT/index.html
其他資料:
1. Characterization and Measurement of TCP Traversal through NATs and Firewalls (PDF).
2.? Peer-to-Peer Communication Across Network Address Translators (翻譯: google搜素"穿越NAT的p2p通信方法研究").
?
本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/liqinghua1653/archive/2009/04/14/4071518.aspx