P2P之我见,关于打洞的学问-------打洞
2013-11-19 11:33
906 查看
既然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的服务器架构。
打个比方,假设有两个用户,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的服务器架构。
相关文章推荐
- [置顶] P2P之我见,关于打洞的学问-------开篇
- P2P之我见,关于打洞的学问-------开篇
- P2P之我见,关于打洞的学问-------服务器架构
- 转帖关于p2p 模拟器的介绍 欢迎批评指教
- libJingle中关于p2p的一段文字翻译
- 关于p2p的一些思考
- 关于p2p的思考
- 关于P2P流量的识别方式
- QQ通信原理及QQ是怎么穿透内网进行通信的?(关于P2P)
- 读书笔记:季羡林关于如何做研究学问的心得
- 关于P2P流量的识别方式
- 谁能给个关于P2P开发流程的参考
- 关于P2P资金托管的知识
- QQ通信原理及QQ是怎么穿透内网进行通信的?(关于P2P)
- 关于TCP打洞技术(P2P)
- 关于TCP打洞技术(P2P)
- P2P技术基础: 关于TCP打洞技术
- 关于P2P穿越NAT/防火墙的困惑
- 关于P2P架构的网络游戏