UDP穿透技术:一个对称NAT和另一个非对称NAT

5
我正在尝试使用打洞技术实现P2P连接。以下是流程:
  1. 两个点对(P1,P2)都向服务器(S)发送1个数据包。
  2. 服务器(S)回复,告知另一个点对的IP和端口。
  3. P1和P2接收到此UDP数据包,知道了对方的外部/公共ip:port。
  4. P1和P2开始向其他点对的公共IP:PORT发送数据包。
  5. 一旦点对接收到了其他点对的数据包,我就假设打洞成功,并将此套接字交给应用程序。
我在不同的路由器上进行了测试,这里是结果:
  • 当P1和P2都在非对称-NAT(完全/受限锥体)中时,我没有遇到任何问题。
  • 当P1=非对称,P2=对称时:
  • -----路由器-1(对称NAT)+路由器-2(非对称)=成功
  • -----路由器-3(对称NAT)+路由器-2(非对称)=*失败*
前四步没问题。但在第五步中,没有一个点对收到了另一个点对的数据包。我期望至少*“在非对称NAT后面的点对”*会收到其他点对的数据包。 有人知道发生了什么吗?

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

1

这里有一篇论文在这里

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

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

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

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

我有一个不同的想法来解决它,我需要找到一个对称NAT来测试它 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接