[P2P]サーバレスでVoIPを実現する(メモ)
SkypeというVoIPソフトがある。既にユーザ数を多く獲得している評判の高いソフトである。その理由の一つにファイアウォールがあっても設定なしに通話ができる点が挙げられる。
ところで、Skypeシステムには実はサーバがある。詳しくは下記のページを見て欲しい。またファイアウォール越えはUDP hole punchingでなく、グローバルアドレスノード(スーパーノード)を介するという方法であった。
P2Pソフト「Skype」で新しいタイプの通信事業者を目指す──Skype CEO Niklas Zennstrom氏に聞く
DHT(分散ハッシュ)において、ファイアウォール越えを行う方法は既に提案したのでここでは書かない。これはグローバルノードを介しても、UDP hole punching でもどちらも対応している。
そこで、今回はDHTを使いながらサーバレスでVoIPを構成することを考えてみよう。
まず、準備として呼(インターネット用語だとセッションが適切かな。)の制御としてSIPを使う。
SIPについては以下のページを見ると良いでしょう。
SIP入門
ではその手順を考えてみよう。
1)自分のプロフィールなどのメタ情報はユーザの名前をnameとしてNode_A=Node_ID(hash(name))に格納。hash()はハッシュ関数を表わす。自分のノードをMy_Nodeとすると、My_Nodeは定期的にNode_Aに通信を行う事により、自分のノード状態を記憶させておく。(このため、例えば通話外の時間に自分のIPアドレス等が変化してもその後の通話には影響が出ない。)
ここでもうわかってしまう方も多いと思うが、Node_AがMy_nodeのロケーションサーバの代替となっている。
2)My_nodeは通話先のYour_Nodeと接続したい。Node_B=Node_ID(hash(your_name))とする。
My_nodeは相手名前your_nameを知っているからhash(your_name)からNode_Bと接続する。Node_BはMy_nodeにYour_nodeのIPを返す。
3)My_nodeはYour_nodeにセッションを張るため、SIPで通信。ここからMy_nodeとYour_nodeはP2P状態。
(本来はここで、My_nodeyとYour_nodeでNAT越えをすための制御をしなければならないが、ここでは省略。先程リンクした先日私が書いたBlogを見て下さい。)
つまり、SIPプロキシが無い状態でのSIP通信と同等と考えて欲しい。(=あるノードが相手のIPアドレスを知っている状態)
4)SIPのネゴシエーションが成立し、VoIP通信開始
5)VoIPが終了し、SIPのセッションが再開。終了をお互いにアナウンス。
これでサーバレスでVoIPが実現できた。
ただ、これだとSIPの機能を充分使ってない。例えば、Your_nodeのIPアドレスを知る場合、SIPであればリダイレクトサーバの概念を取り入れれば良いはずだ。ということで、もっとSIPで記述できる範囲は多いと思われるので、その辺をもっとすっきりさせてみたい。あと、レジストラ(ノードの登録)の部分についてもSIPで書けるはずだ。
こうなると、DHT上でのアプリケーションにおいて互いのセッション、接続の要求・終了についてSIPを使うと非常にスマートになることがわかる。非常に面白い研究だと思うので、多くの人がチャレンジして欲しい。
もう少し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)
この記事へのコメントは終了しました。
コメント