現在,インターネットの普及により各端末がネットワークに接続してサービスを利用することが可能である.現在のインターネットサービスの通信モデルの殆どはクライアント・サーバモデルであり,クライアントはサーバを介してサービスを利用することができる.しかし,情報・コンピュータ資源の増大,帯域幅の拡大などインターネットの発展に伴い,クライアント・サーバモデルでは十分に活用できないのが現状である.そこでサーバへの依存性が低く,クライアント同士が直接通信を行うP2Pモデルが注目されている.しかしP2Pモデルにはクライアントの互換性や開発環境・プラットフォームに合わせた設計を行う必要がある.
本報告では,こうしたP2Pモデルの問題を解決するため,Sun Microsystemsによって開発されたP2PプロトコルであるJXTAについて,アーキテクチャやネットワーク・セキュリティ機構,JXTAアプリケーションの1つであるJXTA Shellについて説明する.
まず,現在のインターネットなどネットワークサービスの主流となっているクライアント・サーバモデルと近年注目されているP2Pモデルについて紹介する[1][2].
クライアント・サーバモデル(Fig.1)はサービスを利用するクライアントと,サービスを提供するサーバによって構成されるネットワークシステムである.クライアントはサーバに対して要求を出し,サーバから結果を受け取る処理を行う.それに対して,サーバは常にサービスを提供しており,クライアントからの要求を受け取り,その要求を処理して結果をクライアントに返す処理を行う.クライアントからの要求は,全てサーバを介して処理が行われるので,サーバへの負担が大きく,サーバが故障するとクライアントはサービスを利用することができなくなる.
P2P(Peer-to-Peer)はサービスの提供をネットワーク上のクライアント同士が分担し,クライアント同士が直接通信を行うシステムである.あるマシンに障害が生じてもサービスが停止することはなく,よりスケーラブルなサービスを提供することが可能である.また様々な通信チャネルを使用することによって,インターネット全体の仕様帯域幅を有効利用している.
P2Pには以下に示すHybridP2PとPureP2Pという2つのP2Pシステムが存在する.
HybridP2P(Fig.2)は一部サーバを用い,それ以外の処理はクライアント同士で行っているシステムである.サーバの行っている処理はクライアントの位置情報,行っているサービス情報,所持しているファイル情報を発見・検索する役割である.クライアントはサーバに対してクライアントの情報を問い合わせ,その結果を受け取った後,サービスを所持しているクライアントに接続して通信を行う.
このモデルでは,クライアントは通信する他のクライアントの情報を入手するやりとりを必要としないため,クライアントの負担を軽減することができる.一方,サーバはクライアントやサービスの情報を保持しているため,サーバに故障が生じるとサービスの利用に影響が出るといった問題がある.
PureP2P(Fig.3)は全くサーバを使用せず,接続されたクライアント間で通信を行う.知っているクライアント同士でルールやネットワーク環境を取り決め,位置情報やサービス情報などを伝達する.検索を行う場合も検索要求をクライアントから他のクライアントへ伝達させて発見を行う.
このモデルでは,クライアントがインターネットに接続を行うだけでP2Pの機能を使用でき,インターネットの活用性を最大限に発揮できる.一方で,クライアントは他のクライアントの発見を行う必要があるといった問題がある.
JXTA[3][4]は2001年にSun Microsystemsによって開発されたP2Pプロトコルで,分散コンピューティングなどで様々な問題を解決するよう設計されたプラットフォームである.JXTAにはP2Pモデルでの情報検索やセキュリティなどの機能を実装されており,P2P型のアプリケーションを容易に開発できる環境を提供している.JXTAのプログラムはオープンソースであり,大学などの教育目的からビジネスへの適応まで,普及が期待されている.JXTAを利用できる言語はJavaの他,C/C++やPerlなどにも対応している.
"JXTA"という単語は「横に並べておく」という意味のjuxtaposeの短縮形である.P2Pは既存のクライアント・サーバモデルやWebベースのコンピューティングに並べておかれるもの,ということである.
Webサービスがコンテンツやデバイスの両方で拡大し続けるにつれ,P2Pコンピューティングも注目されてきている.従来のP2Pテクノロジーを利用したシステムとして,インターネットを通じてユーザ間での音楽データの共有を提供するNapster,総合的なファイルの共有を提供するGnutella,インスタントメッセージングを提供するAIM,分散コンピューティングのSETI@HOMEなどが存在する.こうしたシステムは異なるサービスではあるが,検索やファイル転送といった多くの共通する機能を有している.アプリケーションの開発は非効率であり,同様のインフラを繰り返し導入している.さらに多くのアプリケーションは特有であり,他のアプリケーションとの依存性が少ない.
Project JXTAの目的として,P2Pネットワークに必要とされる基本的な機能を持つプラットフォームを提供することにあり,以下に示す3つの目的Interoperability(相互運用性),Platform Independence(プラットフォームの独立性),Ubiquity(遍在性)をもとに設計されている.
Project JXTAでは完全に異なるソフトウェアを持つ異種のデバイスを相互作用することができ,様々なデバイスがお互いを検索・発見し,コミュニケーションを行うように設計されている.
P2Pテクノロジーを利用したシステムでは,様々なOS・プログラミング言語が存在する.Project JXTAではこうした開発環境・プラットフォームに依存しないだけでなく,複数のトランスポート間で相互に通信を行うことも可能である.ネットワークのトラフィックの軽減やファイアフォールで遮断されたクライアント同士が相互通信できる仕組みも提供している.
さらにProject JXTAではセンサー,家電,PDA,器具,ルータ,デスクトップコンピュータ,データサーバ,記憶システムなど様々なデバイス上に実装することを目指している.
JXTAネットワークはPeerと呼ばれるデバイスから構成されており,PeerはAdvertisementと呼ばれるXMLドキュメントを用いて,サービスを告知する.またPeerは互いにPipeを用いてMessageを送信する.こうしたJXTAの構成要素を以下に説明する.
JXTAネットワークに接続されているデバイスのことで,JXTAネットワークを形成する最小単位である.各Peerは他のPeerとは独立にまた非同期に動作するもので,PeerはPeer IDにより一意に認識できる.PeerはPeer Groupと呼ばれるPeerの集合を形成するために,JXTAネットワーク上に存在する他のPeerを自発的に発見する.
Peer Groupはある共通のサービスによって協同したPeerの集合である.PeerはPeer Groupを自己組織化し,各Peer GroupはPeer Group IDで一意に識別される.Peerは1つ以上のPeer Groupに対して同時に属することができる.Peer GroupはPeer Groupサービスと呼ばれるサービスの集合も定義している.
PeerがPeer Groupを生成する理由は以下のように考えられている.
Peer Groupの中のPeerは,保護されたコンテンツに対してのアクセスを許可している.Peer GroupはPeer Groupへのアクセスの制限を決定する論理的な範囲を形成している.
Peer Groupはローカルなドメインに対して,特殊性を持つことを許可している.範囲を限定することで,ネットワークの細分化が行われ,また検索範囲を定義する.
Peer Groupは,Peerに対して生存性やトラフィックの中身,責任の所在などといったモニタリングを行うことを許可している.
MessageとはPeer間で送信されるオブジェクトであり,データ交換の基本的単位である.Messageは名前と値のペアの集合で構成され,Messageの表現はXML形式とバイナリ形式が存在する.
PeerがMessageを送受信するための通信チャネルである.Messageは非同期で単方向に転送される.Pipeはバイナリコードやデータ文字列,Java技術によるオブジェクトなどあらゆるオブジェクトの転送をサポートしている.
Peer,Peer Group,Pipeサービスといった全てのJXTAリソースはAdvertisementと呼ばれるXMLドキュメントによって表現される.Advertisementはメタデータ構造をしている.JXTAプロトコルは,あるPeerリソースの存在を記述するためにAdvertisementを用いる.Peerはりソースに関するAdvertisementを検索することでリソースを発見し,ローカルで発見されたAdvertisementをキャッシュすることもある.
Peer,Peer Group,Pipeやその他のJXTAリソースを一意に識別するもので,リソースを参照する標準的な方法である.JXTA IDはテキストとして表現される.
JXTA Peer IDの一例を以下に示す.
urn:jxta:uuid-5961626164616264A78746150325033F3BC76FF13C24
14CBC0AB663666DA53903
Project JXTAはP2Pソフトウェアのアークテクチャの分析を行った結果,JXTAのアーキテクチャはFig.4に示すような層状の構造をとり,大きく3層に分かれている.
P2Pネットワークに共通する最低限の基本的な機能を提供する.Peerの検索や通信メカニズム,PeerとPeer Groupの作成,モニタリング,セキュリティ機能などP2Pアプリケーションの核となる基本機能を含んでいる.
P2P環境で必要とされるネットワークサービスを提供する.検索,ストレージシステム,ファイル共有,分散ファイルシステム,リソース収集と貸与サービス,認証,そしてPKIサービスなどを含んでいる.サービスは必ずしも全てのP2Pネットワークに必要であるとは限らないため,P2Pに必要不可欠な機能を提供しているJXTA Coreと区別している.
P2Pインスタントメッセージングやドキュメント,リソース共有,エンターテイメントコンテンツの管理と配信,P2P E-mailシステム,分散オークションシステムなど統合されたアプリケーションの実装を提供する.
JXTA ServicesとJXTA Applicationsの境界は厳密でない.あるユーザにとってのアプリケーションは他のユーザからサービスとして認識することもありうる.JXTAシステムは開発者のニーズに合わせた種々のサービスやアプリケーションを選ぶことができるようにモジュール化されている.
Project JXTAはPeer間の通信のために一連のXMLメッセージやプロトコルを規定している.JXTAプロトコルはFig.5に示された6つから構成されている.JXTAプロトコルを定義することで,Javaといった特定のプログラミング環境に関わらず,また下層にどんなネットワークトランスポートが用いられていても,JXTAを利用することが可能である.各プロトコルの仕様を以下に説明する.
公開されたPeerリソースを発見するためのプロトコルである.Peer,Peer Group,Pipe,サービスといったリソースは全てAdvertisementとして表現される.PDPはリソースの発見だけでなく,様々なAdvertisementを発見するためにも利用される.またPDPは発見だけでなく,Advertisementを公開する仕組みも持っている.
Peerが他のPeerの状態に関する情報(稼働時間,状態,トラフィックなど)を取得するためのプロトコルで,PIPは情報を取得するためのメッセージの集合を提供している.この情報は商用(サービスの使用方法の決定,利用者への請求書の送信など)や内部運用(モニタリング,トラフィックの再ルーティング)のために使用される可能性がある.
Peerが他のPeerに対して一般的な問い合わせ・要求の送信を可能するためのプロトコルである.PDPとPIPはPRPをもとに作られ,特定の問い合わせ・要求を提供する.PRPはアプリケーションから必要をされるかもしれないような一般的な問い合わせ・要求に使用される.
1つ以上のPeer間で仮想的な通信チャネルまたはPipeを確立するためのプロトコルである.Pipeはcreate,open/resolve(bind),close(unbind),delete,send,receiveといったオペレーションをサポートする抽象的な名前付キューとみなせる.このPipeをエンドポイントに確立するためにPBPを用いる.
Peerが他のPeer上の目的のポートまでのルート(パス)を見つけるためのプロトコルである.ルート情報はあるPeerから他のPeerに対してMessageを送信するために必要である.
PeerがPeer Group内のMessageを伝播するためのプロトコルである.RVPはPeerがサービスに接続する,Messageの伝播を制御するといったことを許可する単純なプロトコルである.RVPはPRPやPBPがMessageを伝播するために使用される.
JXTAネットワーク内での通信は3.3節で説明した構成要素を用いて通信を行っている.JXTAネットワークにおいてPeer同士がどのような過程を踏んで通信を行うかをFig.6に示す.
ファイアウォールの内側にいるPeerは,ファイアウォールの外側にいるPeerに対して直接Messageを送信することができるが,ファイアウォールの外側にいるPeerはファイアウォールの内側にいるPeerに対して直接コネクションを確立することはできない.
JXTA Peerがファイアウォールを越えてお互いに通信を行うには,以下の条件を満たす必要がある.
Fig.7はファイアウォールを経由する一般的なMessageルーティングの様子を示している.この場合,Peer AとPeer Bがメッセージを送受信したいのであるが,ファイアウォールにより直接通信することができない.そこでPeer Aがファイアウォールを越えることができるHTTPのようなプロトコルを用いて,Peer Cとのコネクションを確立する.次にPeer CがTCP/IPのようなプロトコルを用いてPeer Bとコネクションを確立する.こうしてPeer AとPeer Bとの間に仮想的なコネクションが確立される.
JXTAネットワークのような動的なP2Pネットワークは,異なるレベルでのリソースアクセスをサポートする必要がある.各Peerは他の信頼できるPeerが特定のタスクを実行することで得られる承認をもとに動作している.
セキュリティへの要求条件は以下に示す5つの項目がある.
XMLメッセージは,JXTAメッセージに対する信任状,証明書,要約,公開鍵などのメタデータを追記する機能を提供しており,上記の基本的なセキュリティをの要求条件を満たすことが可能である.メッセージの要約はメッセージがのデータが完全であることを保証したものである.
JXTAにはJXTA Shellと呼ばれるシェルの機能を提供している.JXTA ShellはJXTAプラットフォーム上に構築された重要なJXTAアプリケーションの1つであり,UNIX Shellと同様,コマンドラインのインターフェースを経由してJXTAプラットフォームへの対話的なアクセスを提供している.
大半のUNIX Shellはローカルマシンで実行するよう設計されているが,JXTA Shellはネットワーク環境で実行するよう設計されている.あるメッセージを生成するようなコマンドがPeer間でやり取りされると,リモートのPeer上である計算が行われ,結果が返答される.このようにJXTA Shellを用いることによって,コード・データの公開・検索・実行,PeerあるいはPeer Groupの発見,Pipeの作成,Messageの送受信を行うことができる.
本報告では,P2Pネットワークに必要とされる基本的な機能を持つプラットフォームを提供するJXTAの概要について述べた.JXTAの利用により,相互運用性・プラットフォームの独立・遍在性の実現を目指している.また共通のプラットフォームを整備することで,P2Pテクノロジーを利用したアプリケーション同士の非依存性も解消できると考えられる.
Copyright (C) 2005 Tomoyuki Hiroyasu, All rights reserved. Copyright (C) 2005 Mitsunori Miki, All rights reserved. Copyright (C) 2005 Hirotaka Yamazaki, All rights reserved. No part of this document may be reproduced, copied, distributed, transferred, modified, or transmitted, in any form or by any means, without the prior written permission of the authors. In no event shall the authors be liable for any damages caused in any way out of the use of this document.