福冨諭の福冨論

RSSリーダーではこちらをどうぞ→https://feeds.feedburner.com/fuktommy

ノード管理

クライアントの仕事は次の通りです。

  • 定期的に初期ノードを利用してノードに接続し、得られたノードをノードテーブルと検索ノードテーブルに書き込みます。
  • 接続しているノードと通信できるかのチェックを行い、ノードテーブルを最新に保ちます。
  • 後で述べるキャッシュの検索時に接続できないノードがあれば検索ノードテーブルから削除します。

サーバの仕事は次の通りです。

  • 外部から接続してくるノードがあれば接続チェックを行った上でノードテーブルと検索ノードテーブルに追加します。
  • 接続解除の通信があればノードテーブルから削除します。
  • 外部から隣接ノードの問い合わせがあればノードテーブルの内容を教えます。

Winnyの場合は接続数が上限の場合には、新たに接続を依頼してくるノードよりも現在接続しているノードを優先しますが、新月は新たなノードを優先します。ネットワークを積極的に攪拌するためです。

隣接ノードへのリンク数は5としています。これはzigumoが東西南北の4リンクを採用していたらしいという話から来ていて、東西南北の4リンク+作業用の1リンク=5リンクとなっています。リンクには上流・下流の区別はありません。

ノードは3つの情報を持っています。

  • IPアドレス(現在はIPv4のみ対応です)またはドメイン名。(例: node.shingetsu.info)
  • ポート番号。(例: 8000)
  • HTTPのパス。(例: /server.cgi)

WinnyはNATと直接接続を区別していますが、新月はそうしてません。区別する理由がわからない…。もう1つの違いは新月はPort0、つまり外部からの接続を受け付けないノードを許さないことです。これは設計を単純にするためです。新月の場合は自分自身がソフトを動かさなくてもゲートウェイ経由で利用できますので必要がないということもあります。