我试图用打孔实现P2P . 这是流程:
-
两个对等体(P1,P2)将向服务器(S)发送1个数据包 .
-
服务器(S)回复告诉其他人IP:PORT
-
P1和P2接收此UDP数据包,知道其他的外部/公共IP:端口 .
-
P1,P2开始向其他对等公共IP发送数据包:PORT .
-
一旦对等体接收到其他对等体的数据包,我认为该洞被打孔并将该套接字提供给我的应用程序 .
我在不同的路由器上测试了这个,结果如下:
-
当P1和P2都在非对称NAT(Full / Restricted cone)上时,我没有遇到任何问题 .
-
当P1 =非对称且P2 =对称时:
-
----- router-1(Symmetric-NAT)router-2(非Symmtric)=成功
-
---- router-3 (Symmetric-NAT) + router-2 (non-Symmtric) = Failure
直到第四步它的罚款 . 但是在第5步中,没有对等体接收到其他对等体的数据包 . 我原以为至少 *'peer behind non-Symmetric NAT' 会收到其他的包 . *
有人知道发生了什么事吗?
1 回答
有一篇论文here
基本上他们使用两个服务器S1和S2 .
通过查看出站端口,他们通常能够预测当P1向P2发送数据包时将使用哪个出站端口,反之亦然 .
显然,许多路由器只使用递增/递减或一些跳过大小
无法保证预测正确的端口 . 他们最终将一堆数据包发送到不同的端口,希望能够通过 .
我有一个不同的想法如何处理它,我需要找到一个对称NAT来测试它:)