所有 NAT 类型的 P2P 连接

Posted

技术标签:

【中文标题】所有 NAT 类型的 P2P 连接【英文标题】:P2P connection over all NAT types 【发布时间】:2021-01-19 11:25:52 【问题描述】:

最近我正在开发一个 p2p 应用程序,我发现了如何使用 ICE 和 STUN 协议使用 c# 对 UDP 打孔进行编程。

这很好,但对称 NAT 和使用对称 NAT 的路由器有一些限制。\

我正在寻找一种通过任何 NAT 类型连接两个系统的方法。

无论如何,我也尝试过 UPNP 和端口转发,但由于防火墙和路由器黑名单,我不知道这个选项,如果你的回答是,请描述我应该如何正确使用此方法。

提前致谢。

【问题讨论】:

【参考方案1】:

Upnp 和 NAT-PMP 对于那些支持这些协议的路由器来说非常有用,我还没有遇到像“防火墙和路由器黑名单”这样的问题。

在路由器不支持这些协议的情况下,我使用 ICE。如您所说,对称NAT是一种保持最高安全性的类型,如果端口随机增加,则很难打孔。使用服务器作为中继(ICE 可以做到)比克服随机算法要容易得多。

如果您对对称 NAT 的源代码感兴趣,它位于诸如 nf_nat_core.c 之类的文件中,很容易追踪和了解其工作原理。

【讨论】:

嗨,谢谢您的回复。有没有使用端口转发?当我转发两个路由器的端口(也是全锥不对称)时,它没有连接,我有问题。没有其他方式而不是对称 NAT 的中继?谢谢。 @Amirmohammad Farhang 您可以查看开源库 libtorrent 作为示例。对于对称 NAT,我不知道任何 100% 成功的算法。

以上是关于所有 NAT 类型的 P2P 连接的主要内容,如果未能解决你的问题,请参考以下文章

P2P技术详解:P2P中的NAT穿越(打洞)方案详解(进阶分析篇)

P2P技术详解:P2P中的NAT穿越(打洞)方案详解(进阶分析篇)

NAT的四种类型

P2P 数据传输的 NAT 模拟

NAT 后面的 UDP P2P 连接

通俗易懂:快速理解P2P技术中的NAT穿透原理