所有 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穿越(打洞)方案详解(进阶分析篇)