4

我正在尝试使用打孔实现 P2P。这是流程:

  1. 两个 Peers(P1,P2) 都会向服务器 (S) 发送 1 个数据包。
  2. 服务器(S)回复两个告诉其他人 IP:PORT
  3. P1 和 P2 接收到知道其他人的外部/公共 ip:port 的 UDP 数据包。
  4. P1,P2 开始向其他对等点发送数据包公共 IP:PORT。
  5. 一旦对等方收到其他对等方的数据包,我假设该孔已打孔并将此套接字提供给我的应用程序。

我在不同的路由器上进行了测试,结果如下:

  • 当 P1 和 P2 都在非对称 NAT(全/受限锥)上时,我不会遇到任何问题。
  • 当 P1=非对称且 P2=对称时:
  • -----router-1 (Symmetric-NAT) + router-2 (non-Symmtric) = 成功
  • ---- router-3 (Symmetric-NAT) + router-2 (non-Symmtric) = *失败*

直到第四步都很好。但在第 5 步中,没有一个对等方收到其他对等方的数据包。我期待至少* '非对称 NAT 后面的对等方'会收到其他的数据包。*

有人知道发生了什么吗?

4

1 回答 1

1

这里有一张纸

基本上他们使用两台服务器 S1 和 S2。

通过查看出站端口,他们通常能够预测当 P1 向 P2 发送数据包时将使用哪个出站端口,反之亦然。

显然许多路由器只是使用递增/递减或一些跳过大小

无法保证预测正确的端口。他们最终将一堆数据包发送到不同的端口,希望一个能够通过。

我对如何处理它有不同的想法,我需要找到一个对称 NAT 来测试它:)

于 2013-11-08T05:58:06.443 回答