Gnutella(グヌーテラ)とは
Gnutella(グヌーテラ、ニューテラ)は、中央
サーバに依存しない、純粋な
ピアツー
ピア(P2P)プロトコルであり、
ファイル共有クライアントの名称でもあります。
概要
従来のナップスターのようなP2Pクライアントは、中央
サーバがファイルの
メタデータ管理や検索サービスを提供することでネットワークを機能させていました。しかし、Gnutellaは中央
サーバを必要とせず、
ピア間の直接的な通信のみでファイル送受信などの機能を実現しています。
P2Pネットワークは、その仕組みによって、ピュアP2PとハイブリッドP2Pに分類されます。Gnutellaは、
ピア間の通信のみで機能するピュアP2Pに該当します。一方、ナップスターのように
サーバの仲介を必要とするものは、ハイブリッドP2Pと呼ばれます。また、KaZaAや
Skypeで使われているスーパーノード型ハイブリッドP2Pもあります。
特徴
第一世代のP2P(ハイブリッドP2P)であるナップスターは、中央
サーバに依存するため、ネットワーク全体のトラフィックは少ないものの、
サーバがダウンするとネットワークが機能しなくなるという脆弱性がありました。対照的に、Gnutellaのような第二世代P2P(ピュアP2P)は、各クライアントが
サーバの役割を兼ねる(
サーバント)ため、高い耐障害性を備えています。
この特徴は、開発者たちが「核戦争でも生き残れるように設計された(Gnutella is designed to survive nuclear war)」と語ったことや、「ニューヨークに核爆弾が投下されても、ニューヨーク以外の『Gnutella友達』によってネットワークは維持されるだろう」という言葉によく表されています。
Gnutellaの仕組み
Gnutellaネットワークでは、PING、PONG、PUSH、QUERY、QUERY_HITの5種類のメッセージが交換されます。
接続
中央
サーバがないGnutellaでは、最初に接続するノードを見つける必要があります。初期のGnutellaでは、ノード情報を掲示板などで入手する方法が一般的でしたが、第二世代ではGWC(GWebCache)と呼ばれるブートストラップ
サーバを利用して接続するようになりました。
接続プロセスでは、Gnutella
サーバントがまずPINGメッセージを送信し、それに対して接続相手がPONGメッセージを返すことでハンドシェイクを行い、接続が確立します。
検索
ファイル検索は、Gnutellaネットワーク全体で行われます。ファイルを検索したい
サーバントは、QUERYメッセージをネットワークに送信し、該当するファイルが見つかると、QUERY_HITメッセージとして検索結果が返されます。
転送
ファイルの転送には、HTTPプロトコルが使用されます。QUERY_HIT識別子に含まれる
IPアドレスやポート番号を基に、ファイルの所有者に対してHTTPでの転送命令が送信されます。
ファイアウォール下にある
サーバントの場合は、PUSH識別子を発行し、相手
サーバントがHTTPで転送命令を出すことでファイルの転送が行われます。
開発の経緯
2000年、
AOL傘下のNullsoftに所属していたJustin FrankelとTom Pepperの2人によって、最初のGnutellaクライアントが開発されました。
2000年3月14日、彼らはNullsoftの
サーバにプログラムをアップロードし、
スラッシュドットで告知したところ、数千人がダウンロードしました。
当初、ソースコードはGPLライセンスで提供される予定でしたが、翌日、
AOLは法的問題を理由にプログラムの提供を中止し、プロジェクトを中断させました。しかし、この措置によってもGnutellaを止めることはできず、数日後には
リバースエンジニアリングによってプロトコルが解析され、互換性のあるオープンソースクローンが登場しました。現在でも、様々なグループがGnutella互換クライアントの開発を続けています。
グヌーテラ第一世代
Nullsoftのプログラムを入手したBrian Maylandは、Gnutellaプロトコルの動作原理を理解するために
リバースエンジニアリングを行いました。彼の成果は、テキストベースの
UNIXプログラムを作成したJosh Pieperや、より使いやすいGUIを持つプログラムを開発したGene KanやSpencer Kimballといった人々のソフトウェア開発を促しました。
グヌーテラ第二世代
ユーザー数の増加に伴い、ネットワークに深刻な問題が発生し始めました。PINGリクエストが溢れかえり、多数の検索クエリによってネットワークの負荷が高まりました。また、ネットワークトポロジは非効率的であり、低速
モデムが高速ハブに接続されるといった状況でした。さらに、第一世代ソフトウェアのバグによって
パケットがネットワーク内をさまよう問題も発生しました。「ただ乗り」をするユーザーによって、ファイル検索が困難になるという問題も生じました。
この状況を打開するため、コミュニティが再び立ち上がりました。Bob Schmidtが初めてホストキャッシングシステムを開発し、プログラマーたちはGnutella 0.56のコードを修正してTTLのバグを取り除き、
パケットが適切にルーティングされるようにしました。また、Jorge Gonzalesはスパム攻撃からネットワークを守るための措置を講じました。
しかし、事態は個人開発者だけでは対応できないほど複雑化していました。開発者はコードを書くだけでなく、報道対応や資金調達も行う必要がありました。そこで、商業的な取り組みが介入し、Clip2はgnutellahosts.comを開発し、より高度なホストキャッシュを実装しました。また、ナップスターのようなトポロジをGnutellaネットワークに組み込むことで、ネットワーク効率を改善する試みも行われました。
グヌーテラ互換サーバント
以下は、Gnutellaプロトコルと互換性のあるクライアントソフトウェアの例です。
360Share
Acqlite
Acquisition
AquaLime
BearFlix
BearShare
Cabos
Epicea
eTomiPro
Foxy
FreeWire
FrostWire
giFT-Gnutella
GnuAce
GPU
GTK-Gnutella
GnucDNA
Gnucleus
iMesh
Kceasy
LemonWire
LimeWire
LimeWire CVS jum
MLDonkey
Morpheus
Mutella
MXIE
MyNapster
NeoNapster
Phex
Shareaza
Swapper.NET
TrustyFiles
Vagaa
XNap
xolox
Zultrax
関連項目
Cabos
Freenet
LimeWire
Peer to Peer
Perfect Dark
Profes
Share
WinMX
Winny
ヌテラ - 北米や欧州で人気のあるスプレッド(パンなどに塗る食品)。Gnutellaの語源とされるものの一つ(GNU + Nutella)。Gnutella の名前は GNU と Nutella から付けられたとされる。
外部リンク
jnutella(日本語)
Gnutella Wiki(日本語)
@IT : ネットワーク管理者のためのGnutella入門(日本語)
GTK-Gnutella(日本語)
Gnutella Protocol Development(英語)
*
LIMEWIRE DEVELOPER RESOURCES(英語)