?
STUN
?STUN(Simple Traversal of User Datagram Protocol through Network Address Translators (NATs),NAT的UDP簡(jiǎn)單穿越)是一種網(wǎng)絡(luò)協(xié)議,它允許位于NAT(或多重NAT)后的客戶端找出自己的公網(wǎng)地址,查出自己位于哪種類(lèi)型的NAT之后以及NAT為某一個(gè)本地端口所綁定的Internet端端口。這些信息被用來(lái)在兩個(gè)同時(shí)處于NAT 路由器之后的主機(jī)之間建立UDP通信。該協(xié)議由RFC 3489定義
一旦客戶端得知了Internet端的UDP端口,通信就可以開(kāi)始了。如果NAT是完全圓錐型的,那么雙方中的任何一方都可以發(fā)起通信。如果NAT是受限圓錐型或端口受限圓錐型,雙方必須一起開(kāi)始傳輸。
需要注意的是,要使用STUN RFC中描述的技術(shù)并不一定需要使用STUN協(xié)議——還可以另外設(shè)計(jì)一個(gè)協(xié)議并把相同的功能集成到運(yùn)行該協(xié)議的服務(wù)器上。
SIP之類(lèi)的協(xié)議是使用UDP分組在Internet上傳輸音頻和/或視頻數(shù)據(jù)的。不幸的是,由于通信的兩個(gè)末端往往位于NAT之后,因此用傳統(tǒng)的方法是無(wú)法建立連接的。這也就是STUN發(fā)揮作用的地方。
STUN是一個(gè)客戶機(jī)-服務(wù)器協(xié)議。一個(gè)VoIP電話或軟件包可能會(huì)包括一個(gè)STUN客戶端。這個(gè)客戶端會(huì)向STUN服務(wù)器發(fā)送請(qǐng)求,之后,服務(wù)器就會(huì)向STUN客戶端報(bào)告NAT路由器的公網(wǎng)IP地址以及NAT為允許傳入流量傳回內(nèi)網(wǎng)而開(kāi)通的端口。
以上的響應(yīng)同時(shí)還使得STUN客戶端能夠確定正在使用的NAT類(lèi)型——因?yàn)椴煌腘AT類(lèi)型處理傳入的UDP分組的方式是不同的。四種主要類(lèi)型中有三種是可以使用的:完全圓錐型NAT、受限圓錐型NAT和端口受限圓錐型NAT——但大型公司網(wǎng)絡(luò)中經(jīng)常采用的對(duì)稱(chēng)型NAT(又稱(chēng)為雙向NAT)則不能使用。
算法
NAT設(shè)備的類(lèi)型對(duì)于TCP穿越NAT,有著十分重要的影響,根據(jù)端口映射方式,NAT可分為如下4類(lèi),前3種NAT類(lèi)型可統(tǒng)稱(chēng)為cone類(lèi)型。
(1)全克隆( Full Cone) : NAT把所有來(lái)自相同內(nèi)部IP地址和端口的請(qǐng)求映射到相同的外部IP地址和端口。任何一個(gè)外部主機(jī)均可通過(guò)該映射發(fā)送IP包到該內(nèi)部主機(jī)。
(2)限制性克隆(Restricted Cone) : NAT把所有來(lái)自相同內(nèi)部IP地址和端口的請(qǐng)求映射到相同的外部IP地址和端口。但是,只有當(dāng)內(nèi)部主機(jī)先給IP地址為X的外部主機(jī)發(fā)送IP包,該外部主機(jī)才能向該內(nèi)部主機(jī)發(fā)送IP包。
(3)端口限制性克隆( Port Restricted Cone) :端口限制性克隆與限制性克隆類(lèi)似,只是多了端口號(hào)的限制,即只有內(nèi)部主機(jī)先向IP地址為X,端口號(hào)為P的外部主機(jī)發(fā)送1個(gè)IP包,該外部主機(jī)才能夠把源端口號(hào)為P的IP包發(fā)送給該內(nèi)部主機(jī)。
(4)對(duì)稱(chēng)式NAT ( Symmetric NAT) :這種類(lèi)型的NAT與上述3種類(lèi)型的不同,在于當(dāng)同一內(nèi)部主機(jī)使用相同的端口與不同地址的外部主機(jī)進(jìn)行通信時(shí), NAT對(duì)該內(nèi)部主機(jī)的映射會(huì)有所不同。對(duì)稱(chēng)式NAT不保證所有會(huì)話中的私有地址和公開(kāi)IP之間綁定的一致性。相反,它為每個(gè)新的會(huì)話分配一個(gè)新的端口號(hào)。
NAT設(shè)備的類(lèi)型對(duì)于TCP穿越NAT,有著十分重要的影響,根據(jù)端口映射方式,NAT可分為如下4類(lèi),前3種NAT類(lèi)型可統(tǒng)稱(chēng)為cone類(lèi)型。
(1)全克隆( Full Cone) : NAT把所有來(lái)自相同內(nèi)部IP地址和端口的請(qǐng)求映射到相同的外部IP地址和端口。任何一個(gè)外部主機(jī)均可通過(guò)該映射發(fā)送IP包到該內(nèi)部主機(jī)。
(2)限制性克隆(Restricted Cone) : NAT把所有來(lái)自相同內(nèi)部IP地址和端口的請(qǐng)求映射到相同的外部IP地址和端口。但是,只有當(dāng)內(nèi)部主機(jī)先給IP地址為X的外部主機(jī)發(fā)送IP包,該外部主機(jī)才能向該內(nèi)部主機(jī)發(fā)送IP包。
(3)端口限制性克隆( Port Restricted Cone) :端口限制性克隆與限制性克隆類(lèi)似,只是多了端口號(hào)的限制,即只有內(nèi)部主機(jī)先向IP地址為X,端口號(hào)為P的外部主機(jī)發(fā)送1個(gè)IP包,該外部主機(jī)才能夠把源端口號(hào)為P的IP包發(fā)送給該內(nèi)部主機(jī)。
(4)對(duì)稱(chēng)式NAT ( Symmetric NAT) :這種類(lèi)型的NAT與上述3種類(lèi)型的不同,在于當(dāng)同一內(nèi)部主機(jī)使用相同的端口與不同地址的外部主機(jī)進(jìn)行通信時(shí), NAT對(duì)該內(nèi)部主機(jī)的映射會(huì)有所不同。對(duì)稱(chēng)式NAT不保證所有會(huì)話中的私有地址和公開(kāi)IP之間綁定的一致性。相反,它為每個(gè)新的會(huì)話分配一個(gè)新的端口號(hào)。
STUN 使用下列的算法(取自 RFC 3489)來(lái)發(fā)現(xiàn) NAT gateways 以及防火墻(firewalls):
一旦路經(jīng)通過(guò)紅色箱子的終點(diǎn)時(shí),UDP的溝通是沒(méi)有可能性的。一旦通過(guò)黃色或是綠色的箱子,就有連線的可能.
?STUN客戶端向STUN服務(wù)器發(fā)送請(qǐng)求,要求得到自身經(jīng)NAT映射后的地址:
??????? a,收不到服務(wù)器回復(fù),則認(rèn)為UDP被防火墻阻斷,不能通信,網(wǎng)絡(luò)類(lèi)型:Blocked.
??????? b,收到服務(wù)器回復(fù),對(duì)比本地地址,如果相同,則認(rèn)為無(wú)NAT設(shè)備,進(jìn)入第2步,否則認(rèn)為有NAT設(shè)備,進(jìn)入3步.
??? 2, (已確認(rèn)無(wú)NAT設(shè)備)STUN客戶端向STUN服務(wù)器發(fā)送請(qǐng)求,要求服務(wù)器從其他IP和PORT向客戶端回復(fù)包:
??????? a,收不到服務(wù)器從其他IP地址的回復(fù),認(rèn)為包被前置防火墻阻斷,網(wǎng)絡(luò)類(lèi)型:Symmetric UDP Firewall.
??????? b,收到則認(rèn)為客戶端處在一個(gè)開(kāi)放的網(wǎng)絡(luò)上,網(wǎng)絡(luò)類(lèi)型:Opened.
??? 3, (已確認(rèn)存在NAT設(shè)備)STUN客戶端向STUN服務(wù)器發(fā)送請(qǐng)求,要求服務(wù)器從其他IP和PORT向客戶端回復(fù)包:
??????? a,收不到服務(wù)器從其他IP地址的回復(fù),認(rèn)為包被前置NAT設(shè)備阻斷,進(jìn)入第4步.
??????? b,收到則認(rèn)為NAT設(shè)備類(lèi)型為Full Cone,即網(wǎng)絡(luò)類(lèi)型:Full Cone NAT.
??? 4, STUN客戶端向STUN服務(wù)器的另外一個(gè)IP地址發(fā)送請(qǐng)求,要求得到自身經(jīng)NAT映射后的地址,并對(duì)比之:
??????? a,地址不相同,則網(wǎng)絡(luò)類(lèi)型:Symmetric NAT.
??????? b,相同則認(rèn)為是Restricted NAT,進(jìn)入第5步,進(jìn)一步確認(rèn)類(lèi)型.
??? 5, (已確認(rèn)Restricted NAT設(shè)備)STUN客戶端向STUN服務(wù)器發(fā)送請(qǐng)求,要求服務(wù)器從相同IP的其他PORT向客戶端回復(fù)包:
??????? a,收不到服務(wù)器從其他PORT地址的回復(fù),認(rèn)為包被前置NAT設(shè)備阻斷,網(wǎng)絡(luò)類(lèi)型:Port Restricted cone NAT.
??????? b,收到則認(rèn)為網(wǎng)絡(luò)類(lèi)型: Restricted cone NAT.
??????? a,收不到服務(wù)器回復(fù),則認(rèn)為UDP被防火墻阻斷,不能通信,網(wǎng)絡(luò)類(lèi)型:Blocked.
??????? b,收到服務(wù)器回復(fù),對(duì)比本地地址,如果相同,則認(rèn)為無(wú)NAT設(shè)備,進(jìn)入第2步,否則認(rèn)為有NAT設(shè)備,進(jìn)入3步.
??? 2, (已確認(rèn)無(wú)NAT設(shè)備)STUN客戶端向STUN服務(wù)器發(fā)送請(qǐng)求,要求服務(wù)器從其他IP和PORT向客戶端回復(fù)包:
??????? a,收不到服務(wù)器從其他IP地址的回復(fù),認(rèn)為包被前置防火墻阻斷,網(wǎng)絡(luò)類(lèi)型:Symmetric UDP Firewall.
??????? b,收到則認(rèn)為客戶端處在一個(gè)開(kāi)放的網(wǎng)絡(luò)上,網(wǎng)絡(luò)類(lèi)型:Opened.
??? 3, (已確認(rèn)存在NAT設(shè)備)STUN客戶端向STUN服務(wù)器發(fā)送請(qǐng)求,要求服務(wù)器從其他IP和PORT向客戶端回復(fù)包:
??????? a,收不到服務(wù)器從其他IP地址的回復(fù),認(rèn)為包被前置NAT設(shè)備阻斷,進(jìn)入第4步.
??????? b,收到則認(rèn)為NAT設(shè)備類(lèi)型為Full Cone,即網(wǎng)絡(luò)類(lèi)型:Full Cone NAT.
??? 4, STUN客戶端向STUN服務(wù)器的另外一個(gè)IP地址發(fā)送請(qǐng)求,要求得到自身經(jīng)NAT映射后的地址,并對(duì)比之:
??????? a,地址不相同,則網(wǎng)絡(luò)類(lèi)型:Symmetric NAT.
??????? b,相同則認(rèn)為是Restricted NAT,進(jìn)入第5步,進(jìn)一步確認(rèn)類(lèi)型.
??? 5, (已確認(rèn)Restricted NAT設(shè)備)STUN客戶端向STUN服務(wù)器發(fā)送請(qǐng)求,要求服務(wù)器從相同IP的其他PORT向客戶端回復(fù)包:
??????? a,收不到服務(wù)器從其他PORT地址的回復(fù),認(rèn)為包被前置NAT設(shè)備阻斷,網(wǎng)絡(luò)類(lèi)型:Port Restricted cone NAT.
??????? b,收到則認(rèn)為網(wǎng)絡(luò)類(lèi)型: 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通信方法研究").
?
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/liqinghua1653/archive/2009/04/14/4071518.aspx