ブロックチェーンの関連技術(P2P)

出典:経済産業省
ほかの技術知識

 ブロックチェーン/分散型台帳技術のネットワーク構成として、当たり前のように「P2P(Peer to Peer)」という単語が出てくるが、それが何かあんまり理解できていなかったので調べたときのメモ。

ブロックチェーンの4つの構成要素
1.ピア・ツー・ピア(P2P)ネットワーク
2.コンセンサス・アルゴリズム(PoW、PoS、PDFTなど)
3.電子署名・ハッシュ関数
4.スマートコントラクト

P2Pとは?

 LINE・IP電話・ストリーミングなど、身近なところで使われているネットワーク技術であり、十数年くらい前にはWinnyで話題になった。まず、いろいろな定義を並べてみる。

NPO法人ブロードバンドアソシエーションの資料

ピュアP2P(Wikipedia)
  • P2Pとは、特定の管理主体が存在するクライアント・サーバ型ではなく、各コンピュータ(ノード)が対等に直接通信し、ネットワークを形成する方式
  • インターネットの上に仮想的にネットワークを作るオーバレイネットワークの一種で、参加者の役割分担が対称的(互いに交換可能) であるものを言う。

Wikipedia

 複数の端末間で通信を行う際のアーキテクチャのひとつで、対等の者(Peer、ピア)同士が通信をすることを特徴とする通信方式、通信モデル、あるいは通信技術の一分野を指す。

参考:ネットワークの種類

 ネットワークの作り方には、大まかに言って集中、分権、分散の 3 つの考え方がある。P2P では、このうち、分散の考え方でオーバレイネットワークを作る。

  • 集中:ひとつの web サーバにすべてのブラウザがアクセスする web アプリケーションなど
  • 分権:ドメイン毎にメールサーバが立てられ、個々のメーラ-がそれぞれのドメインのメールサーバにアクセスするメールシステム

P2Pの優位性

 自律性と役割分担の対称性を重んじるP2Pネットワークはいろいろ便利(参考:ブロードバンドアソシエーションの資料)

資源の効率的活用

 役割が固定的ではないので、休眠している CPU、メモリ、ディスク領域などの計算機資源やネットワーク帯域を、状況に応じて借用することで、効率的に活用できる。

耐故障性

 役割分担の対称性を利用し、サービスを複製しておくことで、障害が起こったときにその発生を隠すことができる。また、障害の起こったサブシステムの役割を、システムの残りの部分が担うことで、一部が壊れてもそのままシステムが動き続けられる。

スケーラビリティ

 ある役割を分担する負荷を、参加者が増えるにつれて分散させていくことで、システムが大規模になっても動き続けることができる。

創発性

 新しいシステムを開始する上でも役割に制限がないため、サービスの提供に必要なネットワークを、誰もが自律的に組み上げることができる。

P2Pの分類

以下、Wikipediaを参考に。

アプリケーションで分類

「ピア間で何を行うか」という観点で、大きく4つのタイプに分かれる

1.一対一通信型

 IP電話、LINE電話やSkypeに代表されるような、端末間で一対一のコミュニケーションを行う使い方である。相手のIPアドレスを、電話番号やニックネームなどから見つけ出し(=IPアドレス解決と呼ぶ)、その後、ピアとピアが対等の立場で通信を行う。音声データであれば電話となり、映像データであればテレビ電話となる

2.放送型

 ノード間接続を、カスケード状に多段階層化して、配信ツリーを形成することで、放送型のサービスが実現できる。ツリーの根元のノードが、放送局となり、上流ノードから下流ノードへ、データをバケツリレーさせることで、全参加ノードに、ほぼ同時に同じデータを配信することが出来る。これにより、リアルタイムのストリーミング中継が可能となる。

3.オンデマンド型

  動画コンテンツの配信などでは、コンテンツを欲するノードが、当該コンテンツを持っているノードを探し出して、そこへデータを要求することで、保持ノードがそれに応じてデータを送信する

4.分散型データ管理

 ビットコイン、Ripple (支払いシステム)などでは、通貨の取引履歴情報を、各ノードで分散して持つことによって、通常はサーバで管理する台帳データの不正な改竄を防ぐことができるので、P2Pを利用している。これにより自分のノードの台帳データを改ざんしたとしても、他の多数のノードが正しいデータを保持していることにより、比較した際に改竄を検知することができる。

インデックス情報の持ち方で分類

 ネットワーク内で特定のデータの所在を検索するためは、データの属性キーと場所の対応表(インデックス)を持っている必要があるが、これをサーバに集中して持たせる場合と、各ノードに分散して持たせる場合と、特定の選ばれたノードに分散して持たせる場合、の3種類が存在する。

1.ピュアP2P

 一切の処理をコンピューター同士が対等に通信を行うのが特徴である。インデックス情報は、各ノードが少しずつ分散して持ち合う。 自分の知っているノードに、「データを持っているのは誰ですか?」というメッセージを投げると、そのノードが知っていれば回答が返り、知らなければ又聞きをしてくれる(メッセージを転送する)仕組みになっている。インデックスが膨大になっても破綻しないため、スケーラビリティが高い。メッセージ転送の方式により、非構造化タイプ(手あたり次第に問い合わせる)と構造化タイプ(範囲をある程度限定して問い合わせる)の2つに分類できる。

2.ハイブリッドP2P

 欲しい情報となるキーファイルをサーバーに伝え、実際のデータはノード同士でやりとりを行う仕組みである。インデックス情報を、中央のインデックスサーバで一括して管理する。新しいデータを保持したノードは、自分が持っていることを、インデックスサーバに申告しておく。データを欲するノードが、「このキーに対応する相手を教えて下さい」とインデックスサーバに問い合わせると、対応する相手のIPアドレスを教えてくれる。耐障害性の点でピュアP2Pに劣る。

ハイブリッドP2Pの仕組み(図はBitTorrentのもの)。 欲しい情報となるキーファイルをサーバーに伝え、実際のデータはノード同士でやりとりを行う仕組み By Tosaka投稿者自身による作品, CC 表示-継承 3.0, Link

3.スーパーノード型P2P

 インデックス情報は、特定の選ばれたノード(スーパーノード)が分担して持つ。スーパーノードには、できるだけ安定な端末(ずっと電源が入っていて、通信回線も安定していて、帯域幅も太いようなノード)が選ばれる。スーパーノードは、一般のエンドユーザの端末から能力に応じて選ばれるが、サービス提供者側が用意した端末であることも多い。