默认
发表评论 3
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教自已实现p2p技术时,反向链接的tcp通信失败的问题
阅读(58675) | 评论(3 收藏 淘帖
2金币
先看下面反向链接技术(网上摘抄的,原文:https://blog.csdn.net/do_best_/article/details/80423495 ),我如果不这样做,而是像A与B位于不同的NAT后去打洞来实现p2p通信,如首先,server将A、B的信息发给对方,A向B打洞(connect),然后启动侦听(listen),B之后链接(connect)A,但是并没有成功,为什么?

当通信的双方中只有一方位于NAT之后时,它们可以利用反向链接技术来进行P2P通信。图中Client A(拥有内网IP地址10.0.0.1)位于NAT之后,它通过TCP端口1234连接到服务器(拥有外网IP地址)的TCP端口1235上,NAT设备(拥有外网IP地址155.99.25.11)为这个连接重新分配了TCP端口62000。Client B(拥有外网IP地址138.76.29.7)也通过TCP端口1234连接到服务器端口1235上。Client A和Client B从服务器处获知的对方的外网地址二元组{IP地址:端口号}分别为{138.76.29.7:1234}和{155.99.25.11:62000},它们在各自的本地端口上进行侦听。

由于Client B 拥有外网IP地址,所以Client A要发起与Client B的通信,那么它可以直接通过TCP连接到Client B。但如果Client B尝试通过TCP连接到Client A进行P2P通信,则会失败,原因是Client A位于NAT设备后,虽然Client B发出的TCP SYN请求能够到达NAT设备的端口62000,但NAT设备会拒绝这个连接请求。要想与Client A通信,Client B要通过服务器给Client A转发一个连接请求,反过来请求Client A连接到Client B(即进行反向链接),从而建立起它们之间的TCP连接。





上一篇:请教 Android 设备上防火墙的技术实现原理下一篇:求助关于web端im的消息存储该怎么实现?从而方便浏览器拉取
推荐方案
评论 3
你可以总结一下你的问题:

  • 1)你遇到的具体是什么问题?
  • 2)你打算做什么应用?
  • 3)用的是什么协议?TCP?(为什么一定要用TCP搞P2P?)
  • 4)测试环境下,NAT路由的类型,有准确检测过吗?(检测工具可以在这里下载:一款用于P2P开发的NAT类型检测工具 [附件下载]

另外,你帖子里这篇文章的原文,应该是这篇《P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解
搞tcp打洞很少见吧,基本上大家都是用udp打洞啊
因为是第一次做,考虑到tcp的安全性,所以用tcp做,用你说的检查NAT的工具查看,显示是对称型的NAT,但是我网上荡的udp、tcp简单的p2p通信小程序,tcp通信失败,而udp却可以,说明不应该是对称型的NAT,如果实在不行,只能用udp做了
签名: 今天已签到
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部