当前位置:  技术问答>linux和unix

p2p udp穿透失败,麻烦高手指教

    来源: 互联网  发布时间:2017-05-30

    本文导语:    http://wenku.baidu.com/view/3009a6ebaeaad1f346933fe5.html    网上关于P2P udp穿透的理论知识大致和以上列的网址内容差不多,在此基础上做STUN测试,公司的公网IP是59.61.92.18,我让网管帮我做了端口映射,比如我现在的电...

  http://wenku.baidu.com/view/3009a6ebaeaad1f346933fe5.html 
  网上关于P2P udp穿透的理论知识大致和以上列的网址内容差不多,在此基础上做STUN测试,公司的公网IP是59.61.92.18,我让网管帮我做了端口映射,比如我现在的电脑局域网IP是172.16.15.188 映射端口8877 ,就是往(59.61.92.18/8877)发送数据,(172.16.15.188 /8877)可以接收到,用调试助手 (端口号8888 )往(59.61.92.18/8877)和宿舍电脑(已在路由器上做了端口映射)发送数据,接收端显示发送者的端口号不变,反过来测试宿舍的网络,大致可以确定双方所处环境是CORE NAT类型的,之后就用公司的这台电脑来测试程序,用(172.16.15.188 、8877)地址运行服务端,又运行了一个客户端,在宿舍电脑运行了另一个客户端,结果测试失败(都是在虚拟机上运行)。
  业务流程大致是:客户端和服务端一直用固定端口做信息交互,如心跳包,服务器获取了两个客户端,并将双方的信息发送给每个客户端,之后客户端直接双方都建立两个线程,同时做发送和接收,对服务端发送心跳包也一直持续,但是两个客户端一直也无法得到对方发来的信息,抓包工具在每个客户端抓包获取的源端口和目的端口也还没有改变。;要是让两个客户端都在同一个局域网,指定服务端也是同一个局域网,相当于说三者都在局域网,之后两个客户端能够通讯(这说明服务端在获取双方信息和发送给两端的客户端信息是正确的);
  
  我无法确定是不是我还缺少了哪些步骤,导致失败,麻烦高手指点。

|
两个客户端和服务器都在局域网里自然可以通信了。

我分析了下你的问题应该是这样:
假设客户端监听了23458端口,但外网看到的端口并不是23458,而是网关随机分配的一个端口(除非做了端口映射)
如果你另一个局域网的客户端往23458端口发送数据包,自然不成功

我建议客户端随机监听一个端口,然后向公网服务器发送数据,比如STUN协议,服务器就知道客户端的公网端口了
然后服务器把客户端A的公网IP:公网端口发给客户端B,告诉它A要和他打洞,B收到后立即向A间隔发送几个包;同理,A也一样。
如果NAT类型可以穿透,就会打洞成功

|
弄个花生壳以域名方式访问服务器吧,电信给你分配的IP是动态的,直接通过DNS以域名解释出IP地址才行。

|
p2p穿透成功率在90%左右,锥形的NAT一般都可以穿透,对称型的NAT一般很难穿透。
请参考RFC ICE协议文档。
开源项目PJSIP有p2p穿透的模块。

|
每个客户端多组ip,包括外部ip+端口和内部的,假设只有一个网卡,也就是只有两个地址(内部和外部)。
当两个客户端A和B都登录以后,A向B的两个地址都发送数据,如果B收到则打洞完成;如果B没收到,则B向A的两个地址都发送数据,A若收到则P2P成功,否则失败。
上面是基本思路。我以前做的是下面这样的过程,有一个服务器S的协助。
(1)A和B都登到S。
(2)A发给B打洞包,如果失败了,A向S请求并转发给B,告诉B说:A打不过来。
(3)然后让B主动发起打洞。
如果两次都失败,则打洞失败,否则成功了。
经我测试多次,上面的打洞过程对cone NAT基本能够成功。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • P2P分享软件 Alliance P2P
  • 第三代的P2P网络 ANts P2P
  • P2P 下载优化工具 PeerGuardian
  • P2P分享软件 Phex
  • P2P计算平台 JXTA
  • P2P 文件分享软件 ShakesPeer
  • P2P客户端软件 ApexDC++
  • P2P库 tknet
  • P2P下载工具 BitTorrent
  • sqlserver iis7站长之家
  • linux下p2p流量采集——高手请进
  • P2P文件共享软件 FrostWire
  • 基于插件的P2P框架和客户端 XNap
  • P2P支付网络 Ripple
  • P2P保护工具 PeerGuardian2
  • P2P文件分享 GNUnet
  • P2P web 代理 node-forward-proxy
  • 运行P2P Node.js Web 服务 iwebpp.io
  • P2P应用程序协议框架 Java BEEP Core
  • P2P 传输库 Libjingle


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3