新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > P2P网络“自由”穿越NAT的“秘密”

P2P网络“自由”穿越NAT的“秘密”

作者:时间:2013-05-30来源:网络收藏

1. Full Cone:来自相同的内部地址的请求消息映射为相同的外部地址,与外部地址(目的地址)无关。映射关系为P:p#8596;A:b,任何外部主机可通过(A:b)发送到数据到(P:p)上。
2 . Restricted Cone:来自相同的内部地址的请求消息映射为相同的外部地址,返回的数据只接受该内部节点曾发数据的那个目的计算机地址X。映射关系为P:p#8596;A:b#8596;X,只有来自X的数据包才可通过(A:b)发送到数据到(P:p)上。
3. Port Restricted Cone:来自相同的内部地址的请求消息映射为相同的外部地址,返回的数据只接受该内部节点曾发数据的那个目的地址X:x。映射关系为P:p#8596;A:b#8596;X:x,只有来自X:x的数据包才可通过(A:b)发送到数据到(P:p)上。
4. Symmetric(对称) :只有来自相同的内部地址(P:p),并且发送到同一个地址(X:x) 的请求消息,才被映射为相同的外部地址(A:b),返回的数据只接受该内部节点曾发数据的那个目的地址X:x。映射关系为P:p#8596;A:b#8596;X:x,当(P:p)访问(Y:y)时,映射为P:p#8596;B:c#8596;Y:y。
  
P2P利用STUN穿越
  
位于后面终端A与B要穿越NAT直接通讯,可以借助在公网上的第三者Server来帮助。
  
穿越NAT的情况分为为两种方式:

1、一方在NAT之后,一方在公网上。这种情况相对简单,只要让NAT之后的终端先发起通讯,NAT就没有作用了,它可以从Server上取得另一个Peer的地址,主动连接,回来的数据包就可以方便地穿越NAT。

2、双方都在NAT之后,连接的成功与否与两个NAT的类型有关。主要的思路的先通过终端与Server的连接,获得两个终端在NAT外部的地址(IP与端口号),再由终端向对方的外部地址发邀请包,获取自己与对方通讯的外部地址,俗称为“打洞”。关键是获取了NAT外部映射的地址,就可以发包直接沟通,建立连接。但当一方是对称型,另一方是Port Restricted或对称型时,无法有效获取外部地址,邀请包无法到达对方,也就无法穿越NAT。具体的分析可以根据两个NAT的类型分成若干情况分析,这里给一般的穿越例子。

实例: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
  
此时B会把直接来自A的包丢弃,所以要在NAT B上打一个方向为A的洞,那么A就可以向200.20.20.20:22000发送数据了
  
打洞的指令来自Server。B向A的地址100.10.10.10:11000发一个UDP报文,被NAT A丢弃,但在NAT B上建立映射记录,NAT B不在丢弃来自A的报文。
  
Server通知A可以通讯,A发起数据UDP包给B,NAT B放行,B收到A的包,双方开始通讯
  
注:若是对称NAT,当B向A打洞的端口要重新分配(NAT A不会再分配11000端口),B无法获取这个端口,所以不适用本方法。
  
实例: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发送TCP数据包SYN:192.168.10.11:1234=>200.20.20.20:22000,在NAT A上打洞
B向A发送TCP数据包SYN:192.168.20.22:1234=>100.10.10.10:11000,在NAT B上打洞

通道建立,A与B三次握手建立TCP连接

p2p机相关文章:p2p原理



上一页 1 2 下一页

关键词: P2P网络 NAT IP地址

评论


相关推荐

技术专区

关闭