我和老师接手一个即时通讯软件开发项目!遇到问题ing老师开始时候对UDP打洞原理了解还算充分,并且在实验室局域网内,各种网络拓扑情况都测试通过,可以先在拿到公网上面竟然出了问题!我形容一下我的情况,请高手给点指点,说明一下为什么出现这种情况!首先我们有一个公网的Server:111.111.111.1:2881
然后我正在使用的是2个NAT下的一个普通PCA:192.168.0.2:12345
我登陆服务器以后服务器看到我的公网信息是PCA:111.111.111.2:10000这时 为了方便测试我们用了另外一台公网的PCB测试,他的IP:Port是
PCB:111.111.111.3:12345并且登陆以后也是这样现在遇到一个问题!PCA要与PCB通信
PCA 发送数据给 PCB 成功!
PCB 从Server那里收到我的公网信息PCA:111.111.111.2:10000
PCB 发送数据给 PCA 失败!请问这个是为什么!!!
在没有测试的时候我预想是端口被改变了,但是我每隔30s向Server发送心跳信息!
Server看到我的信息端口没有改变阿!
如果真的是发生了一个socket出nat以后不同sesion不同端口的话,那么qq他们有时如何实现的呢,高手谢谢 帮忙看看之 , 小弟不胜感激!!!!!!!!!!!
然后我正在使用的是2个NAT下的一个普通PCA:192.168.0.2:12345
我登陆服务器以后服务器看到我的公网信息是PCA:111.111.111.2:10000这时 为了方便测试我们用了另外一台公网的PCB测试,他的IP:Port是
PCB:111.111.111.3:12345并且登陆以后也是这样现在遇到一个问题!PCA要与PCB通信
PCA 发送数据给 PCB 成功!
PCB 从Server那里收到我的公网信息PCA:111.111.111.2:10000
PCB 发送数据给 PCA 失败!请问这个是为什么!!!
在没有测试的时候我预想是端口被改变了,但是我每隔30s向Server发送心跳信息!
Server看到我的信息端口没有改变阿!
如果真的是发生了一个socket出nat以后不同sesion不同端口的话,那么qq他们有时如何实现的呢,高手谢谢 帮忙看看之 , 小弟不胜感激!!!!!!!!!!!
我刚找了点文章,上面提到我们可能是使用了Symmetric NAT:所以造成此现象,
那位高人有这方面 现成的技术 !!帮忙 help 谢谢 提示一下 也可以
一定要先是内网主动向公网发包了,公网才可以向公网发包的两个可以穿透的内网是彼此向对方发包,才能建立连接
PCA 发送数据给 PCB 成功!
PCB 从Server那里收到我的公网信息PCA:111.111.111.2:10000
PCB 发送数据给 PCA 失败!请问这个是为什么!!!
----------------------------
这里,既然内网PCA向公网PCB发包成功了,那NAT肯定是分配了一个ip:port的
如果这个ip:port与111.111.111.2:10000相同,那PCB向这个ip:port发是可以成功的
如果不同,就不成功,证明这个NAT是不可穿透的
PCB 发送数据给 PCA 成功!如果两者都在NAT后, 先发的一条会不被对方收到, 因为被NAT丢弃. 所以应该这样重复几次.这里说的先后, 是指NAT收到的先后, 而不是发送的先后, 考虑到网络延时的不对称性.
我没搞过
pcb向server发消息要求pca向pcb打洞
server如此做了
pca向pcb打洞了
pcb尝试向pca发送消息
如果有洞了,可以发送成功,没有洞,继续重复这个过程这个流程应该是可以的。。
也就是一个socket穿过 NAT 向 pca和pcb发送信息,Nat分配的端口是不同的,甚至 发送pca的2个端口Nat都会分配不同的端口目前只有2个对称Nat需要服务器 中转,否则 打洞都顺利成功谢谢 上面的各位! 就此结贴!!!