« [P2P]P2Pゲームの可能性について | トップページ | »

2004.11.19

[P2P]DHT-VoIPとSIPその1

さて、第1回P2P勉強会において、DHTを使うとSkypeライクなVoIPシステムが可能である事を簡単に話した。
(このシステムを今後DHT-VoIPと呼ぶ事にしよう)
第2回勉強会では第1回では話せなかった内容や、その後思いついた事を付加して話すつもりである。

その付加する内容として第1に挙げられるのがDHTとSIPとの連携である。既にご存知の方も多いとは思うが、現在のVoIPで主流のセッション制御プロトコルはSIPであり、IMやm2m-xにも使われている。そう考えるとDHT-VoIP、いやDHTを使ったP2PシステムにSIPを取り入れるのは非常に自然である。

このシリーズではSIPを取り込んでDHT-VoIPを形成する上での考察した点などを書いていきたい。

ここでDHT-VoIPについて簡単に振り返ろう。
ノードにはNode_IDが振られている。また利用者はニックネームすなわちnameが付けられているとする。
基本的にはNode_ID=hash(name)なるノードに各利用の情報は登録されている。この登録されている情報とは利用者の名前、現在使われている利用者のIPアドレス等である。

まず、利用者がDHT-VoIPに参加する際、どうするべきか?それはNode_ID=hash(name)となるノードに自分の情報を登録しなければならない。

SIPでは登録シーケンスとしては登録サーバに情報を登録して、実際にはロケーションサーバに情報を蓄積するということになる。

DHTに置き換えると登録サーバはDHT-VoIPに既に参加して自分が知っているノードの内、これから自分と接続しようとしているノードNode_Reg、ロケーションサーバNode_LocはNode_ID=hash(name)とするノードである。

通信は
ユーザ⇔Node_Reg⇔Node_Loc となる。なお、情報を登録するときユーザはREGISTERリクエストを登録サーバに送ります。

ところで、DHTの場合ノードの離脱・参加が可能な点が普通のシステムと異なる。故にNode_Regがいつも存在するとは限らない。この場合、どうすればよいのだろうか?
いろいろと方法は考えられる。
1)Node_RegのNode_IDに一番近いNode_IDを有するノードを登録サーバとする
2)自分がDHTでルーティング情報をもらった場合、Node_Locへの最短ルートとなるネクストホップを登録サーバとする
3)Node_Loc自体を登録サーバとする。

1)はなんだか面倒そうだが、DHTの仕組みにより、Node_Regが離脱してもそのセッション情報が一番近いNode_IDに引き継がれる事を利用したものである。これで引き継がれたノードはユーザの登録ノードであることを既に知っている。
2)は1)より自然かもしれない。実装するなら2)の方がラクかもしれない。
3)は一番実装がラク。ルーティング自体はDHTをミドルウェアにして、アプリからは隠蔽化することが考えられる。

本日はSIPでの情報の登録をまとめてみた。重要なことは常にロケーションサーバがNode_ID=hash(name)であること。

SIPについてはIDGジャパンから出ている「SIP教科書」を見ると良いでしょう。

|

« [P2P]P2Pゲームの可能性について | トップページ | »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/18781/2001659

この記事へのトラックバック一覧です: [P2P]DHT-VoIPとSIPその1:

« [P2P]P2Pゲームの可能性について | トップページ | »