UDP打孔:一个Symmitric和另一个非对称NAT

时间:2012-07-19 09:20:54

标签: networking tcp udp udpclient hole-punching

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

  1. 两个对等方(P1,P2)将向服务器(S)发送1个数据包。
  2. 服务器(S)回复告诉其他人IP:PORT
  3. P1和P2接收此UDP数据包,知道其他的外部/公共IP:端口。
  4. P1,P2开始向其他对等公共IP发送数据包:PORT。
  5. 一旦对等方接收到其他对等方的数据包,我认为这个漏洞已被打孔并将此套接字提供给我的应用程序。
  6. 我在不同的路由器上测试了这个,结果如下:

    • 当P1和P2都在非对称NAT(Full / Restricted cone)上时, 我没有遇到任何问题。
    • 当P1 =非对称且P2 =对称时:
    • ----- router-1(Symmetric-NAT)+ router-2(非Symmtric)=成功
    • ---- router-3(Symmetric-NAT)+ router-2(非Symmtric)= * 失败 *

    直到第4步它的罚款。但是在第5步中,没有对等体接收到其他对等体的数据包。我原以为至少 * '对等在非对称NAT 后面会收到其他的数据包。 *

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

1 个答案:

答案 0 :(得分:1)

有一篇论文here

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

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

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

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

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