UDP打孔 - 目标无法到达

时间:2013-04-28 03:06:32

标签: c# udp p2p

我正在尝试使用UDP打孔方法进行p2p连接,但我总是得到目标无法访问状态的ICMP数据包。

首先,创建了与服务器的UDP连接:

        send = new IPEndPoint(IPAddress.Any, 0);
        server = new UdpClient(send);
        server.AllowNatTraversal(true);

没有任何直接连接(没有ip,没有端口,只是随机端口上的端点)。

我将一些数据包发送到服务器的ip和端口上直接server.send([..],[..],serverip,serverport)的服务器,并获取有关另一个对等体的信息(远程IP,用于连接服务器的端口)

现在我试图通过在对等IP上发送简单的UDP数据包来打孔:使用服务器连接PORT(但是再次使用直接server.send([..], [..], peerip, peerport))。我知道第一个数据包总是被丢弃,所以我以100ms的间隔发送它50个,而远程同伴也做同样的事情。

如果我了解UDP穿孔方法,从第一个对等方发送数据包( A )会在 A 的NAT中打开NAT记录,并被 B删除的NAT是因为NAT中没有记录。因此,当B将数据包发送到 A 时,在第一个数据包(对于B)创建的 A 的NAT中有记录,并且应该通过 B 接收数据包STRONG>。创建 B 的NAT中的NAT记录。 A 应成功向 B 发送另一个数据包。

P.S。:http://nattest.net.in.tum.de/test.php测试成功 http://nattest.net.in.tum.de/individualResult.php?hash=a5f229d156d4f5409a305c37729d9510 http://nattest.net.in.tum.de/individualResult.php?hash=3fd60e888721908a9480cd12836b97af - 在第二个虚拟机上使用VPN

P.P.S。:我在Virtual Box中使用虚拟化Windows。

1 个答案:

答案 0 :(得分:0)

您应该从两个端点获取网络捕获跟踪并研究结果。密切关注所有方面的端口号,因为端口号可能会被重新映射以及IP地址。

很难推断出你在问什么。如果您收到ICMP错误,则NAT或端点可能尚未准备好接收您的UDP数据包。再重复一次打孔测试可能会解决这个问题。

我怀疑您认为远程对等端正在侦听的端口号与您认为的映射方式不同。如果您使用的是对称NAT,则会出现这种情况,这很可能是VM上的VPN。