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