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

linux_xzy 2014-02-12 09:44:29
加精
  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)地址运行服务端,又运行了一个客户端,在宿舍电脑运行了另一个客户端,结果测试失败(都是在虚拟机上运行)。
  业务流程大致是:客户端和服务端一直用固定端口做信息交互,如心跳包,服务器获取了两个客户端,并将双方的信息发送给每个客户端,之后客户端直接双方都建立两个线程,同时做发送和接收,对服务端发送心跳包也一直持续,但是两个客户端一直也无法得到对方发来的信息,抓包工具在每个客户端抓包获取的源端口和目的端口也还没有改变。;要是让两个客户端都在同一个局域网,指定服务端也是同一个局域网,相当于说三者都在局域网,之后两个客户端能够通讯(这说明服务端在获取双方信息和发送给两端的客户端信息是正确的);
  
  我无法确定是不是我还缺少了哪些步骤,导致失败,麻烦高手指点。
...全文
7075 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
落日先生 2014-10-09
  • 打赏
  • 举报
回复
请问一下,你所使用的服务器是使用的开源的服务器吗?如果是的话,“并将双方的信息发送给每个客户端,之后客户端直接双方都建立两个线程” 这一步是怎么实现的啊根据stun协议
eziowayne 2014-06-27
  • 打赏
  • 举报
回复
客户端为什么还要做映射呢?直接连到STUN服务器作判断就行了啊。 对于p2p还有办法做简单的测试: 只需要一台主机,然后主机开两个虚机,虚机分别用NAT类型接入网络,服务器程序跑在主机上,虚机运行客户端看看能不能打通。。跑在实际情况下最好有公网的服务器。
dugd_2014 2014-06-26
  • 打赏
  • 举报
回复
插入,标记一下,共同学习。
river80 2014-03-14
  • 打赏
  • 举报
回复
下载里有现成的VC代码,可以运行。
zjk2752 2014-03-14
  • 打赏
  • 举报
回复
两个客户端之间能不能通哦,至少先PING一下
妖尾_火龙 2014-03-12
  • 打赏
  • 举报
回复
u010599631 2014-03-03
  • 打赏
  • 举报
回复
引用 26 楼 oBaiSeFengXinZi1 的回复:
能否 提供下路由器 NAT类型是锥形的的型号呢 想弄个自己来测试下 我现在确定 之前的一些判断是错的 我宿舍的路由器是对称(Symmetric )的
路由器型号已经不记得了,不过,90%以上的路由器都是锥形的。如果路由器贵,买个无线网卡做热点也能测试。
linux_xzy 2014-02-28
  • 打赏
  • 举报
回复
能否 提供下路由器 NAT类型是锥形的的型号呢 想弄个自己来测试下 我现在确定 之前的一些判断是错的 我宿舍的路由器是对称(Symmetric )的
u010599631 2014-02-28
  • 打赏
  • 举报
回复
每个客户端多组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基本能够成功。
0xNetwork 2014-02-25
  • 打赏
  • 举报
回复
同志,好好加油,成功了发我一份
makezwl 2014-02-20
  • 打赏
  • 举报
回复
你的客户端在获得端口信息后,直接是客户端交互?不经过服务器端?
Wenxy1 2014-02-19
  • 打赏
  • 举报
回复
p2p是热门的网络技术,帮你置顶。
Wenxy1 2014-02-19
  • 打赏
  • 举报
回复
p2p穿透成功率在90%左右,锥形的NAT一般都可以穿透,对称型的NAT一般很难穿透。 请参考RFC ICE协议文档。 开源项目PJSIP有p2p穿透的模块。
linux_xzy 2014-02-19
  • 打赏
  • 举报
回复
@Idle_Cloud 如果说 服务器给客户端发送的端口都是错的 那么 让服务器绑定局域网IP 三者都在局域网做测试的话 是不会成功的 我这边 让三者都在同一个局域网 服务器还是做中介的 就能通讯 这应该能证明服务器发送诶客户端的信息是对的吧?
l4kangaxx 2014-02-18
  • 打赏
  • 举报
回复
帮你顶一下,不是很清楚。
我爱吃豆腐 2014-02-16
  • 打赏
  • 举报
回复
楼主去看看udt
liang118038 2014-02-13
  • 打赏
  • 举报
回复
弄个花生壳以域名方式访问服务器吧,电信给你分配的IP是动态的,直接通过DNS以域名解释出IP地址才行。
不要做咸鱼 2014-02-13
  • 打赏
  • 举报
回复
你是根据自己的服务器判定的NAT类型?你还是一步步确认下每个步骤吧,有开源的nat类型测试工具,然后再根据NAT类型判断该怎样去打洞
树哥 2014-02-12
  • 打赏
  • 举报
回复
你宿舍的电脑是在路由器后面吗?而且你肯定没考虑过,你们这些路由器都是在电信运营商基站的路由器之下的,你没法在电信运营商的路由器上做静态映射吧?
Carl_CCC 2014-02-12
  • 打赏
  • 举报
回复
你这个服务器发送的端口不对吧,你考虑过这种情况没,就是服务器发给客户端的端口号都是错的。
加载更多回复(10)

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧