[P2P]分散ハッシュによるP2PインスタントメッセージとP2Pメール
久しぶりに朝にBLOGをつけてみます。
さて、HPで分散ハッシュの原理を取り上げたので、その応用を近日中に何個が提案していきたい。
ちなみに以前、分散ハッシュによるP2P WEB匿名プロキシも書いているので、そちらもチェックして下さい。
まずはP2Pインスタントメッセージから説明します。
分散ハッシュでは一般にノードにユニークなNode_IDを振り、あるコンテンツ名Aにおいて、そのメタデータ(属性、IPアドレス等)をNode_ID=hash(A)となるノードに格納するものでした。hash()はハッシュ関数を表わします。
さて、インスタントメッセージを分散ハッシュで行うにはどのようにすればよいのでしょうか?原理は非常にシンプルです。自分のニックネームをnameとすれば、Node_ID=hash(name)となるノードにメタデータ(自分のプロフィール、ステータス、IPアドレス等)を書き込みます。nameという人と通信するには、Node_ID=hash(name)となるノードを分散ハッシュのアルゴリズムで検索し、そのノードからnameであるノードのIPアドレスを教えてもらえば良いのです。
注意しなければいけないのは、メタデータのステータス機能です。これは自分が今端末いるかどうか等状態を他人が知る事ができる機能です。これについては、各ノードがNode_ID=hasn(name)となるノードに定期的に自分のステータス情報を送る事で解決します。こうすれば、サーバレスでも通常と同じようなインスタントメッセージ機能を具備することができます。
ではもう一つのP2Pメール機能についても説明しましょう。
メールがインスタントメッセージと違う点として、相手がネットワークから離脱してもメールをだれかが蓄積しなければならない点が挙げられます。
仕組み自体はメールもインスタントメッセージとほぼ同じ原理で実現可能です。すなわち、Node_ID=hash(name)に対して、自分のメタデータを登録します。nameにメールを送りたい人はNode_ID=hash(name)となるノードに対して通信を行い、メールを送ります。このノードNode_ID=hash(name)はメールを蓄積しています。あとはNode_ID=hash(name)がニックネームがnameノードとネットワークに繋がった場合にメールをnameノードにpushすればよいことになります。(もちろんpullでも可)
ただし、このままではNode_ID=hash(name)がネットワークから離脱するとname宛てのメールがなくなってしまいます。これを解決する手段として、Node_ID=hash(name)となるノードは、直接ルーティングしているノード(CANで言うと、ハッシュ空間での隣接ノード)へメールをレプリケーション(複製)することが考えられます。
また、ノードがSMTPサーバ+POPサーバになるわけですが、このままでは他人のメールが丸見え状態であり、メールを成りすまして取られてしまう可能性があります。これを防止する手段としてPGP的な発想が有効であると考えています。
次回は分散ハッシュによるP2P-CDNについて説明したいと考えています。
「P2P」カテゴリの記事
- [P2P]Websocketでブラウザ間P2P通信は実現できるか?(2011.10.30)
- TwitterをP2Pで実現する方法をもう少し考えてみる(2010.05.03)
- オフィスツアー(ビットメディア)を振り返る(2009.10.25)
- [開催日変更]オフィスツアー(株式会社ビットメディア)参加者募集のご案内(2009.08.14)
- [NAT]NAT越え入門1-NATとは何か?(2009.04.11)

Comments