キー配布

Winny の動作の核はこのキー配布です。
現在のキー配布メカニズムはβ17.3 で採用されたもの。

キーの種類

仮想キー

"ファイルを持っている" という情報が入っているキーで、 検索リンク経由で周囲のノードにばらまかれる。 また、後述の検索クエリによっても移動する。

検索キー(検索クエリ)

検索条件を持って検索リンクをたどってノード間を渡り歩く。
検索にヒットした仮想キーをクエリパケット限界(200?)まで抱え込んで、 逆をたどって元ノードに戻る。

ちゃんとした定義はないが、
検索クエリ := 検索キー(発見した仮想キー)*
という感じに推測される。

仮想キーの転送

キーの転送経路

基本的には隣接ノードに少しずつ拡散する方式になっている。

  1. 各ノードが持つキーは、キー転送率に基づいて 一定(β16の時点で1秒に1つ)の間隔で隣接ノードに転送される。 なお、1キーで100〜200バイト程度。
  2. 受け取ったノードは次のノードに転送せず、 自分の保持キーバッファに追加する。
    1.に戻る。

これだけだと検索リンクで近いノードのキーしか検索できないので、 加えて検索クエリを飛ばすことによって遠くのノードのキーを引き寄せる。

  1. 自動ダウンの検索キーワードに合う保持キーを持っているか調べる。
    この処理は1秒に1条件。
  2. 見つかればダウンロード開始。
  3. 一定数以下しか見つからなければ、検索クエリを発行する。
    これは60秒に1回。
  4. 隣接ノードを伝って転送され、 途中で見つけた仮想キーを含んでいく。 仮想キーと同様に持ち主が書き換えられる(多分)。
  5. 寿命が尽きたら書いてある持ち主を逆順にたどって戻っていく。
  6. 戻ってきたらお腹の中の仮想キーを保持キーに追加する。
    (もしかすると仮想キーにかかれた相手をノードバッファに追加するかも。)

遠くのノードの場合には途中で何度もキーの持ち主が書き換えられている可能性が高いためすぐにはダウンロードできないが、 そのキーの持ち主に自ら近付くことで、中継段数を減らして目的のファイルを落としやすくする。

書き換え

仮想キーを転送する場合に、持ち主を転送ノードのIPアドレスで書き換えることがある。 Winnyでは、検索クエリに仮想キーがパックされる際に主に書き換えが行われる。

パラメータ

Winny網でのキー流通はだいたい以下の3つのパラメータによって調整されている。

キー転送率(上昇率)

保持キーが他ノードに転送される確率

キー寿命

あるキーがWinny網に存在できる時間。

転送確率

キーを他ノードに転送する場合に、IPアドレスを書き換える確率。 書き換えた場合はダウンロード時に中継を行うことになる。

検索時の挙動

手動検索

指定した検索条件を含めた検索クエリを発行する。
このとき、クエリによって移動する経路が変わるので自動で繰り返し発行される。

自動ダウン

基本的には検索クエリを発行せず、 周囲から来て自分が保持している仮想キーから検索を行う。
ただし保持キーからの検索で見つからない場合には、 手動検索と同様に検索クエリを発行する。

Port0の挙動

基本的には、Port0の直上のノードが中継します。

以下のような場合:

A ← B(Port0)

C ← D

  1. Bが持つファイルの仮想キーがAに転送される
  2. AはPort0の仮想キーが来た事を判別
  3. 仮想キーの所有者をAのIPアドレスに書き換える

この段階で……

……という認識をしているので、あとは通常の転送になります。
ダウンロードに続きます。


戻る

© aki 2002-
aki@winny.info