UDP 打洞:一种对称 NAT 和另一种非对称 NAT

use*_*711 5 networking udp tcp udpclient hole-punching

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

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

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

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

直到第四步就可以了。但在第五步中,没有对等点收到其他对等点的数据包。我预计至少* “非对称 NAT 后面的对等点”会收到其他的数据包。*

有人知道发生了什么事吗?

Joh*_*ooy 1

这里有一张纸

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

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

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

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

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