当前位置: 首页 > 知识库问答 >
问题:

UDP穿孔:一个对称NAT和另一个非对称NAT

秦渝
2023-03-14

我正在尝试用打孔实现P2P。流程如下:

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

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

  • 当P1和P2都在非对称NAT(全/受限锥)上时,我不会遇到任何问题。
  • 当P1=非对称且P2=对称时:
  • -----路由器-1(对称-NAT)+路由器-2(非对称)=成功
  • ----路由器-3(对称-NAT)+路由器-2(非对称)=*故障*

有人知道发生了什么吗?

共有1个答案

阎渝
2023-03-14

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

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

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

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

 类似资料:
  • 到目前为止还不错,但这里有一个问题:它只适用于特殊情况。 我知道对称NAT(将您的专用IP和端口映射到您想要到达的每个目的地址的特定不同地址的NAT)引起的问题,因此假设我向S1和S2发送一个数据包,S1将看到端口为50263的公共地址,而S2将看到50264)。我还知道,某些非对称NAT要求您先将UDP数据包发送到特定地址,然后才能从同一地址接收数据包。 所以到目前为止我所理解的是,只要您的NA

  • 问题内容: 我试图在Java中实现UDP-Holepunching的简单草图以测试其概念,并稍后在我的C / C ++应用程序中使用它。 从Wikipedia来说,我的理解是:A和B是未定义网络结构背后的客户端,C是著名的公共可访问服务器。 A将数据包发送到服务器C,服务器保存其IP地址和端口。C将获得A的NAT的公共IP地址。这样做,A前面的NAT将创建一条路由,该路由会将此端口上的所有数据包传

  • 我知道这个话题并不新鲜。虽然存在各种信息,但健壮的解决方案并没有出现(至少我没有找到)。我有一个用python3编写的P2P守护进程,pie上的最后一个元素是通过TCP连接NAT后面的两个客户端。我得此主题得参考资料: https://bford.info/pub/net/P2pnat/ 如何使两个客户机在连接了一个汇点服务器后直接连接? TCP穿孔问题 到目前为止我所做的: 服务器: 现在,当前

  • 我正在尝试用Boost::ASIO实现NAT打孔。根据我的理解,NAT穿孔器的工作原理是这样的(UDP/TCP): 客户端A绑定到端口并连接到服务器S,客户端B执行相同操作。 当S同时接收到请求和匹配时,它将A的ip和端口发送给B,B发送给A。 a和B接收对方的ip和端口,现在它们从同一端口向对方发送消息并形成连接(因为它们正在等待回复?) 如果没有成功的或,我似乎无法运行任何。当然,当目标端口没

  • 在本章中,我们将详细讨论对称和非对称密码术。 对称密码学 在这种类型中,加密和解密过程使用相同的密钥。 它也被称为secret key cryptography 。 对称密码术的主要特征如下 - 它更简单,更快捷。 双方以安全的方式交换钥匙。 缺点 (Drawback) 对称加密的主要缺点是,如果密钥泄漏给入侵者,则可以轻松更改消息,这被视为风险因素。 Data Encryption Standa

  • 大多数人似乎都通过UDP使用NAT穿孔,但在我的例子中,我需要使用TCP(这是事实,在有人问“为什么不使用UDP?”之前)我找不到任何示例代码或至少一个适当的教程。我能找到的都是理论上的附属物,但没有使用套接字或TCPClients(我更喜欢套接字)。 有人能给我链接一些示例代码吗?我可以用这些示例代码连接两个NAT后的客户端,或者用示例代码链接到完整的教程?我知道在.NET中很难实现这个目标(我