Gnutella2は、 G2とも呼ばれ、主にMichael Stokesによって開発され、2002 年にリリースされたピアツーピア プロトコルです。
G2はGnutellaプロトコルに触発されていますが、接続ハンドシェイクとダウンロードの仕組みを除いて、その設計をほとんど共有していません。[1]
G2 は拡張可能なバイナリパケット形式とまったく新しい検索アルゴリズムを採用しています。
さらに、G2 には関連した(ただし大幅に異なる)ネットワーク トポロジと改良されたメタデータシステムがあり、ネットワーク上の ウイルスなどの偽のファイルを効果的に削減するのに役立ちます。
歴史
2002 年 11 月、マイケル ストークスは Gnutella 開発者フォーラムで Gnutella2 プロトコルを発表しました。Gnutella2 の目標は主に gnutella 0.6 プロトコルと完全に決別して最初からやり直すことであり、gnutella のあまりきれいでない部分をよりエレガントにし、全体として印象的で望ましいものにすることだと考える人もいましたが、他の開発者、主にLimeWireとBearShareの開発者は、これを「安っぽい宣伝活動」とみなし、技術的なメリットを軽視しました。一部の開発者は今でもこのネットワークを「Gnutella2」と呼ぶことを拒否し、代わりに「マイクのプロトコル」(「MP」) と呼んでいます。[2]
Gnutella2 プロトコルは、gnutella 0.6 仕様で定義されているように、接続に古い「GNUTELLA CONNECT/0.6」ハンドシェイク文字列[1]を依然として使用しています。この下位互換性のあるハンドシェイク方法は、Gnutella 開発者フォーラムによって、新しい無関係なネットワークをブートストラップするために gnutella ネットワークを使用する試みとして批判されましたが、ネットワークの支持者は、その目的はgnutella との下位互換性を維持し、現在の gnutella クライアントが自由に Gnutella2 を追加できるようにすることであると主張しました。
開発者らが自らの立場を固めると、すぐに激しい論争が勃発し、双方の決意がさらに固まった。[3] [4] [5] [6]
草案仕様は 2003 年 3 月 26 日に公開され、その後すぐにより詳細な仕様が発表されました。G2 は多くの「古い」Gnutella ネットワーク クライアントではサポートされていませんが、多くの Gnutella2 クライアントは今でも Gnutella に接続しています。多くの Gnutella2 支持者は、これは政治的な理由によるものだと主張していますが、Gnutella 支持者は、大幅な変更には大幅な書き換えのコストに見合うだけのメリットがないと主張しています。[7]
デザイン
Gnutella2 はノードをリーフとハブの2 つのグループに分けます。ほとんどのリーフはハブへの2 つの接続を維持しますが、 [8]ハブは数百のリーフ接続と、他のハブへの平均 7 つの接続を受け入れます。検索が開始されると、ノードは必要に応じてハブのリストを取得し、リストがなくなるか、事前に定義された検索制限に達するまで、リスト内のハブに連絡して、検索されたハブを記録します。これにより、ユーザーはネットワークに負荷をかけずに人気のあるファイルを簡単に見つけることができ、理論的には、ユーザーがネットワーク上の任意の場所にある単一のファイルを見つける機能を維持します。
ハブは、クエリ ルーティング テーブルを使用してリーフが持つファイルをインデックスします。クエリ ルーティング テーブルには、キーワードのハッシュの1ビットエントリが格納されています。リーフはこれをハブにアップロードし、ハブはこれをリーフが送信したすべてのハッシュ テーブルと組み合わせて、隣接するハブに送信するバージョンを作成します。これにより、検索に一致するエントリがルーティング テーブルに見つからない場合、ハブはリーフと隣接するハブにクエリを転送しないだけで、帯域幅を大幅に削減できます。
Gnutella2 は、検索にTCPではなくUDPを多用しています。TCP接続を設定するオーバーヘッドにより、少量のデータで多数のノードと通信する必要があるランダム ウォーク検索システムは実行不可能になります。ただし、UDP にも欠点がないわけではありません。UDP はコネクションレス型であるため、送信クライアントにメッセージを受信したことを通知する標準的な方法がなく、パケットが失われた場合、それを知る方法がありません。このため、Gnutella2 の UDP パケットには信頼性設定を有効にするフラグがあります。信頼性フラグが有効になっている UDP パケットを受信すると、クライアントは確認パケットで応答し、送信クライアントにパケットが宛先に到着したことを通知します。確認パケットが送信されない場合、信頼性の高いパケットが再送され、確実に配信されます。フラグが有効になっていない重要度の低いパケットには確認パケットが必要ないため、信頼性は低下しますが、確認パケットを送信して待機する必要がないため、オーバーヘッドも削減されます。
プロトコルの機能
Gnutella2 は、 XMLドキュメント ツリーに匹敵する拡張可能なバイナリ パケット形式を採用しており、これは Gnutella のあまり洗練されていない部分に対する解決策として考案されました。このパケット形式は、将来のネットワーク改善や個々のベンダーの機能を追加しても、ネットワーク上の他のクライアントにバグが発生する心配がないように設計されました。 [9]
ファイルの識別と整合性の安全なチェックのために、SHA-1 ハッシュを採用しています。複数のソースからファイルを並行して確実にダウンロードできるようにし、また、ファイルのダウンロード中に部分的なアップロードを確実に行えるようにするために、Tigerツリーハッシュが使用されています。[10]
より堅牢で完全な検索システムを作成するために、Gnutella2には、ファイル名だけで収集されるものよりも完全なラベル付け、評価、品質情報を検索結果に提供するためのメタデータシステムもあります。 [11]ノードはファイルを削除した後でもこの情報を共有できるため、ユーザーはコピーを保持しなくても、ネットワーク上の ウイルスやワームをマークできます。
Gnutella2はネットワーク接続の圧縮も利用し、ネットワークで使用される帯域幅を削減します。[10]
Shareaza には画像やビデオのプレビューを要求する追加機能がありますが、FilesScope のみがこれを限定的に活用しています。
gtk-gnutella はプロトコルを拡張し、 Gnutellaと G2のギャップをさらに縮めました。特に、半信頼性 UDP 層が強化され、従来の G2 クライアントと下位互換性のある方法で累積および拡張確認応答が追加されました。[12]さらに拡張されたのは、/Q2/I の "A" 文字列[13]と、クエリ ヒットに /QH2/H/ALT、/QH2/H/PART/MT、/QH2/HN、/QH2/BH、および /QH2/G1 が導入されたことです。[14]
gnutellaとの違い
全体的に、2 つのネットワークは非常に似ていますが、主な違いはパケット形式と検索方法にあります。
プロトコル
Gnutellaのパケットフォーマットは、もともと拡張性を考慮して設計されておらず、長年にわたって多くの追加が行われてきたため、パケット構造が乱雑で非効率的なものになっているため、批判されてきました。[15] Gnutella2はこれを教訓とし、Gnutella2に標準のgnutellaの多くの追加機能を備えているだけでなく、最初から将来の拡張性を考慮して設計されています。
検索アルゴリズム
gnutella はクエリ フラッディング方式の検索を使用しますが、Gnutella2 はランダム ウォークシステムを使用します。このシステムでは、検索ノードがハブのリストを収集し、一度に 1 つずつハブに直接接続します。ただし、ハブはいわゆる「ハブクラスター」に組織化され、各ハブは近隣のハブによって保存された情報をミラーリングするため、リーフにはハブ クラスター全体 (通常は 7 つのハブ) の情報が返されます。これは、gnutella のクエリ フラッディング システムに比べていくつかの利点があります。検索を続行してもネットワーク トラフィックが 急激に増加しないため、効率的です。クエリは多くのノードを経由しません。また、検索の粒度が増すため、クライアントは、定義済みのしきい値の結果が得られた時点で停止できます。これは gnutella よりも効果的です。ただし、ウォーク システムでは、ネットワークの複雑さと必要なネットワークの保守および管理も増加します。また、悪意のある攻撃者がネットワークをサービス拒否攻撃に使用するのを防ぐための保護策も必要になります。
用語
用語にも違いがあります。ネットワークを凝縮するために使用されるより能力の高いノードは、 gnutella ではUltrapeerと呼ばれますが、Gnutella2 ではHubと呼ばれ、トポロジーでも若干異なる方法で使用されます。gnutella では、Ultrapeer は一般にピア接続と同じ数のリーフを維持しますが、Gnutella2 Hub ははるかに多くのリーフを維持し、ピア (ハブ間) 接続は少なくなります。これは、さまざまなネットワークの検索方法によって最適なトポロジが異なるためです。
クライアント
リスト
フリーソフトウェアのGnutella2 クライアントには次のものが含まれます。
- Adagio [16] (クロスプラットフォーム)は、GPLに基づいてAdaで書かれています。
- Gnucleus (Windows)、C / C++で書かれ、LGPL の下で
- Gtk-gnutella(クロスプラットフォーム)、C言語で書かれています。バージョン1.1以降、G2へのリーフモード接続のみをサポートしています。[17]
MLDonkey(クロスプラットフォーム)はOCamlで書かれており、GPLの下で提供されていますが、バージョン2.9.0(2007年)以降、サポートは公式にはメンテナンスされておらず、バイナリでも無効になっています。 [18]- Shareaza (Windows)、マルチネットワーク、C++で書かれ、GPLの下で、現在+/- 93%のネットワークシェア[19]
独自のソフトウェア実装には以下が含まれます。
- Foxy (Windows) 中国のGnucDNA派生プログラム。他の G2 クライアントとの相互作用は不可能で、独自の「Foxy」ネットワークを使用します。このネットワークは、元の G2 から半分しか分離されておらず、G2 へのネットワーク漏洩が知られています[引用が必要]。理論的には、クライアントは G2 と互換性があります。無料。
- モーフィアス(Windows)
比較
次の表は、G2 ネットワークをサポートする利用可能ないくつかのアプリケーションの一般情報と技術情報を比較したものです。
参照
参考文献
- ^ ab 「GnutellaとGnutella2の類似点に関する開発者の議論」。Gnutella開発者フォーラム。2023年1月17日時点のオリジナルよりアーカイブ。2006年5月10日閲覧。
- ^ 「GDF Discussion on the Gnutella2 name」。Gnutella Developer Forum。2023年1月17日時点のオリジナルよりアーカイブ。2006年5月10日閲覧。
- ^ 「Gnutella/Gnutella2 炎上戦争の一部 (1)」。Gnutella 開発者フォーラム。2009 年 2 月 12 日時点のオリジナルよりアーカイブ。2006年 8 月 6 日閲覧。
- ^ 「Gnutella/Gnutella2 炎上戦争の一部 (2)」。Gnutella 開発者フォーラム。2023 年 1 月 17 日時点のオリジナルよりアーカイブ。2006年 8 月 6 日閲覧。
- ^ 「Gnutella/Gnutella2 炎上戦争の一部 (3)」。Gnutella 開発者フォーラム。2023 年 1 月 17 日時点のオリジナルよりアーカイブ。2006年 8 月 6 日閲覧。
- ^ 「Gnutella/Gnutella2 炎上戦争の一部 (4)」。Gnutella 開発者フォーラム。2023 年 1 月 17 日時点のオリジナルよりアーカイブ。2006年 8 月 6 日閲覧。
- ^ 「Gnutella2への移行に関する開発者の議論」。Gnutella開発者フォーラム。2023年1月17日時点のオリジナルよりアーカイブ。2006年5月10日閲覧。
- ^ 「Gnutella2 ネットワーク履歴」。Trillinux クローラー (G2paranha)。2009 年 5 月 15 日時点のオリジナルよりアーカイブ。2009 年 4 月 12 日閲覧。
- ^ 「パケット構造」。Gnutella2 Wiki。2007 年 12 月 19 日時点のオリジナルよりアーカイブ。2007 年 11 月 7 日閲覧。
- ^ ab "Gnutella2 Standard". Gnutella2 wiki. 2007-12-19 にオリジナルからアーカイブ。2007-11-07に閲覧。
- ^ 「Simple Query Language and Metadata」。Gnutella2 Wiki。2007 年 12 月 19 日時点のオリジナルよりアーカイブ。2007 年 11 月 7 日閲覧。
- ^ 「UDPトランシーバー - Gnutella2」。G2.doxu.org。2014年7月19日時点のオリジナルよりアーカイブ。2014年8月6日閲覧。
- ^ “Q2 - Gnutella2”. G2.doxu.org. 2014-02-25. 2014-07-14時点のオリジナルよりアーカイブ。2014-08-06閲覧。
- ^ “QH2 - Gnutella2”. G2.doxu.org. 2014-03-12. 2013-12-13時点のオリジナルよりアーカイブ。2014-08-06閲覧。
- ^ 「Gnutella および Gnutella2 パケット形式に関する開発者の議論」。Gnutella 開発者フォーラム。2023 年 1 月 17 日時点のオリジナルよりアーカイブ。2006年 5 月 15 日閲覧。
- ^ “Adagio download | SourceForge.net”. 2016年11月12日時点のオリジナルよりアーカイブ。2016年11月11日閲覧。
- ^ 「gtk-gnutella - グラフィカル Unix Gnutella クライアント」。Gtk-gnutella.sourceforge.net。2005 年 7 月 8 日にオリジナルからアーカイブ。2014年 8 月 6 日に取得。
- ^ 「OtherNetworksSupported - MLDonkey」。mldonkey.sourceforge.net。2016年11月12日時点のオリジナルよりアーカイブ。2016年11月11日閲覧。
- ^ UKHL = UDP 既知のハブ リスト
- ^ 「 FileScopeウェブサイト: クロスプラットフォーム互換性に関する声明」。FileScope。2008年 8 月 28 日時点のオリジナルよりアーカイブ。2008 年 8 月 22 日閲覧。
- ^ “FileScope”. SourceForge . 2021-06-25時点のオリジナルよりアーカイブ。2021-06-25に閲覧。
外部リンク
- Gnutella2 ウィキ
- g2paranha - G2 ネットワーク クローラー
