初期ノード

初期ノードをどっからどういうふうに取得するべきか考え中。
Winnyの方法はあまりよくないと思うし、実装がまずくて現在あまりうまく動いていない気もする。

今のところ考えているのは、初期ノード取得用のインターフェース(HTTPのPOSTデータかなにか)を決めて、専用のCGIを作る方法だ。CGIからのデータ取得は初期ノード登録も兼ねていて、CGIへはポート番号とノードの回線速度だけを渡す。CGIはアクセスされたIPアドレスを知ることができるので、それとポート番号あわせてスクランブルし保存する。そして、そうやってたまった初期ノード情報をポエニーへ応答として返す。
回線速度は必須なのかというと、そうでもない。贅沢をいうとクラスタリングキーワードも一緒に送ってくれると開始時のネットワーク構築効率がよくなりそうだが、これはプライバシーの関係でユーザに嫌がられそうなので、やめておこうと思う。
初期ノード取得が登録も兼ねているというと、アクセス負担のことが気になるかもしれないが、初期ノードCGIというのは、ほんとんど使われないはずなので、そう気にする必要はないように思う。初期ノードCGIが使われるケースというのは、初めてソフトを使うときか、モデムの電源が落ちたままソフトを動かし続けて全てのノード情報が接続不可と判断されたときか、母親に大学受験が終わるまでパソコン禁止にされて半年間ソフトを起動しなかったときくらいだろう。ポエニーは1分間に1度そのとき持っているノード情報を初期ノードファイルへ保存するので、一度ネットワークに繋がるとノード情報は更新され続ける。このため、初期ノードCGIへの頻繁なアクセスは必要ない。
取得と登録を同時に行いたいというのには、もうひとつ理由がある。これは回線速度を送る場合に限っての話になるが、回線速度の統計をとりたい思っているのだ。現在、ポエニーはWinny2プロトコルを使っているので、回線速度はとても重要だ。ネットワークは回線速度によって階層化され、検索クエリは速度の速いノードがいるの方向(上流)へ投げる。そして一番重要なのは、上流への2コネクションと下流からの5コネクションを許すというネットワークの形だ。この比は現在うまく機能しているのか? 15KB/Sのノードより1000KB/Sのノードが多いのは明らかだし、1000KB/Sのノードより120KB/Sのノードのほうが2倍以上多い気がする。1000KB/Sのノードはそれ以上速いノードがいないので、同じ1000KB/Sノードに接続することになり、これは1000KB/Sノードの下流5コネクションのうち2コネクションが同じ1000KB/Sのために使われ、下流(120KB/Sノードたち)のために3コネクションしか使えないということを意味している。そして120KB/Sは上流へ2つのコネクションを作ろうとするので、単純な計算では、1000KB/Sノード群は1.5倍数の120KB/Sノードまでしか受け付けない。120KB/Sノードは、実際それよりもっと多いだろうから、今度は120KB/Sノード同士が接続しあうようになる。そうすると次は50KB/Sノードの比と120KB/Sノードの比がどうなっているのか気になってくる。私は、できる限り同じ速度のノード同士が接続しあわないようにしたいと思っている。これは、上も下もない同じ速度同士が特に条件なく繋がりあうと2ステップ先以上からの接続ループが発生する可能性があるからだ。ただもちろん、完全を目指すと木構造的になってきて特定のノードに負荷が集中してしまうのと、Winnyは現状の比でうまく動いている実績があるので、下手に触らないほうがいい気もしている(Winnyでは、単純にノード数が多いため、ループが起こる確率が低いだけだと思う)。実際この話は、現実では問題にならないのかなとも思うが、やっぱりそういうコアな部分は気になるので、ぱっと見て分かる(本当の)回線速度の分布図は欲しい。
(書いていて思ったんだけど、そんなものはどっかのウェブサイトにありそうだな・・。間違いなくある!!)

最後に、最初にふれたWinnyの初期ノードの実装がまずいという話を簡単に説明しておこう。
Winnyは、自ノードのIPアドレスとポート番号をスクランブルした文字列を生成し、それが掲示板や初期ノードCGIへ投稿されることを期待している。しかし、Winnyがローカルネットワークで起動されると、このアドレスにローカルネットワークのアドレスを使用する(自分自身で自分のアドレスを取得しているためそうなる)。これは192.168.0.11なんてアドレスだ。同じローカルネットワーク内でWinnyを動かしていて、そのネットワーク内に初期ノードCGIがある場合は、これでうまく機能するが、舞台がインターネットになったとたん、これはゴミデータになる。そして、最近はルータを置いてインターネットに接続している端末が多くなってきているので、このゴミの割合が増加して、初期ノードの多くがゴミデータになっている。

備考。Winnyがシステムで初期ノードの仕組みを完全にサポートしていないのは、ダイナマイトと導火線までは用意して、火は用意しないという考えなのかなーとちょっと思った。妄想。


今回はちょっとえらそうに書いてみるという試みを行いました。
えらそうでごめんなさい >_