C# UDP打孔-无法到达目标
我试图使用UDP打孔方法建立p2p连接,但我总是得到目的地不可到达状态的ICMP数据包 首先,创建了到服务器的UDP连接:C# UDP打孔-无法到达目标,c#,udp,p2p,C#,Udp,P2p,我试图使用UDP打孔方法建立p2p连接,但我总是得到目的地不可到达状态的ICMP数据包 首先,创建了到服务器的UDP连接: send = new IPEndPoint(IPAddress.Any, 0); server = new UdpClient(send); server.AllowNatTraversal(true); 没有任何直接连接(没有ip,没有端口,只有随机端口上的端点) 我使用directserver向服务器发送一些数据包。在服
send = new IPEndPoint(IPAddress.Any, 0);
server = new UdpClient(send);
server.AllowNatTraversal(true);
没有任何直接连接(没有ip,没有端口,只有随机端口上的端点)
我使用directserver向服务器发送一些数据包。在服务器的ip和端口上发送([…],…],serverip,serverport)
,并获取关于另一个对等方的信息(远程ip,用于连接到服务器的端口)
现在,我正在尝试通过使用服务器连接在对等方的IP:端口上发送简单的UDP数据包来打孔(但同样使用directserver.send([…],…]、peerip、peerport)
)。我知道第一个数据包总是被丢弃的,所以我以100毫秒的间隔发送50个数据包,而远程对等方也做同样的事情
如果我理解UDP打孔方法,从第一个对等方(A)发送数据包会在A的NAT中打开NAT记录,并且由于NAT中没有记录,它会被B的NAT丢弃。因此,当B向A发送数据包时,A的NAT中有一条记录,该记录是用第一个数据包(对于B)创建的,数据包应该由B接收。将创建B的NAT中的NAT记录A应成功地将另一个数据包发送到B
附言:测试成功了
-在第二个虚拟机上使用VPN
p.p.S.:我正在虚拟盒中使用虚拟化窗口。您应该从两个端点获取网络捕获跟踪,并研究结果。请密切注意各方面的端口号,因为端口号和IP地址可能会被重新映射 很难推断你在问什么。如果收到ICMP错误,则可能是NAT或端点未准备好接收UDP数据包。再重复几次打孔测试可能会解决这个问题 我怀疑您认为远程对等机正在侦听的端口号映射与您认为的不同。如果您使用的是对称NAT,则会出现这种情况,这在虚拟机上使用VPN是非常可能的