2011-01-01 5 views
3

私はVB.Netでチャットアプリケーションを開発しています。これは "安全な"チャットプログラムになります。すべてのトラフィックは暗号化されます(私はこれに最善のアプローチを見つける必要がありますが、それは今のところ問題ではありません)。中央サーバのないチャットプログラム

現在、プログラムが動作しています。私はサーバーアプリケーションとクライアントアプリケーションを持っています。しかし、私はそれが動作するための中央サーバーを必要としないようにアプリケーションをセットアップしたいです。

ネットワークの分散化にはどのような方法がありますか?

私はクライアントを開発してサーバーとしても機能するようにする必要があると思います。

クライアントは、どのサーバに接続する必要があるかを知っていますか、サーバがダウンしている場合はどうなりますか?どのようにクライアント/サーバは、中央サーバを持たずにネットワーク内に他のノードが存在するのでしょうか?

私はクライアントにIPアドレスが異なるノードが何であるかを知ることを望んでいませんが、中央サーバを持たなくても可能です。

このアプリケーションはVB.Netで書かれていますが、この時点で言語は本当に重要ではないと思います。

私が従うことのできるさまざまなアプローチを知りたいだけです。

+0

密接に関連:[Skypeはポート転送せずに仕組み](http://stackoverflow.com/questions/1539339/how-skype-work-without-port-forwarding) –

+0

興味深い読書でしたが、私はそれが本当に関連しているとは思っていません。 。 Skypeは目的地にメッセージを送信しようとします(これはチャットセッション内の複数の目的地、例えば接続されている全員)。これを行うには、クライアントは、私が避けたいと思うすべての異なるアドレスを知る必要があります。 2番目のスカイプは、クライアントAがクライアントBに直接接続できない場合に使用するすべての異なるアドレスを保持する中央サーバを使用します。スカイプの投稿が間違っていると分かっているかどうか教えてください。 – PeeHaa

答えて

2

例えば、Kademliaプロトコル(you can find it here)の論文を参照してください。簡単な概要だけを知りたい場合は、Wikipediaページhttp://en.wikipedia.org/wiki/Kademliaをご覧ください。 Kademliaプロトコルは、ネットワーク内のノードルックアップの方法を分散的に定義します。 eMuleソフトウェアにうまく適用されているため、実際に動作するようにテストされています。

チャットソフトウェアに重大な問題は発生しません。

+0

非常に面白いもの。ありがとうNubok! – PeeHaa

+0

@PeeHaa、これは実際に分散型チャットプログラムを作成するために必要なものを提供しましたか?リンクはもはや働いていませんし、中央サーバもなくチャットプログラムを作成しようとしています。あなたは正しい方向に私を向けることができるでしょうか? – Totem

+0

@Totem Yeahリンクだけがこのような理由で吸います。この回答(リンクを含む)は私に役立ちました。関連する論文はhttp://maude.sip.ucm.es/kademlia/files/pita_kademlia.pdfです。 TL; DRは、ネットワーク内のノードルックアップの方法を分散的に定義します。クイックイントロについてhttp://en.wikipedia.org/wiki/Kademlia – PeeHaa

2

一部クライアントが最初にネットワークに接続するための既知のIPアドレス。クライアントがネットワークに参加すると、物事はより分散化することができますが、その最初のステップには何かが必要です。

基本的に2つのオプションがあります。ユーザが1つ(ネットワークの既存ノードの場合、基本的にBitTorrentトラッカーの動作方法)、ゲートウェイノード(実質的に中央サーバ)のハードコードです。

+0

ハードコードのアプローチはオプションではありません。なぜなら、サーバーがダウンするとネットワーク全体が失敗するからです(私があなたのことを正しく理解していれば)。私は本当にそれを行うP2Pの方法について考えていた。しかし、アプリケーションは、ネットワーク内のどのノードがネットワーク内の他のすべてのノードを取得することなく、どのようにノードに存在するかを知ることができます。そのため、人々はネットワーク内のすべてのアドレスを取得することができません。複数のサーバーがネットワーク上で許可されるように中央サーバーなしでセットアップする方法 – PeeHaa

+1

通常、ある形式の識別子(ユーザー名など)があり、各ノードはユーザー名のルーティングテーブルを保持しています。ルーティングテーブルには、各ユーザのエンドIPはありませんが、そのユーザのエントリがすでに存在するネットワーク内のネイバのアドレスだけがあります。したがって、 'foo'のルーティングテーブルはBを指し、Bのルーティングテーブルは 'foo'をCと指し、Cのルーティングテーブルは 'foo'を指します。ここでDは 'foo'の実際のマシンですからログインしました。したがって、AはDのIPを知らない。Cのみがそれを知っている。 AはBにメッセージを送り、Cに転送してDに転送します。 – Amber

+1

このルーティングテーブルは、** IPを抽象的な物理的な場所にマップするのとまったく同じ方法で、**ユーザー名を抽象的なIPにマッピングします**。これはまた、インターネット自体と同じ問題を抱えていることを意味します。弱点は、識別子の一意性を強制するために使用する権限にあります。インターネットの場合、これはISPです。チャットクライアントの場合は、これはどのログインサーバでも使用できます。これを回避する方法の1つは、識別に公開鍵を使用し、一意性を強制することはないが悪用しにくいそれらの鍵ですべてのトラフィックを暗号化することです。 – Amber

0

多分あなたはuChatプログラムを見ることができます。これは、サーバーを気にせずにチャットできるuTorrentクリエイターのプログラムです。

アイデアはマグネットリンクからスームに接続し、それを使って受信メッセージを送信します。これは、琥珀の答えとして、あなたはアクセスポイントを必要とする、それはなど、サーバー、既知の群れ、手動でIPかもしれここ

はuChatプレゼンテーションです:http://blog.bittorrent.com/2011/06/30/uchat-we-just-need-each-other/

関連する問題