我有一些节点。每个节点都属于其他网络。每个节点都有私有IP,例如192.168.0.2并保持在 NAT 之后。
节点之间是否有可能进行通信?实际上,我需要在这些独立节点之间传输文件。
我尝试使用这个项目 - https://github.com/libp2p/go-libp2phttps://github.com/libp2p/go-libp2p https://github.com/libp2p/go-libp2p. But libp2p有一些限制:
- 两个节点都有私有IP地址(同一网络)
- 其中至少有一个具有公共 IP 地址。
但我有具有私有IP地址的节点,它们属于不同的网络。
Update.
有这样的解决方案:
- https://en.wikipedia.org/wiki/Hole_punching_(网络) https://en.wikipedia.org/wiki/Hole_punching_(networking)
- https://en.wikipedia.org/wiki/Universal_Plug_and_Play https://en.wikipedia.org/wiki/Universal_Plug_and_Play
- https://stackoverflow.com/a/8524609/1756750 https://stackoverflow.com/a/8524609/1756750
- UDP/TCP 打洞 vs UPnP vs STUN vs? https://stackoverflow.com/questions/20939222/udp-tcp-hole-punching-vs-upnp-vs-stun-vs
- https://stackoverflow.com/a/31623109/1756750 https://stackoverflow.com/a/31623109/1756750
- NAT 后面到 NAT 后面的连接 https://stackoverflow.com/questions/5077720/behind-nat-to-behind-nat-connection
- http://www.brynosaurus.com/pub/net/p2pnat/ http://www.brynosaurus.com/pub/net/p2pnat/
这个想法是,您有一个集合服务器,节点 1 和 2 连接到该服务器。为此,他们必须知道集合服务器的 IP。
其过程如下:
1) 1和2都向RS发送UDP数据包。 N1(节点 1 的 NAT 盒)和 N2 在转换表中创建一个条目,该条目将节点的 IP 映射到 RS 的 IP/端口。
2) RS将(EIP1,EP1)传递给节点2。这是包含NAT盒的公共IP和公共端口的Tulpe。 RS发送(EIP2,EP2)到节点1。
3) 节点1在转换表中创建映射:(IP1,EP1,EIP2,EP2)。
4) 节点 2 执行相同操作,但使用 (IP2,EP2,EIP1,EP1)。
注意:发生步骤 3 和 4,因为每个节点都会向刚刚收到的元组(IP、端口)发送 UDP 数据包,因此 NAT 框会添加一个新条目。
在最坏的情况下,这些消息必须发送多次。
这个技巧使两个节点都能获得公共 IP 并拥有正确的端口。
这提供了一种建立点对点连接的好方法,例如Skype。
我希望这有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)