P2P網(wǎng)絡(luò)“自由”穿越NAT的“秘密”
1. Full Cone:來自相同的內(nèi)部地址的請求消息映射為相同的外部地址,與外部地址(目的地址)無關(guān)。映射關(guān)系為P:p#8596;A:b,任何外部主機(jī)可通過(A:b)發(fā)送到數(shù)據(jù)到(P:p)上。
2 . Restricted Cone:來自相同的內(nèi)部地址的請求消息映射為相同的外部地址,返回的數(shù)據(jù)只接受該內(nèi)部節(jié)點(diǎn)曾發(fā)數(shù)據(jù)的那個(gè)目的計(jì)算機(jī)地址X。映射關(guān)系為P:p#8596;A:b#8596;X,只有來自X的數(shù)據(jù)包才可通過(A:b)發(fā)送到數(shù)據(jù)到(P:p)上。
3. Port Restricted Cone:來自相同的內(nèi)部地址的請求消息映射為相同的外部地址,返回的數(shù)據(jù)只接受該內(nèi)部節(jié)點(diǎn)曾發(fā)數(shù)據(jù)的那個(gè)目的地址X:x。映射關(guān)系為P:p#8596;A:b#8596;X:x,只有來自X:x的數(shù)據(jù)包才可通過(A:b)發(fā)送到數(shù)據(jù)到(P:p)上。
4. Symmetric(對稱) NAT:只有來自相同的內(nèi)部地址(P:p),并且發(fā)送到同一個(gè)地址(X:x) 的請求消息,才被映射為相同的外部地址(A:b),返回的數(shù)據(jù)只接受該內(nèi)部節(jié)點(diǎn)曾發(fā)數(shù)據(jù)的那個(gè)目的地址X:x。映射關(guān)系為P:p#8596;A:b#8596;X:x,當(dāng)(P:p)訪問(Y:y)時(shí),映射為P:p#8596;B:c#8596;Y:y。
P2P利用STUN穿越NAT:
位于NAT后面終端A與B要穿越NAT直接通訊,可以借助在公網(wǎng)上的第三者Server來幫助。
穿越NAT的情況分為為兩種方式:
1、一方在NAT之后,一方在公網(wǎng)上。這種情況相對簡單,只要讓NAT之后的終端先發(fā)起通訊,NAT就沒有作用了,它可以從Server上取得另一個(gè)Peer的地址,主動(dòng)連接,回來的數(shù)據(jù)包就可以方便地穿越NAT。
2、雙方都在NAT之后,連接的成功與否與兩個(gè)NAT的類型有關(guān)。主要的思路的先通過終端與Server的連接,獲得兩個(gè)終端在NAT外部的地址(IP與端口號),再由終端向?qū)Ψ降耐獠康刂钒l(fā)邀請包,獲取自己與對方通訊的外部地址,俗稱為“打洞”。關(guān)鍵是獲取了NAT外部映射的地址,就可以發(fā)包直接溝通,建立連接。但當(dāng)一方是對稱型,另一方是Port Restricted或?qū)ΨQ型時(shí),無法有效獲取外部地址,邀請包無法到達(dá)對方,也就無法穿越NAT。具體的分析可以根據(jù)兩個(gè)NAT的類型分成若干情況分析,這里給一般的穿越例子。
實(shí)例:UDP穿越NAT:
A登錄Server,NAT A分配端口11000,Server得到A的地址為100.10.10.10:11000
B登錄Server,NAT B分配端口22000,Server得到B的地址為200.20.20.20:22000
此時(shí)B會(huì)把直接來自A的包丟棄,所以要在NAT B上打一個(gè)方向?yàn)锳的洞,那么A就可以向200.20.20.20:22000發(fā)送數(shù)據(jù)了
打洞的指令來自Server。B向A的地址100.10.10.10:11000發(fā)一個(gè)UDP報(bào)文,被NAT A丟棄,但在NAT B上建立映射記錄,NAT B不在丟棄來自A的報(bào)文。
Server通知A可以通訊,A發(fā)起數(shù)據(jù)UDP包給B,NAT B放行,B收到A的包,雙方開始通訊
注:若是對稱NAT,當(dāng)B向A打洞的端口要重新分配(NAT A不會(huì)再分配11000端口),B無法獲取這個(gè)端口,所以不適用本方法。
實(shí)例:TCP穿越NAT:
A登錄Server,NAT A分配端口11000,Server得到A的地址為100.10.10.10:11000
B登錄Server,NAT B分配端口22000,Server得到B的地址為200.20.20.20:22000
A向B發(fā)送TCP數(shù)據(jù)包SYN:192.168.10.11:1234=>200.20.20.20:22000,在NAT A上打洞
B向A發(fā)送TCP數(shù)據(jù)包SYN:192.168.20.22:1234=>100.10.10.10:11000,在NAT B上打洞
通道建立,A與B三次握手建立TCP連接
p2p機(jī)相關(guān)文章:p2p原理
評論