Winny(ウィニー)は2002年に登場したP2Pファイル共有ソフトである。このWinnyは,匿名性を実現しやすいというP2Pの特徴に目を付け,その匿名性を強化するようなしくみを持っている。

検索のしくみはファイル本体と別

 WinnyがP2Pネットワークに参加するには,サーバーは使わない。最初につなぐパソコンを手入力で設定し,Winnyのネットワークにつなぐ。

 ネットワークに接続したら,次はファイル検索である。

 Winnyでは,検索キーワードがファイル名に含まれていると,そのファイルが検索に引っかかるようになっている。これだけ見ると単純そうだが,Winnyの検索のしくみはかなり複雑だ。

 Winnyのネットワーク内では,ファイル本体とそのファイルに関する情報が切り離され,後者だけがばらまかれる(図1)。この情報は,ファイル名やファイルがあるパソコンのIPアドレスなどの情報をまとめて暗号化したもので,「仮想キー」と呼ばれる。

図1●Winnyのファイル検索のしくみ   図2●Winnyのダウンロードのしくみ
図1●Winnyのファイル検索のしくみ
ファイル本体と切り離された「仮想キー」と呼ばれる情報を見つけることでファイルを検索する。検索条件に合ったファイルの存在がわかっても,その時点ではファイル本体の場所はわからない。
[画像のクリックで拡大表示]
  図2●Winnyのダウンロードのしくみ
GnutellaやWinMXと違い,ほかのパソコンを経由してファイルをダウンロードする。さらに,ファイルを転送する途中のパソコンには,そのファイルがためられる。こうして,ファイルがあちこちに配置されることになる。
[画像のクリックで拡大表示]

 Winnyのソフトから検索キーワードを入力して検索ボタンを押すと,キーワードを含んだ「検索キー」と呼ばれるデータが作られる。これをWinnyネットワーク上でリンクの張られたほかのパソコンに送る。

 検索キーを受け取ったパソコンは,それと自分が持っている仮想キーを付き合わせていく。これで,検索条件が一致するかどうかをチェックするのである。

 もし検索条件が一致すれば,その結果を検索要求が来たパソコン経由で返信する。結果として送られる内容には,単に検索条件が一致したことに加えて,仮想キーも含まれる。仮想キーにはファイル名が入っているので,検索要求を出したパソコンは,検索条件に一致したファイルのファイル名がわかる。

別のパソコン経由でファイルを転送

 検索が終わると,次はダウンロードである。検索結果の一覧からダウンロードするファイルを選択すると,そのファイルのダウンロードが始まる。では,Winnyのダウンロードのしくみを見てみよう(図2)。

 まず,検索を実行したパソコンAは,検索結果として受け取った仮想キーに含まれるIPアドレスに基づいて,ダウンロードを要求する。ただしこのIPアドレスは,元のファイルがあったパソコンCのものではない。実は,検索条件が一致したパソコンBでは,検索結果といっしょに返信する仮想キーに含まれるIPアドレスをパソコンCのものから自分のものに書き換える。このため,パソコンAはパソコンBにダウンロードを要求するのである。

 ダウンロードの要求を受けたパソコンBは,変更する前のIPアドレスを知っているので,それに基づいてファイルがあるパソコンCにダウンロードを要求する。

 これに従ってパソコンCは,検索条件が一致したパソコンBに対してファイルを送り始める。そのファイルを受け取ったパソコンBは,そのファイルを最初のダウンロード要求を送ってきたパソコンAに送る。

見知らぬファイルが勝手にたまる

 ここで,検索条件が一致したパソコンBは,ただファイルを転送するのではなく,そのファイルを自分のハードディスクに蓄える。つまり,自分が要求したわけではないデータがハードディスクにたまっていくのである。

 なぜ,このようなしくみを取り入れているのだろうか。

 理由の一つは,匿名性を確保するためだ。図1で,ファイルを持っているパソコンが仮想キーをばらまくとしたが,そのファイルはそもそもそのパソコンでアップロードしたものとは限らない。ファイルの転送途中で蓄えられたファイルかもしれない。

 もう一つの理由は,帯域の有効利用である。ダウンロードされる回数が多いファイルは,その分転送途中のパソコンにも残る。そうすると,近くのパソコンはそれをダウンロードすればよい。ファイルの転送自体には余分に帯域が必要になるが,一度ファイルの転送が終わると,次からはむしろ帯域の節約になる。