UDP打孔不成功,但测试显示它应该工作(移动网络)

时间:2013-06-27 17:26:33

标签: udp nat hole-punching

在过去的两周里,我一直试图实施udp打孔失败,但我不确定为什么。我知道打孔的算法不能保证工作,但我相信它应该适用于我的测试用例,因为我注意到一旦我在我的家庭网络上绑定我的套接字,该端口就像外部世界一样它是本地的,并且对于从这个套接字构成的所有连接保持这种方式。审查我的试验后的任何帮助将不胜感激。

我有三台电脑,我的osx台式机,我的iPhone和我的亚马逊ec2 ami。

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

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

现在的iphone&桌面知道对方他们开始相互打包,希望得到一个打孔。

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

我已经在这里待了将近两个星期而且进展甚微,我们将不胜感激任何提示!

1 个答案:

答案 0 :(得分:0)

“一旦我在家庭网络上绑定了我的套接字,该端口与外部世界相同,就像在本地一样”

我非常怀疑。给定已经向第三方发送数据报的对等体A和B的NAT:S需要使用它们的公共IP将数据报从A发送到B,反之亦然,如S 所示,它们的端口由S看到(即不是端口A,B从他们的角度来看是绑定的)。