[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教科書」を見ると良いでしょう。
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- iPhoneのスクリーンショットを自動的にメールに投稿するテクニック[IFTTT](2014.11.23)
- WebRTC研究会開催のお知らせ(2014年12月開催予定)(2014.08.24)
- 「Gunosyオフィスツアー」を振り返る〜世界一のニュースアプリを目指すために(2014.06.01)
- Gunosyオフィスツアーの参加者募集を開始しました!(5月9日[金]開催)(2014.04.29)
- 第4回Twitter研究会(5/18[土])の講演スケジュール(2013.05.10)
この記事へのコメントは終了しました。
コメント