UDP打孔不成功,但测试表明它应该可以工作(移动网络)

Posted

技术标签:

【中文标题】UDP打孔不成功,但测试表明它应该可以工作(移动网络)【英文标题】:UDP Hole punching unsuccessful, but tests show it should work (mobile network) 【发布时间】:2013-06-25 08:02:12 【问题描述】:

在过去的两周里,我一直在尝试实施 udp 打孔,但我不知道为什么。我知道打孔算法不能保证工作,但我相信它应该在我的测试用例中工作,因为我注意到一旦我在我的家庭网络上绑定我的套接字,端口与外界相同它在本地,并且对于从此套接字进行的所有连接都保持这种状态。审查我的试验后的任何帮助将不胜感激。

我有三台电脑,我的 osx 台式机、我的 iPhone 和我的 amazon ec2 ami。

在桌面上,我构建了一个可可应用程序,它使用 GCDAsyncUDPSocket 库绑定端口并联系 ec2 服务器,其中使用 apache 的 mina 库的 java 应用程序存储套接字外部 ip/端口并将其与传递的用户名相关联在有效载荷中。

位于 AT&T 网络上的 iphone 运行一个应用程序,该应用程序使用相同的 GCDAsyncUDPSocket 库以相同的用户名联系 ec2 服务器,然后 ec2 查找用户名,找到桌面信息并通知桌面iphone的地址和桌面地址的iphone。

现在 iphone 和台式机互相了解,他们开始互相发送数据包,希望能打个洞。

理论上这应该可行,但也许我错过了一些关于移动网络的东西,这会使这变得困难?但是再次在第四台外部计算机上运行一个简单的 udp echoer 来手动 msg 桌面也不起作用,所以也许它是我的路由器,但我不明白这是怎么回事,因为我所有的测试都表明桌面要求的端口for 与路由器分配的相同。

我已经做了将近两个星期了,进展甚微,如果有任何提示,我将不胜感激!

【问题讨论】:

【参考方案1】:

“一旦我在我的家庭网络上绑定了我的套接字,端口与外界相同,因为它是本地的”

我非常怀疑这一点。要遍历 NAT,给定已向第 3 方发送数据报的对等方 A 和 B:S 您需要使用 S 看到的公共 IP 和 S 看到的端口从 A 向 B 发送数据报,反之亦然em>(即不是端口A,B从他们的角度来看是必然的)。

【讨论】:

这没有回答问题,应该是评论。 它可能会也可能不会,但这是一个可能的答案 - 这就是它不起作用的原因 - 我是说从外面看到的端口不一样,并强调他需要考虑帐户地址和端口

以上是关于UDP打孔不成功,但测试表明它应该可以工作(移动网络)的主要内容,如果未能解决你的问题,请参考以下文章

移动提供商无法进行 UDP 打孔

UDP打孔只能部分工作c#

1个端口上的UDP打孔?

UDP 打孔 (c++/winsock)

UDP打孔混乱

NAT 后面的 UDP 打孔