有没有办法通过TCP或UDP建立真正的P2P通信而不需要中间服务器?我知道如果两台计算机只有公共IP地址,但是如果它们在任何类型的NAT路由器后面或者在私人网络中,它开始变得棘手,这是非常可行的。实际上,我越是仔细观察,看起来越多显然不可能。我发现了STUN,TURN和ICE协议以及打孔技术,但据我所知,它们都需要某种服务器才能建立连接。我很惊讶看似很简单的事似乎很难做,我错过了什么? 理想情况下,我正在寻找使用Golang的解决方案,任何帮助或C++中的示例也会很有用,谢谢。建立P2P TCP/UDP连接(穿越NAT)
0
A
回答
1
这不是严格的Go问题 - 这是一个普遍的网络问题。
的原因,这是非常困难的是,互联网从未被设计为支持NAT,NAT刚刚发生,并打破了很多功能。干净的解决问题的方法是切换到IPv6,在没有NAT,但如果你的NAT盒支持NAT-PMP或UPnP,请您可以使用,这也许是不可能的
。最简单的方法是创建一个绑定到libminiupnpc
的cgo,或者你可以去钓鱼一个本地的Go库。
如果您的NAT不支持其中任一协议,那么你很可能出于运气,因为冲孔是一个脆弱和困难的技术,你可能会发现难以实施。
相关问题
- 1. Android - Java TCP连接NAT穿越
- 2. NAT穿越和IPv6
- 3. IPSec的NAT穿越
- 4. NAT穿越实验?
- 5. Android上的3G/4G无线数据连接的UPnP NAT穿越
- 6. NAT穿越TURN服务器在C#
- 7. P2P连接的NAT遍历实现
- 8. .Net WCF NAT穿越的最佳实践
- 9. 在C#中建立P2P连接
- 10. libutp(μTP)和NAT穿越(UDP hole punching)
- 11. 是任何浏览器实现的NAT穿越?
- 12. 安卓P2P(直接连接)通过互联网(在NAT后面)
- 13. Android:NAT穿越?
- 14. 带CoAP和NAT穿越的物联网设备
- 15. Android上的P2P P2P连接
- 16. 如何创建一个P2P连接,当两个客户端都在NAT之后
- 17. 在NAT之后的两台计算机之间建立连接
- 18. android p2p连接
- 19. NAT,P2P和多人游戏
- 20. Python P2P网络(NAT Punchtrough)
- 21. Nat Punchthrough了解P2P概念
- 22. 直接P2P连接
- 23. 建立两个Android手机之间的P2P连接?
- 24. 建立无需用户身份验证的P2P连接
- 25. 建立Windows Phone 7的P2P连接到Windows 8应用程序
- 26. 如何在两部手机之间建立p2p连接?
- 27. 如何使用socket.io-p2p在房间内建立对等连接?
- 28. 没有外部服务器的NAT穿越
- 29. 是否只有Javascript才能穿透NAT?
- 30. 穿越jQuery
'如果它们在任何类型的路由器后面'主要的问题是NAT,而这又是因为IPv4中缺少地址。没有NAT,这很简单,是的。没有,没有第三个主机,这是不可行的(在IPv4中)。一端必须开始连接,而另一端则无法知道它背后的主机是否是目标。 – deviantfan
你看过[libp2p](https://github.com/libp2p/go-libp2p)吗? –
@ChristopherWaldon看起来很有趣,但仍然是在制品,并且似乎没有提供任何ICE没有的东西,即如果其他连接类型不可能,它仍然退回到服务器中继。不过谢谢。 – ChrysmPsy