【发布时间】:2013-04-21 23:15:34
【问题描述】:
我正在尝试使用 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:PORT 上发送简单的 UDP 数据包来打孔(但再次使用直接server.send([..], [..], peerip, peerport))。我知道第一个数据包总是被丢弃,所以我以 100 毫秒的间隔发送 50 个数据包,而远程对等点做同样的事情。
如果我了解 UDP 打孔方法,从第一个对等点 (A) 发送数据包会在 A 的 NAT 中打开 NAT 记录,并被 B 丢弃 的 NAT,因为 NAT 中没有记录。因此,当 B 向 A 发送数据包时,A 的第一个数据包(针对 B)创建的 NAT 中有记录,并且数据包应该被 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 - 在第二个虚拟机上使用 VPN
P.P.S.:我在 Virtual Box 中使用虚拟化 Windows。
【问题讨论】: