Next: Gnutellaプロトコル
Up: Gnutellaの仕組
Previous: Gnutellaの仕組
Gnutellaは、サーバント(Servent, サーバとクライアントの両方を意味する
造語)と呼ばれるアプリケーションプログラムが集まってネットワークを形成
し、その中でファイル資源を検索・共有することができるサービスで、特定の
コンピュータに依存しないサービス形態や、コピーされることによって自己増
殖するコンテンツ、連鎖的・波及的に広がる匿名性の高い検索機能などに特徴
がある。
Gnutellaにおいては、役割分担、つまりC/Sのような固定的な階層構造は存在
しない。サーバントと呼ばれるピアが集合してネットワークを形成し、その中
で個々のピアがサーバの役割も、クライアントの役割も果たす。Gnutellaにお
けるサーバントの機能を大別すると表
のようになる。
Table: Gnutellaサーバントの機能
- ホスト接続
まず初めに、他のGnutellaサーバントとの接続を確立する。Gnutellaでは固定
的なサーバは存在しないため、サーバントが2つ以上接続すれば、そこで全て
のサービスを行うことができる。接続は普通、他のGnutellaサーバントのIPア
ドレスとポート番号を直接指定し、ハンドシェイクと呼ばれるネゴシエーショ
ンを行う。このため、接続するには予め他のサーバントのIPとポートを知らな
ければならない。接続要求を出す側のサーバントは、この時点では純粋にクラ
イアントであり、ハンドシェイクが成功した時点からP2P通信が開始される。
これ以降に行われるファイル転送以外の通信は、原則として自分に隣り合って
いるサーバントとのメッセージの送受信のみによって行う。つまり、各サーバ
ントは自分の一つ隣りのサーバントと協調的に動作することによって、ファイ
ル共有サービスというシステム全体の大域的な目的を達成しようとする。この
ような性質は、典型的な自律分散システムの特徴と言うことができる。
Figure: ホスト接続
- ファイル検索
Gnutellaにおけるファイル検索はWWWサーチエンジンやNapsterにおけるそれと
は異なり、自律分散的に行われる。まず、検索を行うサーバントは任意のキー
ワードを含む検索メッセージを隣接する全てのサーバントに送る。検索メッセー
ジを受け取ったサーバントは、今メッセージを転送してきた相手以外の隣接サー
バントに検索メッセージを転送する。同時に、自分のローカルディレクトリ内
の公開ファイルについて検索を行い、ヒットするファイルがあれば、その結果
を元の検索語を転送してきたサーバントに対して返信する。このような「受信
→転送・検索」のタスクはTTLと呼ばれるメッセージの寿命がつきるまで繰り
返されるが、これによって検索対象となるサーバントは鼠算式に増えていくこ
とになる。
Figure: ファイル検索
- ファイル転送
検索に対する応答を受信したサーバントは、それが自分の発信した検索に対す
る応答であるかどうかを確認する。メッセージが自分の送信した検索語と対応
していない場合は、他の隣接サーバントへとメッセージを転送する。自分の検
索に対する応答を受け取った場合は、応答メッセージに含まれる情報を参照し
て、当該ファイルを公開しているホストに対して直接ファイル転送要求を送信
する。要求を受け取ったサーバントは、要求元に対してファイルの送信を開始
する。なお、ファイル転送はWWWのプロトコルであるHTTPを用いて行われる。
Figure: ファイル転送
OCHIDA Tadashi
Sat Feb 10 01:41:46 JST 2001