首页 文章

UDP打孔 - 目标无法到达

提问于
浏览
1

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

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

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

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

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

现在我'm trying to make hole punch with sending simple UDP packets on peer'的IP:PORT使用服务器连接(但再次使用直接 server.send([..], [..], peerip, peerport) ) . 我知道第一个数据包总是被丢弃,所以我以100ms的间隔发送它50个,而远程对等体也做同样的事情 .

如果我理解UDP穿孔方法,从第一个对等方发送数据包( A )会在 A 的NAT中打开NAT记录,并且由于NAT中没有记录而被 B 的NAT删除 . 所以当B发送数据包到 A 时, A 的NAT中有第一个数据包创建的记录(用于B),数据包应由 B 接收 . 创建了 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 - 在第二台VM上使用VPN

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

1 回答

  • 0

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

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

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

相关问题