1.はじめに

 現在WWW(WorldWideWeb)の大衆化と、パソコンの値下がりや高性能化により、急激にインタ ーネット人口が増えています。 接続媒体もコンピュータだけではなく携帯電話、PDA、エアコン、電子レンジなどの家電製品と 数多くのものがあります。さらに多くの人にとってインターネットは生活の一部になり、イン ターネットに接続しない日は無いというぐらいインターネットは欠かせないものになっています。 さらにデータファイルのマルチメディア化により、ファイル容量は増える一方です。現在、こ れらユーザーの増加や情報のマルチメディア化により通信量の増加が問題になっています。
 現在最も主流のコンピュータシステムの形態はクライアント/サーバー型システムなのですが、ここ に問題が出てきました。この形態は、情報の要求者(クライアント)が情報の提供者(サーバ ー)に様々なサービス(Web,FTP,Print,etc)を要求し、サーバーがそれを処理をするコンピュ ータシステムの形態です。そのためクライアントが急激に増加するにつれてサーバーへのクラ イアントの集中によるサーバー側の処理量が増加し、サーバーに大きな負担を背負わすことに なりました。そのためサーバーの処理能力を向上させる為にサーバーマシンの性能を上げざる をえなくなり、非常に高価なサーバーを導入し、又サーバー管理者側のコストが拡大していっているのです。
 このように、クライアント/サーバー型は、サービスの拡大という面で本質的な問題を 抱えています。

 このクライアント/サーバー型システムの問題の解決策のひとつとして注目されているのがP2P (Peer to Peer)型システムです。P2Pとはネットワークに接続されたコンピュータが対等な関係にあ る状態のことで、各コンピュータをサービスを提供するサーバーとしても、サービスを受ける クライアントとしても動作させることが出来る形態です。これにより、一台のコンピュータに クライアントが集中することがなくなり、サーバーに負荷をかけずに情報の発信や取得が可能になります。
 従来のクライント/サーバー型システムとは異なり、コンピュータ同士が連携して動作するように 設計されており、さらに特定の条件のもとではファイアーウォール内のコンピュータとも連携 できるように設計されているシステムもあります。これは、従来難しかった。ファイアーウォ ール内からの情報提供も可能になるという特徴を持ちます。
 さらに、コンピュータは、自分だけで情報を生み出すものではなく、人間との関わりで情報を蓄えていくものです。 サーバー上の情報は、大抵は、サーバーが生み出したものではなく、人間がサーバーに蓄えたものです。ネットワーク 上では、人間に近いノードの方が、情報の湧き出し点になるのです。クライアント/サーバー型システムの場合大抵はサーバーよりは人間(クライアント) の方が多いのです。つまり、クライアント(端末)の方がサーバーよりも情報を持っているはずなのです。P2PではDNSのエントリ も持たず、かつ、ファイアーウォールの内部で一時的なアドレスを割り当てられているようなノードたちに、DNSに登録 されたスタティックなノード達と同等の情報発信能力を与えようとするものなのです。そして、今まで表に出てこなかっ た情報にも出会えることが出来るようになるのです。

 今回の論文では、このように優れた可能性を持ったP2P技術を導入したソフトウェアについて調べたいと思います。 1つめは2年ほど前にファイル共有ソフトとして注目を集めたNapsterについて、2つめはNapsterとはまた違ったファイル 共有ソフト のGnutellaについて、3つめはGnutella技術の改良版であるGnutellaCloneのBearShareについて調べました。

2.Napster

 Napsterは、米マサチューセッツ州ボストンにあるNortheastern Universityに通う学生だったシャウン・ファニング(Shawn Fanning)氏が1999年1月に開発したP2Pタイプのファイル共有ソフトウェアで、個人が持つ音楽ファイルを複数メンバで共有し、ネットワーク上に存在するMP3データを検索可能にすることを目的としたものです。
 ファイル共有ソフトとはインターネット上で個人個人間でファイルのやり取りをするソフトです。使用法は、使用者はまず自分で人にあげてもいいファイル(共有ファイル)を選んで共有ソフトに登録しておきます。もし何か欲しいファイルがあった場合共有ソフトで検索してそのファイルを持っている人を見付けます。その後は二人の間を直接接続してダウンロード(注1)するというふうに使います。 補足として、共有ファイルを選択せずに相手からもらうだけのユーザーがたまにいます。このようなユーザはDOM(Download Only Member)と呼ばれ非常に嫌われます。
 ここでNapsterのおおまかな動作の流れを説明します。Napster にはファイル管理やユーザーの入退出管理用の中央サーバーがあります。ユーザーはNapsterを使用する時は中央サーバーに接続します(図2-1)。

Napsterにおける検索、ファイル交換のイメージ   図2-1.Napsterにおける検索、ファイル交換のイメージ

1.Napster クライアントは Napster使用時に中央 サーバーに接続します

2.サーバー接続時にクライアントの所有ファイルリストの登録をします。接続後自由にファイルの検索が出来ます。処理はサーバーが行い結果をクライアントに返します

3.検索の結果、目的のファイルが見つかった場合、Napster クライアントは目的のファイルを持つ別の Napster クライアントに直接接続し、ファイルを取得します

 このようにNapsterを利用すれば、自分が持っている音楽ファイルをネット上の第三者に公開することが可能になり、あるいは逆に、ネット上の第三者が公開している音楽ファイルから目的の曲を検索し、それを手に入れることができるようになるのです。

(注1) ダウンロード、アップロードはクライアント/サーバー型システムにおいてクライアントとサーバーではっきりとした上下関係がある時のクライアントからみてのファイルの送信受信を表しています。P2Pでは全てのコンピュータが対等であるのでダウンロード、アップロードを使うのはおかしい(クライアントとサーバーの役割をしますが、その場合クライアント時はダウンロードになりサーバー時もダウンロードになります。)のですがNapsterや後で紹介するソフトウェアでファイル受信をダウンロード。ファイル送信をアップロードとしているので本論分でも同じ意味でダウンロード、アップロードを使っていきます。

Napsterの特徴

1.ファイルのリスト管理やユーザーの入退出管理用の中央サーバーがあります。
  Napsterを使用する時にはかならずNapsterサーバーに接続しなければなりません。

2.中央サーバーがファイルリストの管理をしているので、検索結果の出力がはやいです。

3.原則として、mp3, wma 形式のファイルしか共有できません。

4.中央サーバーが活動不能状態におちいるとログイン、ファイル検索ができなくなりNapsterは使用不能になります。

5.チャット機能があります。これにより、利用者同志で容易にコミュニケーションが取れます。

ファイルをダウンロードするまでの流れ

 検索の結果、目的とするファイルが見つかった時のファイル提供ホストからどのように自分のところにダウンロードするかを説明します。以下の図は、一般的なダウンロード時の通信の様子をあらわしたものです。

ファイル受信までの流れ
@ユーザーがファイルのダウンロードを指示すると、ダウンロードを要求するコマンドがサーバに送られます。引数はファイルを提供している側のユーザー名とファイル名です。
Aサーバーはファイルを提供する側のユーザーに対して、ファイルのダウンロード要求が届いていることを通知します。
Bファイルをダウンロードする側に対し、ファイルを提供しているユーザー側のIPアドレスとリッスン(待ち受け)しているポート番号を返します(このポート番号は、最初にサーバにログインするときに、Napsterクライアント側からサーバに送信したものです)。
C受信側は受け取ったIPアドレスとポート番号に対して、直接TCP接続を試みます。実際のファイルのやりとりは、Napsterクライアント間で直接行います。
Dファイルの転送を要求します。
E提供している側からダウンロードしている側にファイルが転送されて完了となります。

 このように、Napsterのサーバには検索用のファイル リストがあるだけで、実際の音楽ファイルそのものはNapsterのサーバに蓄えられているわけではなく、さらにNapsterのサーバを経由することもなく、ユーザー間で直接転送されています。

現在のNapster

 1999年に登場し瞬く間にユーザー数を増やし、最盛期では(2000年1月)には30億の音楽ファイルを一ヶ月で交換するほどまでになったNapsterですが、大きな障害がありました。Napsterで主にやりとりされていたMP3ファイルは著作権者が複製を禁止した音楽ファイルでした。これによりRIAA(全米レコード協会)は1999年の12月にカリフォルニア州連邦地裁にNapsterを著作権侵害により提訴しました。無料でMP3ファイルの交換を可能にするNapsterのサービスが、著作権違反につながる機器などの利用を禁止した「デジタルミレニアム著作権法」違反であるとRIAAは主張したのです。Napster側の主張はNapsterはあくまでファイル交換の仲介をしているだけで直接ファイルをサーバーに蓄えてるわけでもなく、経由することも無いので著作権には触れないとのことでした。しかし結果は、同社サイトへの複製が許可されていない楽曲の掲載を一切禁ずるという、業務差止めの仮処分命令が下されました。これによりNapsterがレコード会社から配信停止を求める通知を受けた音楽については、送信、頒布を禁止し、積極的に監視しなければならないと判断されることとなり、それまでやり取りされていた多くの音楽ファイルのやり取りが出来なくなりました。これによりユーザー数は激減しました。
 現在Napsterの代用品としてNapsterクローンと呼ばれるソフトが登場しています。Napster互換サーバーを利用することにより、Napsterと同様の機能を提供することが可能です。さらにあらゆるファイル形式に対応していたり、ポート番号の変更が可能だったりと色々な機能が追加されています。Napster互換サーバーは個人でも立ち上げることが可能です。これによりサーバー数は日々変化し、全てのサーバーの活動を阻止することは非常に困難になっています。現在NapsterCloneで有名なのはWinMXです。
  

ファイル共有ソフトの問題点

 不特定多数のユーザーと通信やファイルのやりとりができるファイル共有ソフトですが現時点で大きな問題があります。

・著作権侵害の温床となっている
 データ化できるものは何でも共有でき、ユーザー1人1人が自由にファイルの送受信ができ、ファイルを管理する特定の人がいないという特徴が著作権侵害の大きな要因になっています。さらに検索がファイル名のみで行っているので著作権者が許可なく複製を禁じている有名な歌手の音楽ファイルや有名なソフトウェアが検索されやすいという理由も考えられます。

・ファイルとファイル名の整合性
 ファイル検索をファイル名のみで行っているので、ファイル名が実際のファイル名と異なっていてもダウンロードしないと本物かどうかわりません。さらに、ファイルを管理するのはユーザー自身なので、悪意のあるユーザーがウイルスに感染したファイルを共有しばらまいても他ユーザーには分かりにくいという問題があります。

3.Gnutellaについて

 GnutellaとはNullsoft の Justin Frankel と Tom Pepper により2000年3月に開発されたP2Pタイプのファイル共有ソフトウェアの名前です。
 Gnutella はクライアント/サーバーモデルではなく、分散環境で動作します。 各 Gnutella の動作しているホストは、近隣の他の Gnutella ホストと互いに 通信を取り合っています。この通信網を Gnutella ネットと呼びます。

Gnutellaでの検索やGnutellaネットのイメージ

  図3-1.Gnutellaでの検索やGnutellaネットのイメージ

 Gnutella を起動すると、まずこの Gnutella ネットに接続します。Gnutella でも、 Napster と同様に、目的ファイルの検索、所有ファイルの登録、目的ファイルの取得ができますが、動作原理は根本的に異なります。Gnutella で検索をすると、検索コマンドは接続している Gnutella ネット上のホストに送られます。受けとったホストは自分の所有しているファイルに対する検索結果を送り返すだけではなく、そのホストから接続している他のホストに対しても同様の検索コマンドを送ります。この結果、 Gnutella ネットに属するホストへ次々と検索コマンドが送られ、受け付けたホスト全てから検索結果が返ってくることになります。 但し、検索結果が巨大になり過ぎないように、検索コマンドが転送される回数は通常制限されています。これを TTL(Time to Live) と呼びます。また検索のために直接接続が可能なホスト数も制限されているため、検索が行われるホストの数は実際には数万のオーダーで抑えられることになります。 一方、目的ファイルの取得は、Napster と同様に目的のファイルを所有してい るホストとダイレクトに通信を行います。
 以上のような動作原理により、Gnutella は Napster のクライアント/サーバー型のシステムとは大きく異なる特徴を持ちます。 まず、Gnutella は基本的にはユーザーが利用したい時だけ動作させるものなので、Gnutella ネットの構造は動的に変化します。 次に、検索コマンドの送り先は全ての Gnutella が対象のため、仮に容量の少ない回線で Gnutella ネットに接続していても、検索コマンドが送られ、それに対して返事をします。検索コマンドがある程度流れ続けるような巨大なGnutella ネットに接続した場合、常時接続ホストには検索コマンドが送られることになり、一定容量の通信が常に発生することになります。
 さて、常時一定容量の通信が発生するという Gnutella の特徴は、Gnutella ネットに対して、回線容量の小さいコンピュータがGnutellaホストが密集し、検索コマンド等が多く流れる部分(Gnutellaネットの密な部分と呼ぶことにします)に存在するとネットワーク上を流れる大量のトラフィックを処理できず、多くのパケットが破棄されてしまうという問題を生じさせます(図 3-2)。これよりネットワークが小さく分断され、検索パフォーマンスが悪化してしまいます。これを帯域幅障害といいます。そのため、 Gnutella(GnutellaClone)では、接続回線の容量を自己申告させ、回線容量が小さいホストが Gnutellaネットの密な部分に配置されることを回避し、Gnutellaホストが疎らな部分(Gnutellaネットの疎な部分と呼ぶことにします)に配置するようになっています。

帯域幅障害の例

            図3-2.帯域幅障害の例

 GnutellaCloneとは、このGnutellaネットに接続でき、Gnutellaプロトコルを実装し、Gnutellaでの欠点の改良や条件付検索やリジューム機能等の様々な機能を付加したソフトウェアです。GnutellaCloneにはBearshareやLimeWire、Xoloxなど他にも数多くあり、それぞれに独自の改良が加えられており色々な特徴があります。

GnutellaやGnutellaCloneの特徴

1.Gnutellaには中央サーバ-が有りません。すべてのコンピューターが対等です。つまり、全てのGnutellaユーザーのコンピュータが壊れない限りGnutellaCloneは壊れません。ネットワークとしては非常に堅牢です。サーバーを必要としているネットワークではサーバーを破壊すればネットワークは動かなくなってしまいます。

2.Gnutella はファイルのDownloadやUploadをしていなくても常に他のGnutellaホストからの検索要求を処理するのでネットワーク帯域を多く消費します。それなので快適に使用するためには比較的高速な回線を必要とします。

3. Napsterが原則として mp3, wma 形式のファイルしか共有できないのに対して、Gnutella ではあらゆるファイル形式を共有対象とします。(mpg, avi, jpg, gif, txt, zip...etc)

4 .開くポート(注1)をユーザが自由に変更することができます。
何かしらの理由で初期設定のポートが閉じられてしまっても、接続相手とポート番号を変更しておけばGnutellaを使用することができます。

5.検索時間はサーバーを使っての検索と違ってネットワークを介して多数のホストで分担するので、通信時間分だけサーバー使用方式より時間がかかります。

6.インスタントメッセージやチャット機能があります。これにより、利用者同志で気軽にコミュニケーションが取れます。

 注1:ポートとはネットワークに接続するときに使用できる番号で、一般ユーザーは1024〜65535までのどれかを選ぶことができます。この番号はソフトウェアとソフトウェアを接続するインターフェースの意味になります。ポートにはソフトウェア(サービス)により使用する番号が決まっていて、WWW(WorldWideWeb)の場合80、FTP(FileTransferProtocol)の場合21となります。Gnutellaのポートの初期値は6346です。

初期Gnutellaでの問題点

 初期Gnutellaでは、自動的にGnutellaネットを探して接続してくれませんでした。ですので、初めて使う人は既にGnutellaネットに接続している人のIPアドレスを教えてもらい、そこに接続することでGnutellaネットに接続しなければなりませんでした。つまり初心者はGnutellaネットに接続している知り合いがいないとGnutellaを使うことが出来ませんでした。
 GnutellaCloneではこの問題は解決されて、Gnutellaネット内のホストを教えてくれるサーバーが設置されました。GnutellaCloneを使用する時は、まずそのサーバーに接続することによってGnutellaネット内のホストを教えてもらいGnutellaネットに接続することができるようになりました。このようにGnutellaにもサーバーは一応あります。しかし、このサーバーが使用不能になってもGnutellaはGnutellaネットに接続していれば検索もファイルのやりとりも可能であり、Gnutellaネットへの接続も他ユーザーのIPアドレスを知っていれば可能です。Napsterの場合、サーバーが活動不能になるとログインや検索、ファイルのやり取りはできなくなり使用不能になります。
 さらに、GnutellaCloneではGnutellaClone起動中に検索要求や接続要求の処理をすると共にパケット中の発信者のIPアドレスを記録し現在接続可能なホストの管理をする機能もあります。これにより直接接続ホスト数が少なくなっても記録してあるホストに接続を試み、常に一定の接続ホスト数を維持することが可能です。

Gnutellaの通信メカニズム

 他のホストを見つける場合や、ファイル名検索を行なう場合、Gnutellaでは、自分が直接接続しているホスト(3台から6台程度の)に対して検索コマンドを送ります。するとそのコマンドを受け取ったホストは、自分の持っているファイル一覧から検索して結果を返すとともに、さらにそのコマンドを他のホストへも中継します。そして、それらの結果も同じように中継されながら返ってくるのです。これらはバケツリレー的にコマンドやその結果を送り、中継しているのです。
 ただし単純にこの方法をインプリメントしてしまうと、どこまでもコマンドが送られて際限がなくなります。そこで中継を止めるための歯止めとして、各コマンドが通過できる最大ホスト数が決められています。今回私が調べたGnutellaCloneのBearShareの場合、パケットのTTL(Time To Live:存続時間)は初期設定で5でした。これは自分が発行した検索用パケットは、高々5個のホスト コンピュータを超えて(5レベルまで)、Gnutellaネット内の他のコンピュータに到達するということです。 各ホストから接続するホスト数も(初期値では)多くても6台に制限されているので、結局、1つのホストからは最大9330台(=6+36+216+1296+7776台)のホストと通信できることになります。もっとも実際にはホストの大半は重複していると思われるので、本当にユニークなホストの台数はもっと少ないはずです。そこで、各コマンドにはユニークなID(GUID、Globally Unique IDentifier)を付けて、一度受けたコマンドは(GUIDが同じコマンドならば)、受け付けない(無視する)ようにしています。
 Gnutellaネット全体で見ると、ユーザーからのコマンドの送信とそれにともなう何千ものコマンドの中継は頻繁に発生します。そのため各ホストでは、自分のコマンドの送受信だけでなく、他のユーザーのコマンドの中継も行なうことになり、ネットワークのトラフィックはNapsterなどよりもかなり多くなっています。

相手がファイアーウォール内にいる時の通信方法

 GnutellaでのファイルのダウンロードやアップロードではTCP接続を行います。ですので相手ホスト(もしくは自分)がファイアーウォール内にいるとTCP接続がファイアーウォールに阻まれ相手ホストと接続(自ホストに接続)することができずダウンロード(アップロード)ができません。(通常、ファイアーウォールの中から外へはTCP接続することができますが、ファイアーウォールの外から中へは接続することができません。)しかし、Gnutellaではファイアーウォール内のホストからのダウンロードを可能にする仕組みがあります。
 今、 Gnutella ネットにおいて、ホスト A 、ホスト B、ホスト C がこの順番で接続しており、ホスト C がファイアーウォールの中にあるとします(図3-3)。

接続図

        図3-3.接続図
A が必要なファイルを C が持っていた場合、次のようなやりと りが行われます(図 3-4)。

ファイアウォール環境下におけるファイルのダウンロード

 図3-4.ファイアウォール環境下におけるファイルのダウンロード

1. A は 検索によりCが目的ファイルを持っているのを知り、C へダウンロードするために直接TCP接続を試みます。
2. ファイアーウォールに阻まれるため、 A から C への要求は失敗します。
3. A は 「A から C へのファイルの送信要求」を B に送ります。
4. Bは C に「A から C へのファイルの送信要求」を送ります。BとCは既にCから直接接続されているので通信が可能。
5. C は「A から C へのファイルの送信要求」があることを知り、今度はCからAに直接TCP接続を行います。
6.最後に C は A へ目的ファイルを送信します。

 なお、通常受信したい側がファイルを引き出すのを pull 型と呼び、送信側が ファイルを送り出すのを push 型と呼びます。 このような push 型のプロトコルの実装により、 Gnutella においてはあたかもファイアーウォールがないように動作します (但し、異なるファイアーウォール内同士は接続することができません。同一のファイアーウォール内では可能。)。
 
 

4.GnutellaCloneの紹介

4−1.BearShare

BearShareは使いやすく設定も容易で、動作も軽快なので多くのユーザに使われているGnutellaCloneです。ただver.2.3.0から少々使いづらくなってしまいました。

BearShareの特徴

・ 全てのファイル形式をサポートしています
・ インストールや設定、FAQなどの場合場合に対する説明書が充実。ただし英語です
・ 接続設定ウィザードがあります
・ 状態インディケータが光り、現在の状態がわかります
・ LimeWireと互換性がある。つまりBearshareはLimeWireユーザーともファイルの交換が出来ます
・ それぞれのページからファイルを再生する/開く/閲覧することができます
・自分の共有ファイルの変化に対する更新を自動的に行ってくれます
・ Gnutellaプロトコルを厳密に遵守しています
・インストール時一緒にスパイウェア(注1)もインストールします。インストールしないことも可能です
注1:スパイウェアとは、利用者に無断でパソコンから特定の場所に個人情報を送信するプログラムです。個人情報とは「OSの名称」「ソフトウェアの利用履歴(ダウンロード履歴)」などで、個人を特定するようなものではないようです。この情報は広告表示などのマーケティング用に使われるとのことですが、無断で行われていてよく解らないものなのでできるだけインストールしないようにしましょう。

ver2.4.0で変更された機能

・検索結果を検索ワードごとに表示できるようになりました
・最低ファイル容量を指定した検索ができるようになりました
・ 検索キーワードが検索結果表示画面で青色にハイライトされなくなりました
・MAX TTLの設定、MAX HOP数の設定が出来なくなりました。何故無くなったのかは不明です(ユーザーによる不必要なコマンドの到達ホスト数拡大を防ぐためかも知れません)。ちなみに前バージョンでの二つの値はMAX TTLが5、MAX HOP数が7でした(MAX HOP数とは自分のところに来た他ホストのコマンドのHOP数を設定した数値以下しか通させない機能です。例えばMAX HOP数を7に設定していて、誰かが多くのホストを検索したいと思ってHOP数を10や20に設定しているのを自分のところで7に書き換えます。Gnutellaネット内での不要なコマンドの処理を無くす効果が有ります。ちなみに相手ホストを1回通過することを1HOP、2回通過することを2HOPと言います。)。

ver2.3.0で変更された機能

・ファイル形式を限定しての検索が出来るようになりました
・最低接続速度や最低ファイル容量を指定した検索ができなくなりました
・相手の サーバータイプ、ユーザエージェント、バージョンを表示しなくなりました
・ 検索結果やダウンロード、アップロード画面で相手ホスト名やIPアドレス、Originを表示しなくなりました
・ダウンロード、アップロード画面で全体での使用帯域幅を表示し、個別の使用帯域幅を表示しなくなりました
・その他いろいろ
 ファイル形式ごとの検索ができるようになったのはいいけれど、相手ホストが表示されないのや相手ホストについて何も知れないのは不便だしつまらないです。個人的にOrigin部分が無くなったのが非常に残念です。ダウンロードやアップロードしていて色々な国の国旗が表示されるのが好きだったので。
   ver2.3.0では使いづらくなっていたのですが、ver2.4.0では検索結果が分けて表示されるようになったので少し使いやすくなったと思います。


ver2.2.7でのOrigin表示画面

ver2.2.7でのOrigin表示画面

  

画面説明

ホスト接続画面

ホスト接続画面

ここで接続するホストの各種設定をします。自動接続するかどうか、接続するホストの最小数、最大数の設定。さらに手動で接続したいホストのアドレスを入力することも可能です。

・ 自動接続が可能です
・ 帯域幅の障害を検知して、回避します
 BearShareでは帯域幅障害を防ぐために、モデム回線などの遅いホストをネットワークの端に配置し検索パフォーマンスが悪化するのを防ぎます。
・Host :現在自分が直接接続しているホストのIPアドレスやホスト名が表示されます
・Status:接続状況を表示します
・Time :そのホストに接続した時間が表示されます
・Horizon:自分のコンピュータから到達可能なホスト数を表示します


Search画面

Search画面

ここでキーワードを入力し検索します。

・ファイル形式ごとの検索が可能です
・ 同時に複数検索が可能です
・ 同時アクティブ&パッシブ検索モード
 これは自分の検索だけではなく自分のところを通っていく他人の検索結果をもチェックする機能です。これにより時々刻々と変化するネットワークでも大部分を検索できます。
・ コンピュータウィルスを排除するカスタマイズできるフィルターを実装しています
・ 一覧での並べ替え(ソート)と複数選択が可能です

・Rank :OSや接続速度やincomming接続を受け入れる能力、hopsなどから計算されるサーバのクオリティーを表します
・FileName:ファイル名が表示されます
・Size :ファイル容量が表示されます
・Type :ファイルタイプが表示されます
・Info:MP3ファイルの場合、ファイルのビットレートや演奏時間を表示します


Download画面

Download画面

ここでダウンロードするファイルの設定や状況を確認できます

・ 転送の進捗状況がグラフィカルに表示されます
・ 不完全なダウンロードやアップロードが再開(リジューム)できます
・FileName:ファイル名が表示されます
・Size :ファイル容量が表示されます
・Status:ダウンロードの進捗状況や状態が表示されます
・Time :ダウンロード完了までの残り時間が表示されます
・Bandwidth:Download全体で使用している帯域幅を表示します


Statistics画面

Statistics画面

BearShareを起動してからの各種統計や現在状況が表示されます
BearShareを起動してからのメッセージ(ping, pong, 検索リクエスト(query),検索応答(hit), pushリクエスト)の入出やDrop数等の合計、現在の状況、使用中の帯域幅やGnutellaNet内のホスト数の表示をします
 
 

4−2.LimeWire

 LimeWireは、LimeWire LLCが開発するJavaで書かれたGnutellaCloneです。 起動してからのGnutellaネットワークへの接続も早く快適です。

LimeWireの特徴

・無制限同時検索が可能です
・カスタマイズできるスパムフィルターを実装しています
・T3回線からモデム回線まで、異なった回線スピードによる接続を自動的に調整します
・悪質なパケットをブロードキャストしたり、通過させたりしません
・参加ユーザの興味関心、コンピュータのパワー/帯域によって類似性のあるユーザ同士のオープンなコミュニティーに入れることが可能です
・アンチただ乗りユーザ機能 -- ファイルを一方的にダウンロードするようなユーザー(DOM)を排除することが出来ます。
・ライブラリ機能 -- 共有ファイルやダウンロードファイルを整理できます
・ホストの閲覧 -- そのホストが所有している全ての共有ファイルを閲覧することができます

画面説明

・Search画面

Search画面


01.ここに検索したい単語を入力します
02.検索ファイルの形式を選びます。初期設定ではAnyTypeになっています
03.検索中はライムが回転します
04.検索結果タブ。ここに検索結果とヒット数が表示されます
05.ダウンロードしやすさの指標です。星が多いほど良いです
06.同じもしくはほとんど同じファイルがヒットした場合グループ化されます。そのヒットの数を表示します
07.トグルアイコンをクリックすることによってグループ化された全ファイルを表示します
08.各分類のボタンを押すことによって結果を並び替えします。例えばSizeボタンを押すとファイルサイズの大きい順や小さい順になります
09.検索結果のIPアドレスが赤い場合、それはローカルアドレスであることを示し、相手はファイアーウォール内にいることを表しています。自分もファイアーウォール内にいる場合ファイルの交換は出来ません。例外として両者が同じファイアーウォール内にいる場合可能です
10.あるホストを選んでこのボタンを押すとそのホストが持っているファイルが全部表示されます
11.検索結果でのグループ化を行うかどうかを選択します
12.複数選択されたファイルを同時にダウンロードするかどうか選択できます
13.複数選択されたファイルからどれかを選んでダウンロードします。グループを選んだ場合、相手の回線速度の速い回線を選んでダウンロードします
14.ダウンロードするファイルの状況を示すウィンドウです
15.ファイルのサイズを表示します
16.ダウンロード要求のあったファイルの現在の状態を表示します
17.ダウンロードの進行状況を表示します
18.現在のダウンロードスピードを表示します
19.’KillDownload’ボタン。ダウンロードを途中で止めます
   ’ForceResume’ボタン。途中で接続が切れたのを接続が切れた時点から続けます
   ’ClearInactive’ボタン。接続が切れたファイルをウィンドウから消します
20.ダウンロード中のファイルのプレビュウをします


・Monitor画面

Monitor画面

01.接続ホストからの検索中の単語を表示するかしないか選択します
02.検索中の単語を表示する文字の最大数の制限をします
03.表示されている単語をダブルクリックすることによって直ちに自分も検索することがでます
04.アップロード中のファイルが表示されます

・Connections画面

Connections画面

01.Gnutellaネットに接続中はDisconnectと表示され、接続していない場合はConnectが表示されます
02.接続ホストのIPアドレスやステータスを表示します
03.そのネットワークでメッセージがドロップした割合を表示します。高い場合は接続しない方が良いです
04.接続しているホスト(ネットワーク)の全ホスト数、ファイル数、ファイル容量を表示します
05.選択したホストを削除します
06.ホストとそれ以外のホストとの接続速度を表示します。これで自分の回線にあったネットワークを選べます
07.そのホストが接続しているホストの数を表示します
08.自動接続する時の接続先を表示します

・Communities画面

Communities画面

ここから自分が求めるコミュニティーに接続することができます。

・Statistics画面

Statistics画面

現在の接続状況や接続しているネットワークの状態、接続してからのダウンロード数アップロード数、いろんなメッセージの総数などのそのネットワーク内での色々な統計結果を示します。
 
  

4−3.Xolox

Xoloxは使いやすさ、信頼性、スピードを重視したGnutellaCloneです。

使いやすさ

極限までシンプルなインターフェースになっており、初めて使う人でもすぐに活用できます。

Search画面

Search画面

Transfer画面

Transfer画面

信頼性

ダウンロード速度は相手ホストの回線速度に依存します
(速くなったり、遅くなったりしますが、結局はどんなに遅くてもダウンロードできます。)
さらに、オートリジューム機能があるので突然接続が切れても前回のところからダウンロードすることが可能です。
相手とつながらなくても、つながるまで接続を試みます。

スピード

欲しいファイルを複数のホストが持っている場合、Xoloxは複数のホストからそのファイルを部分的に、かつ同時にダウンロードが可能です。
これによってダウンロード速度は格段に速くなります。非常に便利です。

その他の特徴

・すべてのファイルタイプに対応

・常時サーチ機能
 GnutellaNetのネットワーク構成は、ホストが接続したり、切断したりで非常に速く変化します。そこでXoloxは、常時ホストの出入りをサーチして新しいホストが接続した場合そのホストの所持ファイルを調べ、今自分がダウンロードしているファイルが見つかった場合自動でダウンロードリストに追加します。それによって、ダウンロード速度が速くなります。

・エラー訂正機能
 Xoloxはダウンロード時常に4[Kb]多くダウンロードし、今ダウンロードした部分と既にダウンロードした部分とで重複した部分をつくりだし、二つの部分が同じか見比べながらダウンロードします。これによりダウンロードを失敗することは減少するはずです。

・部分ダウンロード機能
 ネットワーク内である一つの新しいファイルが共有できるようになった場合、それを持つホストには多くのリクエストがくるはずです。こうなるとそのホストは大変な負荷が掛かり大変です。
こういった時、Xoloxで部分ダウンロードが可能です。これは、そのファイルをダウンロード中のホストから途中のファイルを別のホストがダウンロードできる機能です。これにより完全なファイルを持つホストへの負荷の一極集中は防げます。(この機能はXoloxユーザー間のみに有効です。)

・アダルトコンテンツフィルター機能
 GnutellaNetにはアダルトコンテンツもあります。これを嫌う人も多くいるはずです。そのためにアダルトコンテンツを検索結果から除外する機能です。この機能にパスワードをかけることも可能です。

・Socksをサポート

・ソフトにスパイウェアや広告は含まれていません

欠点

・検索時の検索条件にファイルタイプの選択しかない
・起動中にGnutellaNetとの接続を手動で切断できない。(手動で切断するには、終了させるしかない。)

残念なことにXoloxは開発者の意向により2001年の12月1日もって開発の停止、使用停止になりました。
現在は、公式サイトからXoloxをダウンロードしたり、最終公式配布のver 1.12を完全にではないですが使用することはできません。
 
 

5.GnutellaCloneでの各種測定

5−1 使用帯域の測定

 Gnutella はファイルのDownloadやUploadをしていなくても常に他のGnutellaホストからの検索要求を処理するので常に帯域を使用しています。そこで、今回はBearShareを使って時間変化に対する使用帯域の推移を測定しました。さらに、BearShareには自分の回線品質をMODEM、ISDN、DSL/CABLE、T1、T3等と選べるので、もっとも低速なMODEM、自回線のDSL/CABLE、もっとも高速なT3の三っつの表示ごとでの時間変化に対する使用帯域やホスト数の推移を測定しました。これにより、帯域幅障害の問題が解決されているかがわかると思います。

測定環境

・CPU:PentiumV 450[MHz]
・メモリ:128[MB]
・OS:Windows98
・BearShare ver2.4.0
・使用回線:フレッツADSL 最大速度下り1.5[Mbps]、上り512[Kbps]
 推定最大スループット 1.27Mbps(159KB/s)
 転送速度測定サイト:ブロードバンドスピードテスト  http://speed.on.arena.ne.jp/
 測定時刻 2002/01/15 05:03:38
・共有ファイル:コピーレフト(再配布可)のMP3ファイル125ファイル575[MB]
・測定ソフトウェア:SnifferPro ver4.50.04
・BearShareの設定は初期設定で測定しました。
こちらから直接接続するホスト数は最低で3[台]、最高で6[台]
他ホストからの接続要求を容認
同時UPLOAD可能最大ファイル数4ファイル、一人当たりの同時UPLOAD可能ファイル数1ファイル
・測定は使用帯域の測定を15秒間隔、ホスト数の測定を5分間隔で行い、BearShareのStatistics画面の値を参照しました。  

 

測定結果

         表1.自回線品質表示の違いによる測定結果
MODEM DSL T3 DSL(共有ファイル無し)
UPLOAD数 [回] 2 3 3 0
DOWNLOAD数 [回] 0 1 0 0
平均使用帯域 [KB/s] 10.53 16.16 15.61 7.231
平均到達可能ホスト数 [台] 253.4 2672 1828 1163

使用帯域の推移

ホスト数の推移

使用帯域の推移

ホスト数の推移

使用帯域の推移

ホスト数の推移

使用帯域の推移

ホスト数の推移

 まず見てわかるのがUPLOAD数がMODEM、DSL、T3で違いがほとんどないのですが、平均使用帯域と平均到達可能ホスト数がMODEM表示時の場合、DSLやT3に比べて少ないということです。平均到達可能ホスト数に関しては特に少ないです。やはりこれは、帯域幅障害を起こさないためにモデム表示のホストはGnutellanネットのホスト数が少ない疎の部分に配置させられているのだと思います。平均到達可能ホスト数とは自分からの検索や接続等のコマンドが届くホストの数です。これが自分のGnutellaネットになります。 逆に、DSL、T3表示だと回線品質は高速とみなされGnutellaNetの密な部分に配置されているようです。これにより帯域幅障害への改良が施されているのがわかります。
 さらにモデムに関してですが、平均使用帯域が10.53[kB/s]でていますが、モデムでの可能と思われる伝送速度は現在56Kモデムで最高で5[KB/s]ぐらいなので常時10.53[KB/s]やりとりするのは無理です。ですのでモデム使用者は直接接続ホスト数を1つか2つに減らすべきだということがわかります。

 さらに使用帯域についてですが、DSL表示の共有無しでの平均使用帯域が7.231[KB/s]になっています。平均到達可能ホスト数は1828[台]とモデムの7倍以上のホスト接続数であるのに使用帯域がモデムよりも少ないことがわかります。モデム、DSL、T3の場合UPLOADやDOWNLOADでの使用帯域も含まれているので、検索処理や接続処理のみの値はもう少し少ないはずです。これらから、BearShareの初期設定では検索処理や接続処理などでの常時使用帯域は回線表示にかかわらず10[KB/s]付近の帯域を常時要すると思われます。

 さらに図5-2、4、6の到達可能ホスト数のグラフをみるとホスト数が時間と共に上昇しているのがわかります。これはGnutellaNetの大きさが未だ最大ではないことを表していると思います。もし最大ならある値で一定になるはずだからです。では、GnutellaNetの最大値がいくつになるかというと、BearShareの初期値ではホストとの直接接続数は最低3[台]、最高6[台]です。さらにコマンドのTTLはver2.4.0では設定項目がなくなっているのでいくつか分かりませんが、ver2.3.0までの初期値では5でしたのでTTL5とすると、Gnutellaユーザーが全て初期値のまま使用しているとして考えるとGnutellaNetの最大値は9330台(=6+36+216+1296+7776台)になります。この値と測定値の平均値を比べてみると、測定値は最大値のMODEM 2.72[%]、DSL 28.6[%]、T3 19.6[%]しかでてないことが分かります。最大値はあくまで理論値であり実際にこの値がでるこはないと思いますがそれでも少し低すぎに思えます。モデムに関しては少なすぎで、検索結果もDSL、T3よりも著しく少ない結果しか出ないように思われます。

 帯域幅障害の防止策でモデムはGnutellaネットのホスト数が疎の部分に配置されることがモデムを無視していることになっているのではないか、そうなるとGnutellaネットにモデムで接続する意味も失われるのではないか、という疑問を感じます。そこで次では、表示の違いによる検索結果の数を測定しようと思います。

5−2 検索ヒットファイル数の測定

 5-1の測定より、MODEM、DSL、T3では到達可能ホスト数の値に違いがみられ、モデムに関しては他の二つの表示より著しく少ない値となりました。ここではこの到達可能ホスト数の違いによる検索ヒットファイル数を測定しました。
測定には
・共有ファイルはコピーレフト(再配布可)のMP3ファイル125ファイル575[MB]を使用
・BearShareの設定は初期設定で測定
こちらから直接接続するホスト数は最低で3[台]、最高で6[台]
他ホストからの接続要求を容認
同時UPLOAD最大数4、一人当たりの同時UPLOAD数1
・使用帯域やホスト数はBearShareのStatistics画面の値を参照しました。
・検索ワードは「Network」を用い、ファイル形式はEverythingにし、5分間隔で測定しました。

測定結果

表2.自回線品質表示の違いによる検索ヒットファイル数
MODEM DSL T3
UPLOAD数 [回] 2 2 3
DOWNLOAD数 [回] 0 0 0
平均使用帯域 [KB/s] 9.716 9.869 15.11
平均到達可能ホスト数 [台] 1641 4279 1828
平均検索ヒットファイル数 [個] 1431 1222 1429

使用帯域の推移

検索ヒット数の推移

使用帯域の推移

検索ヒット数の推移

使用帯域の推移

検索ヒット数の推移



 結果から、回線品質の表示による違いはUPLOAD数には特にみられません。平均使用帯域でT3が他の表示の約1.5倍大きい値がでています。平均到達ホスト数ではDSLが他の表示の2倍以上の値がでています。平均検索ヒットファイル数はDSLが他より少し少ないだけとなりました。今回の結果で一番重要なのは平均検索ヒットファイル数なので、これについて考えてみたいと思います。

 平均検索ヒットファイル数が一番多かったのは大きな差ではないですがモデムでした。しかし、モデムは平均使用帯域、平均到達可能ホスト数とDSL、T3よりも少ない値でした。Gnutellaネットではユーザー、共有ファイルは時々刻々と変化するので、検索ヒット数の大小についてや、Gnutellaネットの大きさに対する検索ヒット数について私は何とも言えません。ただ、帯域幅障害の問題からモデムはGnutellaネットの疎の部分に配置させられ、到達可能ホスト数が少なくなっていますが、決してGnutellaネットから無視されているのではなくモデムでも十分な結果を得られるということがいえると思います。
 しかし実際モデムは常時使用帯域を減らすために直接接続ホスト数を1つから2つにしなくてはならないので、到達可能ホスト数や検索ヒット数はDSLやT3に比べて明らかに減ります。モデムなどの低速回線とDSL、T3などの高速回線ではGnutellaネット内で理論的に差はなくても、現実問題で差が出てしまうはずです。

 次は測定していて気付いたことですが、検索を行うと到達可能ホスト数が増えるということです。これは、検索に理由がありました。検索は自分や他のホストの接続ホスト全部に行うので、検索することによってGnutellaネット内の全ホストの確認になるので、新規ホストを一斉にみつけだすことにもなるのです。よって、到達可能ホスト数を増やしたいと思うときは検索をすることが有効になります。定期的に行えばホスト数はどんどん増えていくことになります。
 しかし、実際はそううまくはいきません。検索を行うと到達可能ホスト数が急激に増えますが、それにともなって直接接続しているホストとも接続が切れやすくなることがわかりました。原因は直接接続ホストは検索元(自分)からみて2番目に多く接続処理や検索処理をしなくてはならないので、急激に増えた自分以外のホストからの接続処理や検索処理が処理できなくなり、接続が切断されるのではないかと思います。これは、図5-10、14をほとんど検索をしていない図5-1のホスト数の変化の測定のグラフと比べると、明らかにでこぼこしてるのがわかると思います。
 ただ直接接続ホストの処理可能な量が非常に大きいと図5-12のようにどこまでも到達可能ホスト数が増えていくことになると思います。
 

6.まとめ

 本論文ではP2P技術やP2P技術をつかったソフトウェアについて調べてきました。NapsterやGnutellaにおける検索の仕方やファイルのダウンロードの流れ、そして特徴、利点欠点について。BearShareについても、特徴、利点欠点について調べました。そしてBearShare使用時の使用帯域幅の測定、検索ヒットファイル数の測定を行いました。
 Napsterについて簡単にまとめると、Napsterはファイルのリスト管理やユーザーの入出管理用の中央サーバーがあり中央サーバーが使用不能になるとユーザーもNapsterを使用不能になります。
 ユーザー、ファイルの管理や検索を中央サーバーが行っているので、ユーザー側での処理することはほとんどありません。ですので回線の品質によらず検索結果までは皆同じになります。
 Gnutella、GnutellaCloneについて簡単にまとめると、Gnutellaには中央サーバーは無く、Gnutellaネット接続用のサーバーがあります。Gnutellaでは、このサーバーが使用不能になっても、ユーザーがGnutellaネットに接続していれば検索することもファイルを交換することも何の問題も無く可能です。Gnutellaネットの接続もGnutellaネットに接続しているホストのIPアドレスを1つ知っていれば可能です。
 ホストの接続や検索をそれぞれのホスト1つづつが行うので、常時帯域を使用します。モデムなどの伝送速度の遅い回線を利用している人は常時使用帯域を少なくするために直接接続ホスト数を1つか2つにしなくてはならないので検索結果がDSL、T3などの高速回線に比べて少なくなります。
 BearShareでの測定について簡単にまとめると、BearShareでは帯域幅障害を防ぐためにモデムなどの低速回線をGnutellaネットの疎の部分に配置します。疎の部分に配置されても、検索結果は中央部と大して変わりません。
 直接接続ホスト数が同じであれば到達可能ホスト数に違いがあっても常時使用帯域はほとんど同じ値になります。
 到達可能ホスト数を増やしたければ検索を行うことが有効です。検索は接続ホスト全部に行うので、他のホストに新たに接続されたホストもみつけだし接続します。
 と以上の結果になりました。NapsterとGnutellaのどちらも利点、欠点があり使用するときは自分の環境にあったものを使うのがいいです。どちらもまだまだ改良の余地があり、特にGnutellaは独特な技術なので更なる改良を期待します。 しかし、どちらも本来の固定IPアドレスも無いような端末を見つけ出し、接続し、埋もれていた資源を有効活用するという目的は現時点で実現できていると思います。ただ、著作権侵害の温床になっているという大きな問題も抱えています。

 

7.謝辞

今回測定で使用したコピーレフトのMP3ファイルは以下のサイトからのを使用しました。ありがとうございました。

1.Dan Friedman
http://www.boywithmachine.org/
2.steveharvey[double-h]
http://ishmail.prmsystems.com/hh.html


 
 

8.参考文献、サイト

[1] 竹下隆史、村山公保、荒井透、苅田幸雄「マスタリングTCP/IP入門編」オーム社平成6年6月24日発行
[2] 井口圭一「ネットワーク管理者のためのNapster入門」
http://www.atmarkit.co.jp/fwin2k/experiments/napster_for_admin/napster_for_admin_1.html
[3] KIKI「Napsterの世界」
http://www.k-cable.ne.jp/ka/cable/napster.html
[4] 三浦佑樹「Napster問題について」
http://www.econ.hokudai.ac.jp/~takais/yuki.htm
[5] こば「Gnutella」
http://www.geocities.co.jp/SiliconValley-Bay/7325/
[6] 井口圭一「ネットワーク管理者のためのGnutella入門」
http://www.atmarkit.co.jp/fwin2k/experiments/gnutella_for_admin/gnutella_for_admin_1.html
[7] manuka「Gnutella とファイヤーウォール」
http://www.jnutella.org/docs/gnutella/Firewalls.html
[8] BearShare公式サイト
http://www.bearshare.com/index.htm
[9] Jnutella.org
http://www.jnutella.org/
[10] dex「スパイウェアについて」
http://www.sumomo.sakura.ne.jp/~fly/dlmaster/other/spyware.html
[11] OPENP2P.com
http://openp2p.com/
[12] LimeWire公式サイト
http://www.limewire.com/
[13] Xolox公式サイト
http://www.xolox.nl/