AirOne bootstrap - rendezvous
一般にP2Pアプケーションでは、一番最初に他のノードを最低一つ見付けることが重要です。一旦ノードを発見すれば、P2Pネットワーク内を検索すること
で他のノードを発見することができます。ArielAirOneでも、同様に最初の一つ目のノードを見付けることが重要になります。
ArielAirOneでは、最初の一つ目のノードを見付ける処理を総称してrendezvous(ランデブー)と呼んでいます。ArielAirOneでは、このrendezvousには次の3つの段階があります。
- 以前接続したノードをキャッシュ
- Neighborhood Discovery Protocol(NDP, 近隣発見プロトコール)
- Ariel Public Serviceとの接続
ArielAirOneは起動時にこれらの3つの処理を順次実行して、他のノード発見してP2Pネットワークに参加します。それでは、これら3つの処理に付いて順次見ていきます。
* 以前接続したノードのキャッシュ
ArielAirOne
では、一度接続したことのあるノードは一定量、一定時間ディスク上にキャッシュしています。これは、直接接続したことのあるノードや、以前アクセスしたこ
とのあるノード、また、リソースの検索コマンドを発行して、発見コマンドが受け取ったノードなどです。直感的には、自分の関係しているルームに属してる
ノード郡になります。
ArielAirOneでは、起動時にディスクキャッシュに保存されているこれらのノードに接続を試み、最初のノードを発見します。このため、AirOneでは再起動してもすぐに同じノードに接続することができます。
ま
た、ArielAirOneはP2Pアプリケーションであるため、クライアント同士が相互に接続しあってP2Pのオーバーレイネットワークを形成していま
す。クライアント同士が相互に接続しあっていますが、一般にクライアントは常に存在しているという保証がありません。不用意なネットワークの切断やPCの
再起動などが頻繁に発生しています。例えば、ネットワークにつながっているノートPCが社外に持ちだされるなどです。
ArielAirOneには
こうした自体に対処するため、3ないし5個の他のノードとの接続を維持していますが、なんらかの理由でアプリケーションの実行中に全ての他のノードとの接
続がとぎれることがあります。こうしたケースの場合でも、以前接続したことのあるノードキャッシュを用いて他のノードと接続を試みます。
* Neighborhood Discovery Protocol(NDP, 近隣発見プロトコール)
ArielAirOneをインストール後、一番最初に起動した場合は、ノードキャッシュは存在していません。
ま
た、一度起動したことがある場合でも、他のノードのPCが全て終了されているケースや、DHCPでIPアドレスを動的に割り当てていて、起動するたびに
IPアドレスが変更されるケースなどがあります。これらのケースでは、以前のノードキャッシュを使用しても他のノードと接続することができません。
これらの問題を解決するために、ArielAirOneでは、Neighborhood Discovery Protocol(以下NDPと略, 近隣発見プロトコール)と呼ばれる仕組を利用してLAN内の他のノードを発見します。
NDP
を利用してLAN内の他のノードを優先して発見するのは、ArielAirOneの場合はルームなどのグループ形成には同じLAN内のユーザと形成するこ
とが多いためです。会社をまたがったルームを形成している場合ですら、社内の数人ユーザがそのルームに属していることがほとんどです。こうした理由から、
ArielAirOneでは、NDPで社内の他のノードとの接続を優先しています。
NDPでは、UDPブロードキャストを使用して他の
LAN内のノードを発見します。ArielAirOneの起動時にはairone-misというNDPサーバモジュールを起動します。このNDPサーバモ
ジュールは、LAN内のノードの検索コマンドによる問い合わせに対して、自分のノード情報と自分自身を実行しているユーザ情報を返します。NDPプロト
コールによる検索コマンドを発行するのは、airone-micと呼ばれるNDPクライアントモジュールが行っています。NDPクライアントモジュールは
起動すると、LAN内にNDPクライアントモジュールを実行したユーザIDと共にLAN内のノード検索コマンドをUDPでブロードキャストします。つま
り、NDPクライアントモジュールのノード検索コマンドにNDPサーバモジュールが応答して、自分のノード情報とユーザIDを返すことで、LAN内の他の
ノードを発見しています。(UDPのポート番号を記述する)
airone-misは、ArielAirOne起動時に実行されて、
ArielAirOne実行中は実行され続けます。airone-micは起動時に一度実行されるだけで、即座に終了します。また、他のノードとの接続が
すべて途切れて、ノードキャッシュにあるノードとも全て接続できなかった場合などに適宜実行されます。
* Ariel Public Serviceとの接続
NDP
を使用してもLAN内に他のノードがひとつも存在していないケースや、なんらかの理由で発見できても接続を拒否されるケースがあります。端的な例は、
ArielAirOneを社内で最初にインストールした場合です。それ以外にも朝、出社して一番最初にPCを起動して他のノードがひとつも発見できないこ
ともあります。
こうしたケースでもP2Pネットワークに参加できるようにArielAirOneでは、パブリックサービスと呼ばれるサービス郡が
あります。パブリックサービスもP2Pネットワークでは、単なるひとつのノードに過ぎませんが、IPアドレスと接続を受け付けるポート番号が固定になって
いること、一度に接続できるノード数が他のノードよりはるかに多いことをのぞけば、基本的には同じものになっています(注:パブリックサービス郡について
は別章で記述します)。
このパブリックサービスに接続することでArielAirOneが確実にP2Pネットワークに参加することを保証しています。
付
加的な機能として、P2Pネットワークでパブリックノードとの仮想的な接続が維持されていることを保証する仕組があります。P2Pネットワークは絶えずク
ライアントPCの起動・終了やネットワークの分断など極めて不安定な環境にあります。こうした不安定な環境では、P2Pオーバーレイネットワークが分断さ
れ、ネットワークが孤立するケースがあります。例えば、AからZの26個のノードで構成されたネットワークがAからNまでのノードで構成されたネットワー
クとOからZまでのノードで構成されたネットワークの2つに分断されるケースです。ArielAirOneでは、基本機能としてこのような分断が起きない
ように設計されていますが、不測の事態に備えてパブリックノードから定期的にP2Pの仮想ネットワークにブロードキャストが行われてパブリックノードとの
接続を維持されているかを確認しています。もし、パブリックノードとの接続が維持されていなかった場合は、一定の確立で各ノードがパブリックノードと接続
するようにしています。一時的に同じLAN内でも複数のノードがパブリックノードと接続しますが、時間的な経過と共にLAN内でパブリックノードと接続し
ているPCは1から2個になるように自律的に調整しています。
* まとめ
ArielAirOneでは、1.
ノードキャッシュによる接続、2. NDPよるノード発見、3.
パブリックノードと接続することによって、P2Pネットワークへの接続・参加を行えるようにしています。また、パブリックノードの付加的な機能として、
P2Pネットワークが分断・孤立しないように保証しています。