有沒有辦法通過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