【发布时间】:2013-01-16 12:49:01
【问题描述】:
我正在做一些移动项目,需要与两个设备进行 P2P 通信。
我遇到了问题。 (因为智能手机很少有公共IP)
我找到了一些答案。这是“UDP打孔”。
我想我在概念上 100% 了解“UDP 打孔”,并编写了一些代码。 但它不起作用。
这是我的情况。
Device A connected NAT(A) for Wi-Fi.
Device B connected NAT(B) for Wi-Fi.
NAT(A) and NAT(B) is different one.
Relay Server S bind socket and waiting for devices. (S is WebServer but Network Status is good.)
At the first, A and B send dummy packet to S. Then S save UniqueID(to tell A and B), Public IP, Port.
And S send information to each device A and B.
Like this:
- IP Address and Port Number about A. -> send to B
- IP Address and Port Number about B. -> send to A
Now A and B send UDP packet to other device based on information(IP Address and Port Number) from S.
(15 per second. using same socket that used server-device session)
但它不起作用。 (实际上是断断续续的工作。可能10次一次?我不知道为什么成功和失败。没有任何微小的共同关系。)
我认为这不是 NAT 类型的问题。我测试了韩国,韩国 90% 的 NAT 不是对称锥。
【问题讨论】:
-
您能否解释(更详细地)会发生什么,如果它“不起作用”,好吗?您在 A 和 B 处甚至没有收到一个数据包吗? (或者它只是传输一些数据包然后停止?)数据包是否到达中继服务器 S? -- 另外:了解您正在使用哪种路由器硬件(例如 Linksys WRT54GU)以及您正在使用哪种固件可能会有所帮助。
-
两个客户端(设备)都无法获得其他人的数据包,但当时与服务器联网很好。 (使用 sage 套接字,并且当停止与服务器联网时,客户端也无法获取数据包。)所以我们尝试 A 将数据包发送到新服务器 S' 而不是 A 发送到 B(这是确定目标源何时更改,NAT 分配新端口号与否。)结果,S 获取的端口号与 S 获取的端口号相同。我们测试的 NAT 硬件是 'iptime N6004' 和蜂窝(Wibro,3G,LTE)。
-
此外,我们也失败了蜂窝环境。 (两个设备都使用蜂窝网络而不是 Wi-Fi)。如果是硬件问题,蜂窝环境下UDP打孔是不可能的?
标签: networking udp p2p nat hole-punching