2009-07-26 39 views
4

このトピックでは、this thread直接P2P接続

に似ている私は、ネットワークプログラミングのトピックに、むしろ新たなんだ、単一のローカルマシン上の基本的なTCP/UDPが、何もしませんでした。今私はP2Pネットワークのサポートが必要なアプリケーションを開発しています。具体的には、クライアント間のマッチメイキングを行うサーバを使用せずに、インターネットを介して接続して通信するアプリケーションが必要になります。

どちらのクライアントもどちらのクライアントにも直接接続できないため、ほぼすべてのユーザーがプロセスを複雑にするルータの背後にあると認識しています。

私は、UPnPがこれを手動で設定せずにポート転送を許可するオプションだと知っていますが、今のところこれはオプションではありません。彼らは私の目標を達成するための何らかの方法ですか、それとも私はそのサーバーが必要でしょうか?

答えて

5

IPアドレスなどを交換するにはサーバーが必要です。他のスレッドが文字通りに指摘しているように、接続を保証する唯一の方法は、サーバーを介してプロキシすることです。ほとんどのピアツーピアシステムでは、ほとんどの場合接続を確立するために、UPnPNATホールパンチング(この方法ではポート情報を中継するサーバーが必要であり、UDPでのみ動作する)が使用されます。

NATホールパンチングは、両方のクライアントがサーバとの接続を確立したときに、両方が両方のクライアントによって動作し、もう一方のポートが他のポートにリレーしたポートに直接接続しようとします。ほとんどのUDP NATは短時間IPアドレスとポートを記憶しているので、データが他のエンドに送信されることはありませんでしたが(UDPで重要なことではありません)、他のクライアントは数分後にそのレポートにNATその返答を期待するだろう。

+0

あなたは、IPv6がNATの問題を回避していると言いますが、これは私がそのアドレス形式でNATをブロックする直接接続のこの問題を回避できるのでしょうか? –

+0

完全にルーティング可能なIPv6アドレスの両端が必要です。 – ewanm89

2

UPnP(残念なことに一部のルータでしか動作しません)を無視し、セントラルサーバを使用していないので、両方のユーザがNATの背後にいるときに直接接続を作成することはできません。

+0

私はNETパンチング/ホールパンチングのテクニックを認識していますが、サーバーが必要です。 –

+0

私が最初に行ったときに私はあなたのポストでそのリンクを逃しました。中央サーバーを持たずに(接続のネゴシエーションを助けるために)、私はそれが可能であるとは思わない。 – Kitsune

+1

私たちが暮らしている悲しい世界は、2台のコンピュータが特別な構成のハードウェアや仲介業者を使わずに直接接続できないときです。 –

3

は、WCFでのP2Pチャンネルをチェックアウト:http://msdn.microsoft.com/en-us/library/cc297274.aspx

それはかなりうまく動作します。

+0

これはサーバーとUPnPなしで動作しますか? –

+0

はい。 Peer Naming ResolutionとIPV6を使用します。 – codekaizen

+0

IPv6は基本的にNATを使用しません。なぜなら、とにかく十分なアドレス空間があるからです。しかし、ほとんどのISPはまだそれをサポートしていません。コンシューマNATでは、IPv6接続をブリッジするためのファームウェアを更新する必要があります。 – ewanm89

1

サーバが「マッチメイク」するのを避けるために、あなたはskypeがやることができ、いくつかのピアをNATの背後にある他の人にリレーとして設定できます。あなたはいつも何らかの種類のブートストラップメカニズムを必要とします。そのため、中央サーバはおそらくあなたのシステムに何らかの形で(おそらくあなたの開発内容によって)動くでしょう。

関連する問題