Gnutella

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Gnutellaグヌーテラニューテラ)はP2Pプロトコルおよびファイル共有クライアント

目次

[編集] 概要

ナップスター等のP2Pクライアントの場合は、中央サーバが存在し、ファイルのメタデータの管理や検索サービスを提供することにより、P2Pネットワークが機能している。それに対し、グヌーテラはサーバに依存せず、純粋にピア間の通信のみでファイルの送受信等の機能を実現している。

P2Pのしくみの分類中、このようなピア間の通信のみによって機能するものをピュアP2P、ナップスターのようにサーバの仲介を必要とするものを、ハイブリッドP2Pと呼んでいる。

その他には、KaZaASkypeに使われているスーパーノード型ハイブリッドP2Pがある。

[編集] 特徴

ナップスターに代表される第一世代P2P(ハイブリッドP2P)は、中央サーバに依存する為、ネットワークへのトラフィックは少ないが、耐障害性が低く、サーバがダウンしたらネットワークが形成できないという弱点があった。それに対してグヌーテラに代表される第二世代P2P(ピュアP2P)は、各クライアントがサーバを兼ねる(サーバント)為、耐障害性が高い。

製作者の「核戦争でも生き残れるように設計されたもの(Gnutella is designed to survive nuclear war)」や、「万一、ニューヨークに核爆弾が投下されたとしても、(それ自体はたいへんなことだが)ニューヨーク以外の『Gnutella友達』によってGnutellaNetは維持されるだろう」といった言葉が、グヌーテラネットワークの特徴をよく表している。

[編集] グヌーテラのしくみ

[編集] 接続

中央サーバが存在しないグヌーテラにおいて、最初に接続するときに何処に問い合わせるのか?という問題が出てくる。 

グヌーテラ第一世代では、ノード情報を掲示板などで入手する方法が採られていたが、グヌーテラ第二世代になって、GWC(GWebCache)というブートストラップサーバーにより各ノードと接続する方法がとられた。 

接続においては、グヌーテラサーバントはまず、pingという接続要求を出す。それに対して、接続相手はpongという信号を返して、ハンドシェイクを行い接続が完了する。

[編集] 検索

検索はGnutellaネットワークで行っており、Gnutellaネットワーク上で交わされているメッセージは、Ping,Pong,Push,Query,QueryHitの以上である。

ファイルを求めるサーバントは、クエリをGnutellaネットワークに送信し、ヒットしたクエリがクエリヒットとして検索結果に表示される。

[編集] 転送

Gnutellaでの、ファイルの転送はHTTPプロトコルで行われている。

ファイルの転送は、クエリヒット識別子に含まれる、IPやポート番号などによってファイルの所有者にHTTPでの転送命令を出す。 また、ファイル所有者がFW下にいるサーバントの場合は、Push識別子を出し、相手サーバントがHTTPでの転送命令を出す。

[編集] 開発の経緯

2000年AOL社の一部門であるNullsoftで、当時社員だった Justin Frankel と Tom Pepper の二人が、最初の Gnutella クライアントを開発した。

2000年3月14日、二人は Nullsoft のサーバー上にプログラムをダウンロードできる形でアップロードした。この出来事はスラッシュドットで告知されたため、その日の内に数千人がソフトをダウンロードした。ソースコードについては、後ほどGPLライセンスの元で提供する予定だった。

翌日、AOL は法的問題を理由にプログラムの提供を中止し、さらにNullsoft部門にプロジェクトを中止させた。しかしこの措置によっても、Gnutellaを止めることはできなかった。

数日後には、リバースエンジニアリングによってプロトコルは解析され、それを元にGnutella互換のオープンソースクローンが登場した。現在でも、様々なグループが Gnutella 互換クライアントの開発を続けている。

[編集] グヌーテラ第一世代

シャットダウンから間もなくして、Brian MaylandがNullsoft のプログラムを入手して、Gnutellaプロトコルの動作原理を理解するためにリバースエンジニアリングした。彼の仕事のおかげでテキストベースのUNIXプログラムを作ったJosh Pieperやより使いやすいGUIをもったプログラムを作ろうとしたGene KanやSpencer Kimballのような人々によってソフトウェア開発がなされることになった。

[編集] グヌーテラ第二世代

ユーザの裾野が広がるにつれ、システムの重大な問題が取り沙汰されはじめた。ネットワークはping リクエストで溢れかえり、同時に非常に多くの検索クエリーで高負荷になった。より高速なハブとしての役割を果たすコンピュータに接続した低速のモデムといった形でネットワークのトポロジーは非効率的だった。第一世代のソフトウェアの深刻なバグによってパケットがネットワーク上を不明確にさまよっていた。ネットワークは”本来は少数のユーザのために設計されたもので”100人単位から10,000 単位のユーザに膨張しトラブルに見まわれた。「ただ乗り」や「何も提供していないのにファイルを取り出すだけの人々」によってもユーザが探し物をするのを難しくした。

もう一度、情熱的なコミュニティーが救済に乗り出した。Bob Schmidtが初めてのホストキャッシングシステムを開発した。プログラマー達はGnutella 0.56のコードを修正し、パケットが適切に運ばれるようにTTLバグを取り除こうとした。そして、Jorge Gonzalesはネットワークをダメにするスパマーらからネットワークを守る行動に出た。

この時点で、物事は個人の開発者が全てをまかなうにはあまりにも複雑になっていた。彼らはコードを書き、報道やユーザやお金の工面をしなければならなかった。 こういった事情で、早急に商業的な努力が介入し、「救済に乗り出す」必要が出てきた。Clip2はgnutellahosts.comを開発し、より良いホストキャッシュの実装し、いくらかNapsterのようなトポロジーをGnutellaネットワークに組み入れて合体させるようなやり方で動く小さなサーバReflectorを開発した。

[編集] ソフトウェア

名称 プラットホーム ライセンス
en:Acquisitionx Mac OS X オープンソース
en:BearShare Microsoft Windows en:Closed source
en:Phex Java GNU GPL
Cabos Java GNU GPL
en:CocoGnut en:RISC OS フリーウェア
en:Gnucleus Microsoft Windows GNU GPL, GNU LGPL
en:gtk-gnutella Unix系 GNU GPL
LimeWire Java GNU GPL
en:mlDonkey
Morpheus Microsoft Windows en:Closed source
en:Mutella Unix系 GNU GPL
en:Poisoned Mac OS X GNU GPL
en:Qtella Linux GNU GPL
Shareaza Microsoft Windows GNU GPL
en:Symella Symbian OS GNU GPL
en:XNap Java GNU GPL
en:XFactor

[編集] 外部リンク

-Gnutella互換サーバント-