Gnutella

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(英語)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。