laike9m / PyPunchP2P

Python实现NAT穿透+STUN+TURN+P2P聊天 | Python P2P chat
MIT License
428 stars 168 forks source link

两个client 使用同一个路由器, 不能正常通讯 #2

Open zhijianli88 opened 8 years ago

zhijianli88 commented 8 years ago

hi, lai

我试用了你的 pypunch P2P, 如果我两个client 是使用不同的路由器上网的话 使可以正常 chat的。 但是如果 两个client 使用同一个 路由器上网, 使无法通讯的。

PS: 我把你的python的代码 porting成了 C代码了。

laike9m commented 8 years ago

两个client 使用同一个 路由器上网, 使无法通讯的

这个时候你的 server 放在哪里?

zhijianli88 commented 8 years ago

server 放在公网。 我刚刚 换了一个网络测试, 两个client在同一个NAT (路由器)后面, 是可以通讯的。

所以我觉得这个现象 很有可能跟 路由器 的 行为有关系。

基于TCP的chat, 你有 研究吗

laike9m commented 8 years ago

TCP 穿透我在那篇文章里提了一下,因为太复杂了所以没有仔细研究。可以去看“Peer-to-Peer Communication Across Network Address Translators http://www.bford.info/pub/net/p2pnat/index.html”这篇论文,里面有讲 TCP 穿透。看了之后你就会了解有多麻烦。而且还未必可用。

2015-11-13 11:04 GMT+08:00 Li Zhijian notifications@github.com:

server 放在公网。 我刚刚 换了一个网络测试, 两个client在同一个NAT (路由器)后面, 是可以通讯的。

所以我觉得这个现象 很有可能跟 路由器 的 行为有关系。

基于TCP的chat, 你有 研究吗

— Reply to this email directly or view it on GitHub https://github.com/laike9m/PyPunchP2P/issues/2#issuecomment-156309831.

zhijianli88 commented 8 years ago

恩, 这篇文章 我也看到了

文章里面 也给了一些 各个路由器 厂商 对 P2P 打洞的支持情况。

laike9m commented 8 years ago

之前不能通讯的情况,server 能接到 client 的信息吗?可不可以把输出列一下?这样可以判断问题在哪里

zhijianli88 commented 8 years ago

两个client 和 p2p 的server都是连接正常的。而且 两个client都已经获得了 对端 的ip:port 问题是, client1 -> client2 的包, client 2 收不到 client2->client1 的包, client 1 也收不到。

laike9m commented 8 years ago

路由器类型是什么呢?

zhijianli88 commented 8 years ago

我家里面用的 是 tenda的路由器, 路由上获得的是公网ip 根据stun的返回, nat的类型是 Restrict NAT

laike9m commented 8 years ago

嗯。。那确实比较奇怪呢。希望你还是把输出写一下,如果可能的话

zhijianli88 commented 8 years ago

两个client都一直在输出 : UDP punching package xxx sent

laike9m commented 8 years ago

唔。。。。那我也不太清楚为什么。理论上只要一直发包路由器就可以感知到的。

wengyusu commented 7 years ago

确认路由器是否有loopback translation(或者叫hairpin NAT)功能 https://wiki.mikrotik.com/wiki/Hairpin_NAT