【问题标题】:UDP Hole punching: one Symmitric and another non-symmetric NATUDP 打孔:一个对称 NAT 和另一个非对称 NAT
【发布时间】:2012-07-18 10:50:32
【问题描述】:

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

  1. 两个 Peers(P1,P2) 将向服务器 (S) 发送 1 个数据包。
  2. Server(S) 回复两个告诉其他人 IP:PORT
  3. P1 和 P2 收到此 UDP 数据包,知道其他人的外部/公共 ip:port。
  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) = *失败*

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

有人知道发生了什么吗?

【问题讨论】:

  • 我知道这是一个老问题,但是如果一个对等体是全锥体而另一个是对称的,我相信不会有任何问题,因为全锥体直接接收第一条消息并回复给它的端点已收到。然后将创建隧道。

标签: networking tcp udp udpclient hole-punching


【解决方案1】:

有一篇论文here

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2017-08-27
    • 2013-10-05
    • 2016-12-11
    • 2011-11-27
    • 2011-11-27
    • 2011-12-21
    • 2023-04-07
    • 1970-01-01
    • 2016-03-19
    相关资源
    最近更新 更多