web-dev-qa-db-ja.com

ピアツーピア:ピアを見つける方法

専用の中央サーバーを使用せずにピアを見つける既知の方法はありますか?

例:インターネットに切断して再接続しているピアがあり、そのたびに新しいIPアドレスを取得していて、登録する専用サーバーを設定せずにそれらに接続したい場合。

ピアの電子メールアドレスを使用して、接続されたピアのマニフェストを定期的に送信し、ある種のタイムコードを使用して、専用サーバーの必要性を否定することを考えていました。以前に既知のピアアドレスをすべて試した後、どのピアにも接続できない場合、これはフォールバックになります。しかし、仲間を見つける既存のモデルが望ましいでしょう。

56
Ande TURNER

詳細を発見するには、少なくとも1つの最初のピアを知る必要があります。 GnutellaやGnutella2などの完全なP2Pプロトコル、またはより単純なOvernet(Storm Wormで有名になった)は、いくつかのピアの起動リストを持つ各クライアントに基づいています。これらは、たとえばWebベースの自動トラッカーから発生する可能性があります。クライアントは、ファイル検索を委任するときなどに、他のピアに追加のアドレスを要求することにより、ネットワーク全体またはその一部を検出します。

集中管理されたリソースがまったくない場合は、ブロードキャストメッセージを介して最初のピアを見つけ、最終的にIPアドレスをスキャンすることが最善の方法です。最初のアプローチは意味のあるものですが、少なくとも98%のケースでは結果が得られません。もちろん、後者のアプローチはインターネットを悪用しているだけでなく、ほとんどの国で違法です。

私は本当に、ある種の中央トラッカーを持つことを再考します。 PHPウェブサーバー上のスクリプト)のような単純なものにすることができます(今日のgnutellaネットワークは、お互いを知らない人々によってホストされているそのようなスクリプトによって支えられています。 )そして、これは確かに電子メールよりも軽量です(少なくとも、スパムフィルターのため、とにかく機能しません)。

41
anon6439

イントラネット内のピアの限られたケースでは、ピアに報告するように要求する既知のポートにブロードキャストUDPメッセージを送信することが可能です。

9
Oddthinking

データを投稿できる既存のフォーラムを活用します。シークレットIRCチャネル、写真へのデータの埋め込み、写真共有サイト4chan?への投稿、アプリケーションがcaptiaログインなしでログインしてデータを投稿できるようにするサイトなど。

http://chatzilla.hacksrus.com/faq/#password

別の戦略は、デジタル通貨取引にメッセージを埋め込むことです。ぶらぶらしそうな安いコインを選んでください。多分DOGEまたはMOONコインです。アプリにウォレット機能を組み込みます。アプリが制御するアドレス間でマイクロトランザクションを前後に投稿できるようにします。それでも鉱山労働者の料金はありますが、これはペニーのほんの一部です。メタデータをトランザクションに追加することを後で禁止する場合でも、トランザクションをMOONのIPアドレスと同等にして、アプリのMOONコインでバニティアドレスを使用できます。そのため、新しいノードがオンラインになると、ブロックチェーンを検索する対象が2daMOON%bootStr @ pM3にわかります。 SEND-104.003021133 MOON IP = 104.3.21.133は高価な命題ではありません。

6
user6265

BitcoinQTクライアントはノードを見つけるためにさまざまな方法を使用しますが、それらのいくつかはあなたにとって役立つかもしれません。

Satoshi Client Node Discovery

IRCは使用されなくなりましたが、実装が最も簡単かもしれません。

バージョン0.6.x以降、ビットコインクライアントはデフォルトでIRCブートストラップを使用しなくなりました。バージョン0.8.2以降、IRCブートストラップはサポートされなくなりました。以下のこのドキュメントは、ほとんどの以前のバージョンで正確です。

自分のアドレスを学習して共有することに加えて、ノードはIRCチャネルを介して他のノードアドレスについて学習しました。 irc.cpp を参照してください。

ノードは自分のアドレスを学習した後、自分のアドレスをニックネームとして使用する文字列にエンコードしました。次に、ランダムにIRC#bitcoin00と#bitcoin99の間に名前が付けられたチャネルに参加しました。次に、WHOコマンドを発行しました。スレッドは、チャネルに表示された行を読み取り、他のIPアドレスをデコードしました。チャネル内のノード。これは、ノードがシャットダウンされるまで、これを永遠にループで行いました。

クライアントがIRCからアドレスを発見すると、アドレスのタイムスタンプを現在時刻に設定しましたが、51分の「ペナルティ」を使用していました。つまり、実際には1時間ほど前に見られたように見えました。

6
David

古い質問ですが、私はこの問題について自分自身で考えていたので、2セント払います。つまり、ノードが少なくとも1つの有効なピアを認識している場合、中央サーバーは必要ありません。新しいノードは、現在のメンバーによってネットワークに追加する必要があります(アプリケーションに応じて、招待されるか、ノードが別のノードを生成します)。

仮定して:

  • エージェントはピアを追跡します。このアドレス帳のサイズとエントリの管理方法は、システムの性質によって異なります。例えばピアが安定したアドレスを使用している場合、ピアが接続されたままになる時間

  • エージェントは他のピアとピア情報を共有します

  • 少なくとも一部のエージェントは、ノードがネットワークに接続してそのアドレス帳を更新する頻度(またはノードが安定したアドレスを持っている)に比べて、比較的長期間利用可能なままです。

  • ピアアドレスに加えて、可用性情報も追跡されます(システムに応じて、ここでは多くのオプションがあります。例としては、ピアに安定したアドレスがあるかどうか、最後に確認したとき、いくつかの可用性メトリック、コンテンツ/サービスタイプ情報、アドレス有効期間知られている)

  • 新しいエージェントは少なくとも1つの有効なピアで初期化されます(中央ノードである必要はなく、任意の有効なノードにすることができます)

  • 悪意のあるピアが可能性がある場合、信頼メカニズムが必要になります

ピアがオンラインになると、ピアはピアテーブルのピアにクエリを実行して、アクティブなピアを見つけ、期限切れの動的アドレスを削除する可能性があります。ノードはピア情報を交換し、それ自体がリンクされる場合があります。このピア発見/交換は、十分なサイズまたは品質、あるいはその両方である場合、ピアリストまで、特定のホップ数またはランダムウォークを介して継続する場合があります。

さらにいくつかの詳細:

  • ノードは、ノードアドレスが変更される頻度に関連する頻度でピア情報を接続および共有します。そのため、アドレス帳が古くなることはなく、ノードは、以前のピアが最後の既知のアドレスで利用できないため、切断されます

  • ノードは、最も安定したノードを中心に集中する傾向を回避するために、受け入れるピアの数を制限する必要がある場合があります。

  • ノードは、保持するピアについて選択的である必要があります。つまり、データを交換する可能性が高いもの(たとえば、履歴に基づく重み)

  • ノードリンクは、アプリケーションに応じて非対称または対称になります。

4
Edward Kirton

オプション3を使用しない限り、接続を開始するには常に中央サーバーが必要になりますが、3つの方法があります。

  • キープアライブを使用して、既知のピアリストを維持する中央サーバー。
  • いくつかの共通リソースを維持する1つ以上の中央サーバーは、ピアを相互に検出するために使用できますが、ピアが接続されている限り(BitTorrentのようなもの)、接続後は中央サーバーは不要になります。ピア接続をチェーンすることもできます。
  • ポート/ IPスキャン(強く非推奨)。

あなたの例では、ピアが登録されるある種の中央サーバーがまだあります。プロトコルが唯一の違いです。

4
GalacticCowboy

簡単に言えば、中央サーバーなしでこれを行う方法はありません。

これを行う場合は、動的DNSを使用するかどうかに関係なく、1つ以上の中央サーバーが必要です。クライアントには、接続先を発見する方法が必要であり、これを行うための本当に賢明な方法は、自分のサーバーを使用することです。最も単純なシナリオでは、応答としてIPアドレスを送信するだけです。

仮想サーバーは月額約15ドルで手に入れることができ、IMOは他人の帯域幅を使用したり悪用したりするよりもかなり安価です。


[編集]。

簡単に言えば、次のような別の方法があります。

振り返ると、ピアのセットをクラスターコントローラーとして指定し、動的DNSサービスを使用して他のピアがクラスターコントローラーを検出できるようにすることだと思います。

ダイナミックDNSプロバイダーを選択します。これをmyc.ath.cxと呼びます(私は http://www.dyndns.com/ を使用しています)。

各ピアは、クラスタコントローラになることができる必要があります。クラスタコントローラには、接続されている他のすべてのピアのリストが含まれます。

ピアが起動すると、myc.ath.cxを検索して接続を試みます。 30秒以内に接続できない場合は、DNSエントリの登録を引き継ぎます。

他のピアを発見したいピアは、単にmyc.ath.cxにクエリを実行でき、リストが提供されます

すべてのピアは、コントローラをクラスタ化する必要がある場合に備えて、ピアのリストを定期的にダウンロードする責任があります。

クラスターコントローラーは定期的にDNSエントリを照会します-IPアドレスから変更された場合、クラスターコントローラーではないことがわかるため、現在DNSエントリーがあるクラスターコントローラーに接続し、既知のホストのリストを提供します。

クラスターコントローラーは、リストにあるホストに定期的にアクセスして、それらがまだ有効であることを確認します。

3

他のP2Pシステムのオンラインピアを追跡するために特別に構築された別のP2Pシステムはどうですか?

次に、新しいP2Pシステムのピアを見つける問題を軽減して、「メイン」のP2Pシステムのピアを見つけるだけにします。これにより、使用したいシステムのオンラインピアのアドレスがわかります...

1
Ethan

ただし、メールの送信方法は専用サーバーを使用します。正確には、ピアの電子メールサーバー。

大まかに言えば、ピアが使用しているインターネットへの接続を特徴付けることができない限り、何らかの専用ストレージまたはサーバーを使用せずに可能ではないと思います(電子メールアプローチは、斜めではありますが)。

基本的に、X数のピアのセットがあり、それらがYの時間の間接続し、その後、それらがZの時間の間グリッドから外れている場合...基本的に、それがどのくらいの確率であるかについての確率方程式を構築できます。最後に連絡したピアのセットはまだ利用可能です。その確率が1に近づく場合(上記のX、Y、およびZの特定のセットの場合)、ストレージを使用せずにピアツーピアネットワークを維持できる可能性が最も高くなります。

おそらく精神の中でもっと。 「専用の中央サーバー」の代わりに、単純なオンライン無料サービスを使用してピアリストを指定します。 yahooグループなどを設定します。クライアントはそれを自動的に検索して、ピアのセットを照会するためのピアアドレスを取得できます。クライアントは認証を使用してコード化してグループに投稿でき、他のユーザーが既知のアクティブなピアのセットを要求できるように定期的にそのIPアドレスを投稿できます。

本当にトリッキーになりたい場合は、基本的にステガノグラフィーの方法を使用してピアの位置情報を非表示にすることができます。つまり「何とか」のグーグル検索を取得します。保護されていない(CAPTCHAがない)メッセージボードがある結果の最初のサイトを見つけます。 "Indubitably"(または何でも)で始まる3番目(または何でも)の投稿を見つけ、そこに最初のメッセージのヘッダーを見つけます。ピアのIPアドレスがあります。それでもうまくいかない場合は、検索語句のリストを下に移動してください。

しかし、それは卑劣です。 :-)

1
Paul Sonier

既存専用サーバーを目的に再利用できますか?

特に、各ピアを動的DNSに登録することを考えていますが、少し醜いことがあれば、既知のHotmailアカウントやGoogleドキュメントなどへのアクセスを共有します。

1
Oddthinking

サービスの検出には、中央ディレクトリまたはなんらかのブロードキャストプロトコルを使用できます。 Googleでそれらをインデックスに登録できると仮定すると、特定のページに含まれるいくつかのユニークで珍しい単語を使用して各ピアがWebサイトを実行するシステムを想像できます。次に、これらの単語に基づくGoogle検索結果を使用して、潜在的なピアを特定できます。これは基本的に(騒々しくて遅い)インターネット放送です。

ページ構造が既知のパターンであるか、そのピアの識別可能な接続情報が含まれている場合、検索結果でそれらを簡単に区別できます。このようなパブリックディレクトリを使用すると、形成されたネットワーク内の危険にさらされたノードに開放されたままになりますが、これは、何らかのセキュリティメカニズムがないP2Pネットワークにはほとんど当てはまります。

Google(または他の検索エンジン)によって、特定の難解な検索用語セットに対してWebサイトをクロールして上位にランク付けするのがコツです。私はいくつかの方法を考えることができますが、それらは私が使用する方法ではありません。正当なサービスについては、お金を使うか、ディレクトリとして機能する無料のWebサイトを見つけたいと思います。

1
tvanfosson

すでに確立されている中央サーバーを探している場合は、ここのページのメタサーバーエントリを参照してください。
http://martindevans.appspot.com/
そこにピアを登録すると、他のピアがそれらを見つけることができます。これは明らかに中央サーバーですが、ユーザー側でのメンテナンスは必要ありません。

0
Martin

これは、分散ハッシュテーブルアルゴリズムの一般的な使用方法です。ペストリーのようなものを見ることをお勧めします。他のレイヤーの上にオーバーレイネットワーク(アプリケーションレイヤーネットワーク)を使用します。

各ノードにはGUID=があり、ピアネットワークを介して要求をルーティングするために使用されます。

0
Steve