クエリ フラッディングは、ピアツーピア ネットワーク上のリソースを検索する方法です。これは単純で拡張性が低いため、めったに使用されません。Gnutellaプロトコルの初期バージョンはクエリ フラッディングによって動作していましたが、新しいバージョンではより効率的な検索アルゴリズムが使用されています。
手術
ピアツーピア ネットワークは、通常、多数のノードで構成され、各ノードはネットワーク内のすべてのノードではなく、ノードの小さなサブセットに接続されています。ノードがネットワーク上のリソースを見つけたい場合 (そのリソースが、自分が知らないノード上にある可能性があります)、ノードは検索クエリをそのすぐ近くのノードにブロードキャストするだけで済みます。そのノードがリソースを持っていない場合、そのノードは、そのノードの近隣ノードに、クエリをその近隣ノードに転送するように依頼します。これは、リソースが見つかるか、すべてのノードと通信するか、またはネットワークによって設定されたホップ制限に達するまで繰り返されます。
クエリ フラッディングは実装が簡単で、リクエストの少ない小規模ネットワークに適しています。ネットワーク内の到達可能なすべてのノードに接続するため、ネットワーク内でリソースが見つかるかどうかを正確に判断できます (たとえば、 Freenet は確率的な結果のみを返します)。
一方、すべてのリクエストによってすべてのノードがアクセスされる可能性があります。各ノードは少数のクエリを生成する可能性がありますが、そのようなクエリはそれぞれネットワークを氾濫させます。したがって、大規模なネットワークでは小規模なネットワークよりもノードごとにはるかに多くのトラフィックが生成され、本質的にスケーラブルではありません。さらに、ノードは存在しないリソースのリクエストを発行するだけでネットワークを氾濫させることができるため、ネットワークに対して サービス拒否攻撃を仕掛けられる可能性があります。
代替案
Gnutella プロトコルのバージョン 0.6 では、クエリ ルーティングが義務付けられています。クエリ ルーティング仕様では、元の研究のアイデアがどのように実装されているかが説明されています。Kad ネットワークなどの他のファイル共有ネットワークでは、ファイルのインデックス作成やキーワード検索に分散ハッシュ テーブルを使用しています。 BitTorrent は、個々のファイル (またはアーカイブ) を共有するために個別のオーバーレイ ネットワークを作成します。検索は、Web サイトでインデックスされたトレント ファイルの検索など、他のメカニズムによって実行されます。同様のメカニズムは、マグネットリンクを使用して Gnutella ネットワークで使用できます。たとえば、Bitzi はマグネット リンクを検索するための Web インターフェイスを提供しています。
Napsterなどの以前の P2P ネットワークでは、ファイルの検索に集中型データベースが使用されていました。これにはスケーリングの問題はありませんが、中央サーバーは単一障害点となります。
