2016-11-11 6 views
0

仲介サーバーなしでTCPまたはUDP経由で真のP2P通信を確立する方法はありますか? 2台のコンピュータにパブリックIPアドレスしかないが、NATルーターやプライベートネットワークの背後にある場合、それは難しいものになることは理解しています。実際、もっと見るともっと見えますプレーン不可能。私はSTUN、TURN、ICEのプロトコルとホールパンチングを発見しましたが、少なくとも、接続を確立するには何らかの種類のサーバーが必要です。私は一見とても驚いているので、とてもシンプルなので、何かが欠けていますか? 理想的には私はGolangを使って解決策を探していますが、C++の助けや例も役に立ちます。ありがとうございます。P2P TCP/UDP接続の確立(NATトラバーサル)

+0

'もし彼らがどんな種類のルータの背後にあるなら、主な問題はNATであり、これはまたIPv4のアドレスの不足のためです。 NATなしでは、それは簡単です、はい。そして、いいえ、3番目のホストなしでは、これは(IPv4で)実行できません。一方の端は接続を開始しなければならず、他方のルータはそれの背後にあるどのホストがターゲットであるかを知る方法がありません。 – deviantfan

+0

あなたは[libp2p](https://github.com/libp2p/go-libp2p)を見ましたか? –

+0

@ChristopherWaldon興味深いですが、まだWIPであり、ICEが提供していないものは提供していないようです。つまり、他の接続タイプが不可能な場合でもサーバーリレーに戻ってしまいます。しかし、ありがとう。 – ChrysmPsy

答えて

1

これは厳密にはGo質問ではありません。一般的なネットワーキングに関する質問です。

これは難しい理由は、インターネットがNATをサポートするように設計されておらず、NATが起こったばかりであり、多くの機能が壊れたからです。問題のきれいな解決方法は、NATがないIPv6に切り替えることですが、可能ではない可能性があります。

NATボックスがNAT-PMPまたはuPNPをサポートしている場合は、それを使用できます。最も簡単な方法は、libminiupnpcへのcgoバインディングを作成することです。または、あなたはネイティブGoライブラリのために釣りに行くことができます。

NATがこれらのプロトコルのいずれかをサポートしていない場合、穴あけは壊れやすい難しい手法なので、おそらく実行するのが難しいと思われるので、おそらく運が悪いはずです。

関連する問題