Winny(ウィニー)は2002年に登場したP2Pファイル共有ソフトである。このWinnyは,匿名性を実現しやすいというP2Pの特徴に目を付け,その匿名性を強化するようなしくみを持っている。
検索のしくみはファイル本体と別
WinnyがP2Pネットワークに参加するには,サーバーは使わない。最初につなぐパソコンを手入力で設定し,Winnyのネットワークにつなぐ。ネットワークに接続したら,次はファイル検索である。
Winnyでは,検索キーワードがファイル名に含まれていると,そのファイルが検索に引っかかるようになっている。これだけ見ると単純そうだが,Winnyの検索のしくみはかなり複雑だ。
Winnyのネットワーク内では,ファイル本体とそのファイルに関する情報が切り離され,後者だけがばらまかれる(図1)。この情報は,ファイル名やファイルがあるパソコンのIPアドレスなどの情報をまとめて暗号化したもので,「仮想キー」と呼ばれる。
Winnyのソフトから検索キーワードを入力して検索ボタンを押すと,キーワードを含んだ「検索キー」と呼ばれるデータが作られる。これをWinnyネットワーク上でリンクの張られたほかのパソコンに送る。
検索キーを受け取ったパソコンは,それと自分が持っている仮想キーを付き合わせていく。これで,検索条件が一致するかどうかをチェックするのである。
もし検索条件が一致すれば,その結果を検索要求が来たパソコン経由で返信する。結果として送られる内容には,単に検索条件が一致したことに加えて,仮想キーも含まれる。仮想キーにはファイル名が入っているので,検索要求を出したパソコンは,検索条件に一致したファイルのファイル名がわかる。
別のパソコン経由でファイルを転送
検索が終わると,次はダウンロードである。検索結果の一覧からダウンロードするファイルを選択すると,そのファイルのダウンロードが始まる。では,Winnyのダウンロードのしくみを見てみよう(図2)。まず,検索を実行したパソコンAは,検索結果として受け取った仮想キーに含まれるIPアドレスに基づいて,ダウンロードを要求する。ただしこのIPアドレスは,元のファイルがあったパソコンCのものではない。実は,検索条件が一致したパソコンBでは,検索結果といっしょに返信する仮想キーに含まれるIPアドレスをパソコンCのものから自分のものに書き換える。このため,パソコンAはパソコンBにダウンロードを要求するのである。
ダウンロードの要求を受けたパソコンBは,変更する前のIPアドレスを知っているので,それに基づいてファイルがあるパソコンCにダウンロードを要求する。
これに従ってパソコンCは,検索条件が一致したパソコンBに対してファイルを送り始める。そのファイルを受け取ったパソコンBは,そのファイルを最初のダウンロード要求を送ってきたパソコンAに送る。
見知らぬファイルが勝手にたまる
ここで,検索条件が一致したパソコンBは,ただファイルを転送するのではなく,そのファイルを自分のハードディスクに蓄える。つまり,自分が要求したわけではないデータがハードディスクにたまっていくのである。なぜ,このようなしくみを取り入れているのだろうか。
理由の一つは,匿名性を確保するためだ。図1で,ファイルを持っているパソコンが仮想キーをばらまくとしたが,そのファイルはそもそもそのパソコンでアップロードしたものとは限らない。ファイルの転送途中で蓄えられたファイルかもしれない。
もう一つの理由は,帯域の有効利用である。ダウンロードされる回数が多いファイルは,その分転送途中のパソコンにも残る。そうすると,近くのパソコンはそれをダウンロードすればよい。ファイルの転送自体には余分に帯域が必要になるが,一度ファイルの転送が終わると,次からはむしろ帯域の節約になる。