P2Pを定義する
はじめに
以前P2Pという言葉を考えるという文を書いた。 今回は一歩進めて、自分なりにP2Pを定義してみたいと思う。
P2Pはクライアントサーバ(C/S)との比較で語られることが多いが、 この文章ではC/Sの一形態としてP2Pを定義する。
この記事はP2Pの定義を考えてみるの影響を受けて書かれた。
C/Sの定義
C/Sには色々な意味があることは 「P2Pという言葉を考える」で書いた。 ここでは辞書的な意味でのC/Sを採用する。
接続を受け付ける機能をサーバと呼び、 接続する機能をクライアントと呼ぶ。
ノードの定義
1つのまとまりをノードと呼ぶ。 典型的には1台のコンピュータだが、 1台のPCの中に複数のノードを作ることもできるし、 複数のPCで1つのノードを作ることもできる。
1つのノードの中にクライアントとサーバがあるものをサーバントノードと呼ぶ。 クライアントだけを持つノードをクライアントノード、 サーバだけを持つノードをサーバノードと呼ぶ。
P2Pの定義
サーバントノードを必要とするネットワークをP2Pと呼ぶ。
P2Pに当て嵌まる例
- 電子メール(SMTP)
- MTU(メールサーバ)はメールを中継する。 受け付ける機能はサーバであり、別のサーバに送る機能はクライアントである。 中継機能がなければ電子メールは成り立たない。
- 新月
- ノードの自己組織化には互いの通信が必要である。 発信側がクライアント、応答側がサーバである。 記事の中継もするが、これは電子メールと同じである。
- Skype
- スーパーノードは自己組織化をしていると思われ、 中継ノードが中継を行っていると思われる。 これらは新月と同じである。 またノード同士が直接通信して会話をすることもある。
P2Pに当て嵌まらない例
- WWW(ただしDNSを含まない)
- サーバノードとクライアントノードだけでも成立する。
まとめ
P2Pを定義した。 この定義は「1つのPCでWebサーバを動かしながら、 別のウェブサイトを見ていたとしたら、それはP2Pなのか」という頓知のような問いに 「それはP2Pではない」という判断を下せる。 またWinMXやWinnyでいうところのポート0のノードが存在しても、 そのネットワークをP2Pと呼ぶことができる。
ノードの定義に曖昧性が残るが、 実装に依ってしまうのでうまくいかない。