P2P之我见,关于打洞的学问-------打洞

既然P2P可以直接在客户端间建立连接,为啥像电驴,QQ这样的P2P软件还要登录呢。

打个比方,假设有两个用户,A,B,相关信息如下:


如果A要跟B打洞,如何知道B的外网IP呢,A只能通过B的UDID 去服务器查询一下对吧。

好,我们得出结论,打洞需要一台服务器做牵线作用。

打洞的过程咱们分类别来介绍吧,假设服务器端为S: 125.125.236.25。

Full cone NAT:

按前文的介绍,只要内部突破了一个端口,外网任意地址都能访问,其流程就变成:

1)A,B在S上登录,A内网端口为8090,外网端口7051,B内网端口3352,外网端口6543。

2)A向S查询B的地址。

3)A向B发送请求,使用7051端口,访问B的6543端口

4)打洞成功。

何其简单,可惜这样的设备现在太少了。


Restricted cone NAT( Address-Restricted cone NAT ):

Port-Restricted cone NAT:

1)A,B在S上登录,A内网端口为8090,外网端口7051,B内网端口3352,外网端口6543。

2)A向S查询B的地址。

3)S把A的地址告诉B。

4)A用8090端口访问B的6543端口。

5)B用3352端口访问A的7051端口。

6)打洞成功。

过程是这样的,但为什么要这样做呢。

看看第4步,A用8090端口访问B的6543端口,实际是经过NAT交互后,变成7051端口向外发请求,B端NAT会阴断请求,但是会在A端开通一个通道:A:7051/B:6543。

上图:


数据流:A(8090)->A(7051)->B(6543)

结果:A(7051)可以接受B(6543)的数据,即:


A端开了一个面向B 6543的锥形(望文生义哈)。

同理第5步也建在B端建立了一个通道:B:6543/A:7051

双向都建立了通道,就意味着打洞成功了。

最后一种情况:Symmetric NAT,这种类型的P2P打洞我表示压力很大,且看过程:

1)A,B在S上登录,A内网端口为8090,外网端口7051,B内网端口3352,外网端口6543。

2)A向S查询B的地址。

3)S把A的地址告诉B。

4)A用8090端口访问B的6543端口。

这一步就出问题了,因为这里A内网的8090端口对应外网的端口已经不是7051了,到底多少,S不知道,B也不知道,A也不知道。

好,打洞过程的知道就先说到这。

明天将聊聊P2P的服务器架构。


  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值