Peer to Peer
ピアトゥピアまたはピアツーピア(テンプレート:Lang-en-short)とは、多数の端末間で通信を行う際のアーキテクチャのひとつで、対等の者(Peer、ピア)同士が通信をすることを特徴とする通信方式、通信モデル、あるいは、通信技術の一分野を指す。P2Pと略記することが多く、以下本記事においてもP2Pとする。
なお近年、特に匿名ユーザーによるインターネット上のファイル共有を目的に、P2P技術を応用して作成されたソフトウェアが社会的に注目を浴びている。その特徴となる技術はP2P通信ネットワークのオーバーレイヤーとして別の名称が割り当てられるべきであるが、広くP2Pソフトウェアとよばれ認識されている現状があるため、とりあえずP2P共有として分離した。
また、無線通信で使われるモバイルアドホックネットワークも、P2Pの一種であるが、無線での通信可能距離を稼ぐという特有の使い方であるので、詳細な解説は別項に譲る。
目次
概要
P2Pは、ネットワークに接続されたコンピューター同士が端末装置として対等の立場、機能で直接通信するものである。P2P通信の一例としては、インターネットに接続した一般ユーザーの複数パソコン同士が互いのIPアドレスを呼び合う直接通信が挙げられる。
P2Pに対置される用語として、クライアント-サーバ方式がある。クライアント-サーバ方式では、ネットワークに接続されたコンピューターに対し、クライアントとサーバに立場、機能を分離していて、典型的には多数のクライアントに対してサーバーが一つである。クライアントはサーバーとだけ通信でき、あるクライアントが他のクライアントと通信するにはサーバーを介す必要がある。
クライアント-サーバ方式では、クライアント数が非常に多くなると、サーバおよびそれにつながる回線に負荷が集中するのに対して、Peer to Peer方式は、端末数が膨大になっても特定端末へのアクセス集中が発生しづらいという特徴があるため、ここ数年、商用的にも注目を集めており、特にIP電話や動画配信サービスなどへの応用例が増えてきている。
P2Pの端末装置
P2Pにおける通信端末は、ピア(peer)と呼ばれるが、トポロジー理論、グラフ理論などで用いる「ノード」(node:節点)という呼称を用いることも多い。また、クライアントの機能とサーバの機能を併せ持つという意味で、サーバントという呼び方をすることもある。
端末装置の種類としては、一般家庭のPCが使われることが多いが、STBや、HDDレコーダ、HDD内蔵ルーターといったものも、ピアになりうる。
応用範囲
P2P技術の応用範囲は非常に広く、P2Pデータ配信、P2P電話、P2P掲示板、P2P放送(テレビ、ラジオ)、P2Pグループウェア、P2P分散ファイルシステム、P2P-SIP[1]、P2P-DNS、P2P-仮想ネットワーク[2]、P2P地震情報、など、多くの適用例が生まれつつある。しかし、これらの応用技術は西暦2000年頃から実用化されはじめた技術で歴史的にはまだ日が浅く、成熟技術となるまでには、クリアしなければいけない様々な問題がある(後述)。
インターネットにおけるP2P
インターネットの基盤であるIPネットワークは、IPアドレスさえ分かっていればどの端末にも到達できる。つまり端末同士が相手のIPアドレスを知っていればP2P通信が可能である。つまり、インターネット上のP2P応用技術は、IPネットワークのオーバーレイ・ネットワーク(Overlay Network:以下、OLNと略記する)と見ることができる。
例えば、放送型サービスにP2Pを応用する場合は、マルチキャスト型の通信形態となるため、これを、オーバーレイマルチキャスト(Overlay Multicast: OLM)あるいは、アプリケーションレイヤマルチキャスト(Application Layer Multicast: ALM)と呼ぶことがある[3]。 後者の呼び方は、IPマルチキャストがTCP/IPのレイヤでのパケットの複製によりマルチキャストを行うのに対して、アプリケーション層でデータのコピーをしてマルチキャストを行う、という意味合いから来ている。
インターネットにおけるP2P通信のメリット、デメリット
インターネットにおけるP2P方式の通信には、以下のようなメリットとデメリットがある。
メリット
- 高スケーラビリティ
- 昨今、P2P方式が注目されている最大の要因である。理想的なP2P方式では全ての端末が等価であり、特別な機能や役割を持った端末が存在しないため、接続するユーザ数が膨大になっても特定の端末に負荷が集中しにくい(スケーラビリティが高い)。つまり、より多くの端末への配信が可能になる。一方、対照となるクライアント-サーバ方式では、クライアントの数が増えるごとに、サーバの処理能力、およびサーバにつながっているネットワーク回線に負荷が集中し、限界に達すると実用的な配信ができなくなる(スケーラビリティが低い)。特に、動画配信など、サーバから送るデータのサイズが大きい場合に、スケーラビリティは重要である。
- 低コスト
- スケーラビリティの高さから当然導かれる特長である。クライアントサーバ方式に比べて、要求されるサーバ装置性能が低くなり、通信回線も通信帯域幅の細い安価な回線で済む。このコスト差は、端末数が増えれば増えるほど顕著となる。一般的に、クライアントサーバシステムを運用する際に、一番コストがかかるのがサーバの回線費用であり、これを格段に安価にできる。
- 耐障害性の高さ
- 理想的なP2P方式では全ての端末が等価であるため、特定の端末に障害が発生しても全体への影響は発生しない。あらかじめ同じデータを共有した端末を複数用意することができれば、データを受け取る側はどれか一つとでも接続可能であればデータ受信を継続可能である。一方、クライアント-サーバ方式では、サーバがダウンすると全てのクライアントがデータ受信不可能に陥る。
デメリット
- 通信相手特定の困難性
- P2P方式では通信相手の端末の存在や接続経路を前提とすることができず、常に相手の存在とその接続経路を確認する必要がある。特に現在のインターネットの典型的な端末である各家庭のPCの多くはインターネットプロバイダーが提供するグローバルIPアドレスを使用してインターネットに接続していて、多くのプロバイダーは一般ユーザーが接続要求を出すたびに異なるグローバルIPアドレスを割り当てる。このような端末同士でのP2P通信を実現するには通信相手のIPアドレスを特定する方法を何らかの別方法で用意する必要がある。一方、クライアント-サーバ方式では、サーバーが固定のグローバルIPを取得するか、クライアントが参照可能なDNSに登録することで、クライアントは毎回同じ方法によりサーバーにアクセスできる。
- 通信経路による通信速度の制限
- P2P方式で最適な通信速度を確保するには全ての端末間の回線品質が等価である必要がある。しかし、これはインターネットでは不可能な要求であり、通信速度は端末を結ぶ中継回線の中で最も遅い回線の速度が上限となる。現在のインターネットは少数の高速な基幹ネットワークから多数の低速なサブネットワークに分岐していく構造になっていて、クライアント-サーバ方式ではサーバーを基幹ネットワークのなるべく近くに接続することで広い範囲のクライアントがなるべく高速な回線でサーバーに接続できるように設計できるが、P2P方式ではこの方法は少なくとも一般ユーザー間の通信では使えない。また、一般家庭の接続するインターネット回線は、ほとんどの場合ダウンロードよりもアップロードが遅いため、さらに制約が大きい。
P2Pアプリケーションの分類
ピア間で何を行うか、という観点で、大きく以下の3つのタイプ:
- 一対一通信型
- 放送型
- オンデマンド型
のアプリケーションに分けられる。 複数の機能を併せ持ったアプリケーションも存在する。
一対一通信型
IP電話やSkypeに代表されるような、端末間で一対一のコミュニケーションを行う使い方である。相手のIPアドレスを、電話番号やニックネームなどから見つけ出し(=IPアドレス解決と呼ぶ)、その後、ピアとピアが対等の立場で通信を行う。音声データであれば電話となり、映像データであればテレビ電話となる。インスタントメッセージやオンラインチャットもある。通常、アプリケーションの背後に特定の利用者が居ることが想定されており、その人物に対して接続を行うような使い方が多い。この種のアプリケーションのほとんどには、相手がオンラインかどうかを認識する仕掛け(プレゼンス機能)が設けられている。
このタイプのアプリケーションでは、データは通常、リアルタイムでのストリーミングでやりとりされる。
P2P-SIPでは、SIP-URIからIPアドレスを知るためにP2P技術を利用しており、従来からあるSIPサーバを不要にできる。アドレス解決以外の、接続・切断のシグナリング、音声データのストリーミングに関しては、従来からのSIPやRTP/RTCPの技術をそのまま利用している。
応用例:IP電話、Skype、MSN メッセンジャー、P2P-SIP、P2Pグループウェア。
放送型
ノード間接続を、カスケード状に多段階層化して、配信ツリーを形成することで、放送型のサービスが実現できる。 ツリーの根元のノードが、放送局となり、上流ノードから下流ノードへ、データをバケツリレーさせることで、全参加ノードに、ほぼ同時に同じデータを配信することが出来る。 これにより、リアルタイムのストリーミング中継が可能となる。
多くのP2P型放送システムでは、アドレス解決にハイブリッドP2P方式(後述)を採用しており、通常、チャンネル名でインデックスサーバに問い合わせると、「あのノードの下流につながってストリームをもらいなさい」というようにノードを紹介してくれる。 インデックスサーバの役割を各ノードに分散させる(=ピュアP2P型OLM)ことも可能ではあるが、そのような実装例はまだ発表されていない。
上流ノードが脱退したときに、ストリームが途切れるが、内部にバッファを持つことで、一定時間は再生が途絶えないようにして、その間に、別の上流ノードを探し出して、再接続を行う。再接続の処理には時間がかかるため、通常、予備の上流ノードを用意しておく。再接続先候補のノードを、効率的に準備しておくために、様々な創意工夫が考案されている(詳細は、オーバーレイマルチキャスト or アプリケーションレイヤマルチキャストを参照)。
応用例:P2P放送(映像+音声、音声のみ); (PeerCast[4]他[5] [6] [7] [8])
オンデマンド型
動画コンテンツの配信などでは、コンテンツを持っているノードがデータを送信して、コンテンツを欲しているノードが、そのデータを受信する、という一方向型の通信が行われる。言い換えると、持っている者から欲する者へ、という通信である。送信元は、持っている端末であればどれでも良く、不特定多数の中からアプリケーションまかせで選ばれる。送信元のIPアドレスは、コンテンツのタイトルなどを手がかりに、インデックスを検索して見つけ出し、コンテンツ保持ノードにデータ送信を要求することで、データ転送が開始される。
オンデマンド型のP2Pアプリケーションでは、配信効率を上げるために、コンテンツのコピー(レプリカ)を作ることが良く行われる。一度取得したコンテンツのコピーを保持して、他のノードに対して提供可能な状態にすることで、他の誰かが再度同じコンテンツをリクエストしたときに、負荷分散の効果が期待できるからである。これは特に、人気のあるコンテンツに対してのアクセス集中の緩和に効果的である。レプリカを作るアプリケーションでは、通常、レプリカをキャッシュフォルダ内に作り、古いレプリカから追い出すような実装になっていることが多い。
オンデマンド型のP2Pアプリケーションでは、データ全体を、一旦リクエストした端末までは持ってきてから利用する「ダウンロード方式」の実装がほとんどであるが、中には、動画コンテンツ先頭の一部分を持ってきた早いタイミングから再生を開始する「ストリーミング方式」の実装[9]も見受けられる。
応用例:P2Pコンテンツ配信、P2P掲示板、P2Pグループウェア、P2P分散ファイルシステム、無線のアドホックネットワーク、ゲームソフトのアップデート[10]
P2Pノードの一般的な機能
P2Pに参加するノードには、以下のような機能が必要となる。ソフトウェアで、これらの機能は実現できる。
- 参加処理
- オーバーレイネットワークに参加するためには、OLNに既に参加しているノードを知っている誰かと、通信を行う必要がある。このノードをコンタクトノードと呼ぶが、そのIPアドレスは、参加前になんらかの方法で知っておく必要がある。コンタクトノードは、常時稼働していることが望ましい。ハイブリッド型P2Pでは、インデックスサーバが、コンタクトノードの役割も果たしている。参加処理では、コンタクトノードに参加の意志を伝える。すると、すでに参加している別のノードのIPアドレス情報が返送されるので、OLN上の他の誰かと通信ができるようになる。
- 脱退処理
- 行儀良く「抜けます」と言ってから抜ける場合と、何も言わずに抜ける場合がある。いきなり電源を切ったり、LANケーブルを抜いたりすると、後者となるので、これを想定した設計とする場合がほとんどである。しかし、脱退通知を行ってから抜けた方が、システムは安定するので、通知が可能な場合は脱退通知を行うように実装することが望ましい。ハイブリッドP2Pでは、インデックスサーバに対して、脱退通知を行う。ピュアP2Pでは、自分が知っている他のノードに対して、脱退通知を行う。脱退通知を行わない場合(行えない場合)は、通常、周りのノードとKeep-Aliveメッセージを定期的に交換しておくという手法を採る。これがなくなることを周りのノードが判断することで、脱退が認識される。
- 冗長化
- 通信相手がいきなり居なくなることを想定して、通信相手の予備候補を常に用意しておくことが重要になる。
- 例えば、フラッディング方式の場合は、自分の知っているノードすべてにメッセージを重複して投げており、どこかで通信エラーが起きても、複数のメッセージのうちのどれかが通れば、後の処理が続くようになっている。DHTの場合は、メッセージのルーティング経路が複数あるように設計されている。コンテンツ配信の場合は、希望のコンテンツのレプリカを持つノードが常に複数存在するように、キャッシュフォルダ内にレプリカが配置されるように設計する。OLM/ALMの場合は、上流接続を複数持たせてメッシュ状のネットワークを構成しておくような設計が、多く見受けられる。
- このように、P2Pの方式やアプリケーションごとに、様々な冗長化が工夫されている。
- データの取得と提供(転送)
- 自分が他ノードからデータを受けると同時に、他のノードに対してデータを提供する、という機能を持たせることが重要である。サーバにもなりクライアントにもなるということで、サーバント機能とも呼ばれる。
- 同時に複数の端末へデータを提供する機能を実装すると、システム全体でのデータ利用効率が向上する。この機能は、OLMでは必須となる。複数の端末から同時並行でデータを取得する機能を実装する(複数の端末から少しずつ部分データをもらって後で結合する)と、データ利用効率の向上、応答速度の向上、冗長性の向上などが期待できる。
- その他
- 必要に応じて、以下の機能を実装する。
- データの公開機能
- 「私はこういうデータを持っています」と、P2P網に対して宣言する。オンデマンド型のアプリケーションでレプリカをキャッシュさせる場合には、必須機能となる。
- NAT越え機能
- 一般家庭でのブロードバンドルータを介して利用する場合は、NATにポートフォワード設定を行う必要があるが、これをP2Pアプリケーションが自動的に行うようにする。最近のほとんどのルータには、UPnP機能が実装されているため、これを用いて、P2Pアプリがルータにポートフォワードの指示を出すことができる。
- データの暗号化、改竄防止機能
- 一般ユーザのPC上で、データの改竄が行われる恐れがあるため、これを防止する。
- データのリモート削除機能
- 商用システムの場合、著作権管理の点で、管理者側からリモートでデータ削除を行いたい場合がある。
P2Pに対する誤解と技術的課題
テンプレート:出典の明記 P2Pの技術は、実用化されてまだ間がないため、成熟した技術として使われるためには、いくつかの課題が残されている。 また、これまでのP2P技術は、ファイル共有ソフトによって注目されてきた経緯があり、P2Pを使っていると聞くだけで問題ソフトだと見るような誤解や先入観が持たれているが、以下に示すように、多くの誤解はアプリケーションやP2Pソフトの実装上の問題であり、解決策が見えてきている。P2P技術自体は、うまく使えば非常に有用な技術である。
- 意図しない情報の流出・混入の危険性 (誤解1)
- ファイル共有ソフトを初めとするオンデマンド型アプリケーションには、自分のPC上のデータを公開できる機能が付いている物があるが、これには、ユーザが意図しないデータ(極秘情報やプライベートデータなど)が流出する恐れがある。特に、WinnyやShareでは、ウイルスによりこの機能が利用されて被害が広がり、大きな社会問題となった。
- 対策としては、管理者の検閲を経てからの公開や、ウイルスチェックプログラムの利用徹底、利用者にアップロードファイルの確認を求める実装、などが有効だが、商用のP2Pシステムでは、元を絶つという意味で、ユーザの手元データの公開機能自体を実装せずに、正規コンテンツは管理者だけしか投入できない仕組みとする方向に動いている。
- 共有データの削除が困難 (誤解2)
- Winny利用のウイルス問題で有名になったが、一旦P2P網に公開されると、削除するのが難しいという問題がある。しかし、これは単に、Winnyに共有データを削除する機能が実装されていなかったためであり、最近の商用のP2Pシステムでは、管理者によるリモートでのインデックス削除とデータレプリカ削除機能が実装されている。
- データの改竄の危険性 (誤解3)
- オンデマンド型アプリケーションでは、データのコピー(レプリカ)をキャッシュフォルダ内に持つケースが多いが、一般ユーザが、いたずら目的で、このファイルを改竄する恐れがある。これへの対策としては、ファイルにハッシュコードや電子署名を付けることで、改竄の検出ができる。改竄が検知されたファイルは、P2Pソフトがすみやかに廃棄することで、不正ファイルの伝播を防止できる。
- ISPの帯域制限
- ファイル共有ソフトの利用の広がりにより、インターネットのバックボーンは、トラフィックのほとんどがファイル共有ソフトの物で食いつぶされる、という事態が起こっている。これに対して、多くのISPは、一般ユーザの利用帯域を制限するという対応に出ている。あまりに多くのトラフィックを使うユーザには、利用制限をかけようという動きである[11]。P2Pのフォーマルな利用に当たっても、この制限は課される場合があるため、P2Pアプリケーションの利用に制限が出る恐れがある。対策としては、ISP側が、WinnyやShareなどの問題があるソフトに関してのみ帯域制限をかけるようにすること、あるいは、ユーザの料金体系を従量制にすること、などが考えられる。
- NAT越え問題
- ほとんどの一般家庭では、インターネットへの接続にブロードバンドルータが使われているが、P2Pソフトが外部からのIPパケットに対して接続を可能にするためには、ルータの中のNATに、ポートフォワードの設定を施す必要がある。これを通称、NAT越えと呼ぶ。ファイル共有ソフトでは「ポート開放」と呼ぶことも多い。ユーザが手動で設定する事も可能ではあるが、専門知識が必要になることから、P2Pソフトから自動的に設定を行うようにすることが望まれる。これには、UPnP、STUN、UDPホールパンチングなどの利用が有効であるが、古いルータの中には対策が難しいものもあり、100%のNAT越え成功率を達成するのは困難である。
- また、企業内のLANで、外部とのP2Pを行う場合は、セキュリティレベルの高いファイアーウォールを越える必要があるが、こちらの場合は、P2Pソフトによる自動対応は非常に難しく、手動でのポートフォワード設定に頼るしかないのが現状である。
- 将来的には、IPv6が普及して、各端末に個別のグローバルIPアドレスが付与されるので、一般家庭、企業内LANともに、NAT越え・ファイヤーウォール越えが不要になるのでは、という見方があるが、セキュリティ的な見地から、ファイアーウォールとしてのIPパケットフィルタは何らかの形で設けられるであろうことから、これをどのように越えるかが課題である。これを自動化することは、技術的には可能であるが、セキュリティの確保と利便性の向上は常にトレードオフの関係になり、ちょうど良い頃合いを見定めるのに、しばらく時間がかかりそうである。
- また、IPv4アドレスの枯渇問題への対応として、ISPにラージスケールNATを設置するという計画が進行中である。これは各ユーザに対して、プライベートIPアドレスを配布するという物であるが、P2Pに取っては大きな問題であり、すべての端末間で自由にピア接続ができるようになるかどうかは、注視が必要である。
- キャッシュの有効利用
- オンデマンドタイプのP2Pアプリケーションでは、ユーザの端末内にキャッシュを多く持たせれば持たせるほど、配信効率が向上する(具体的には、特定ノードへの集中が起きない、データ取得に時間がかからない、など)。しかし、ユーザPCの限りある資源であるメモリーやHDD容量をどれだけ確保させてもらえるか、とのトレードオフとなり、ユーザの理解を求めながらユーザがどれぐらいの性能を欲するかを見極めるという、微妙なバランスを模索していく必要がある。
- ネットワークのコストが最適な端末を選ぶ技術(P4P)[12][13]
- データを持っているノードが複数ある時、どのノードを選ぶと、ISPや通信キャリアに取って都合がよいか、インターネットのバックボーンに負担をかけないか、という観点での技術開発が行われている。
- 例えば、北海道-札幌のユーザが何かのデータをリクエストして、データを持っているノードが、鹿児島、北海道-旭川、東京、に見つかったとき、旭川のノードを選ぶのが、北海道-東京間の回線を使わなくて済むので、多くの場合好ましいだろう。しかし、通信キャリアの立場から見ると、実は東京への回線のほうが帯域に余裕があって、こちらを使って欲しいという状況もあり得る。
- このような通信インフラのコスト構造の実体に合わせたノード選択手法の必要性が、クローズアップされてきている(P4P=Proactive network Provider Participation for P2P)。
脚注
関連項目
- Antinny
- BitTorrent
- Cabos
- Freenet
- Gnutella
- LimeWire
- Perfect Dark
- Profes
- Real Time Media Flow Protocol
- Share
- Skype
- StealthNet
- Tor
- WinMX
- Winny
- 新月_(掲示板)
- アドホックネットワーク
- オーバーレイ・ネットワーク
- クライアントサーバモデル
- ファイル共有ソフト
- 分散コンピューティング
外部リンク
研究資料
- Chord lookup service
- P2P News
- PAST distributed storage utility
- CoopNet cooperative content distribution system
- More peer-to-peer research resources
- International workshop on Peer-To-Peer Systems
- P2Pとは何か?~基礎から研究紹介まで~