1.タイトル: みんなで作ろうSIPによるVoIPサービス 2.記録者: 法林浩之(インターネット総合研究所) 3.発表者: 波多浩昭(NTTPC Communications,Inc.) 4.時間: 2003年7月25日(金) 15:20-16:00 発表: 15:20-15:50 質疑応答: 15:50-16:00 5.発表の焦点、論点、議題 SIPは技術的にも平易なプロトコルであり、またサービスもすでに始まって いるが、実際にSIPに触れているエンジニアは少ない。そこで今回の発表では、 発表者が安価な機材を用いて自作したSIPベースのVoIPシステムを紹介する。 このシステムのデモンストレーションを通じてSIPの概要を知ってもらうとと もに、より多くのエンジニアにSIPへの関心を持たせる契機を与えるものである。 6.発表の流れ ◎はじめに ・自己紹介 前々回のJANOGで発表したときは、微分方程式を持ち出したらみんな静かに なってしまった:-)。今回は見た目にわかりやすい発表をしたい。 ・発表内容の一覧 - SIPのプロトコル概要を説明 - デモ1: プレゼンス、インスタントメッセージ、VoIP電話について - (時間があれば)デモ2: ネットワーク不良時の音声品質への影響について ◎SIPの概要 ・SIPの復習 - SIPは一種の呼制御プロトコル、すなわち「誰々とお話ししたいんだけ ど」を作るプロトコルである。VoIPとは基本的に関係ない。 - SIPはメソッドとレスポンスで構成される。話したい相手に対してリク エストのメソッドを送り、レスポンスコード200が返ってきたらOK。 その後、音声通話であれば音声の乗ったUDPパケットを相互に送りあう ことになる。(余談: プロトコルに関係なくレスポンスコード200はたい ていOKの意で使われる) - 話し相手を示すのがSIP URL。必ずしも電話番号でなくてよい。 ・SIPメッセージ - SIPのメッセージはプレーンテキストなので、読める。ここではINVITE メソッドによるリクエストとレスポンスの例を紹介。 - SIPメッセージは以下の構成になっている。 ヘッダ: SIPのRFCで規定 空行(ヘッダ/ボディの区切り) ボディ: SDPのRFCで規定 - ポート番号は、デフォルトでは5060を使用。 - 代表的なSIPヘッダもいくつか紹介。メールでも使われているものが多 いが、もちろんSIPに特有なものもある(Via, Contactなど)。 ・SIPサーバを使った通信 - 相手のSIP URLはわかっているがIPアドレスがわからないときや、1対1 の接続ではつまらないとき:-)にSIPサーバが登場する。 - 通信手順は以下の通り。 (1) SIP端末Eriが自分のIPアドレスとポート番号をSIPサーバに登録。 登録にはREGISTERメソッドを使用。 (2) SIPサーバはEriの情報をデータベースに登録。 (3) 別の端末NatsumiがEriを呼ぶときはSIPサーバにINVITEを投げる。 SIPサーバからの返事にViaヘッダがついていて、そこにEriのア ドレスが書いてあり、以後のパケットの投げ先がわかる。 - SIPの代表的なシーケンス例も紹介(音声通話、インスタントメッセージ、 プレゼンス機能を例に)。プレゼンスではNOTIFYにより通知が行われる。 ◎デモその1 ・はじめに - MSNメッセンジャーがSIP対応だというので、SIPサーバを作って通信さ せてみようと思い、実装した。 - SIPサーバは以下の3つのモジュールから構成される。 1. SIPメッセージ分析 2. 状態遷移管理: 受け取った入力から、誰に何を返すかを決定 3. データベース: 誰が通話中かなどの情報を保持 ・プレゼンス機能のデモ - MSNメッセンジャーの設定 * 「設定」から「リアルタイム通信サービス」を選び、SIP URLを書く * 「詳細設定」にSIPサーバを書く - SIPサーバの準備 * 実体はOpenBlockSS/Linux * リモートログインし、リクエストとレスポンスのログが表示され るように設定 - もう1台のPCをサインインさせると、NOTIFYメッセージがログに表示さ れる ・通話のデモ - IP電話機の準備 * 台湾の知り合いから譲られた電話端末を使用。ケーブルがRJ45に なっている。 * DHCPクライアントの機能を持っているので、接続するとIPアドレ スが液晶画面に表示される。 * Webサーバ機能を持っているので、PCからブラウザで設定できる。 * 設定するとREGISTERメッセージがSIPサーバに送られる。 - IP電話機から1003番(MSNメッセンジャーを登録してある)を呼び出すと、 SIPサーバ経由で接続が確立される - 音声の流れ 電話機(音声からパケットに)→Hub→PC→MSNメッセンジャーで音声に →PCのスピーカー→会場のPA→聴衆の耳 - 端末によって、SIPアドレスにおける@の後がIPアドレスでもつながるも のとダメなものがある * つまり、片方向しかつながらない場合がある * 端末によってかなり癖がある ・ルーティング - 説明のみでデモは省略。 - SIPプロキシーを置くことにより、ドメインを超えた接続が可能になる。 (資料15ページ上図) - しかしこれだけではどこで通話が終わったかわからないので課金に問題 が出る。そこで以下の2つの対策を取っている。(資料15ページ下図) * リクエストの処理結果を記録するためにViaヘッダを使用し、それ を参照することによりレスポンスがSIPプロキシーを通過できるよ うにする。 * 通話の終了を記録して課金データとするために、Record-Routeヘッ ダとRouteヘッダを使って、BYEリクエストがSIPプロキシーを通過 するようにする。 ◎デモその2 ・PCとHubの間に、遅延や品質低下を再現するネットワークシミュレータ(発表 者の自作)を置き、回線品質の音声への影響をシミュレーションする。 ・ネットワークシミュレータ概要 - 実体はOpenBlockSS/Linux - promiscousモードで動かすことにより、全パケット受信する。 - 基本的には、受け取ったパケットはすべてそのまま右から左に流す。 - 投げるときに一瞬待つ動作を入れることにより、遅延を再現。 - 一定の確率でパケットを捨てることにより、品質低下を再現。 - 今回のシミュレータの設定 * 遅延: 片道500ms * パケットドロップ: 往復とも20% ・通話のデモ - 実際に通話を聴いてみたところ、発表者の声と、遅延して届いた受話器 からの声が両方聴こえて、非常にログが取りにくかった:-)。 - ランダムにパケットロスが起きると、受話器から聴こえる声が風邪を引 いて枯れたような感じになるのが特徴。 - どれぐらいの遅延/ロスならどれぐらいの品質になるか、自分達のサービ スするネットワークでシミュレーションするとよいだろう。 ◎おわりに ・自作した機器/ソフトウェア/ドキュメントを公開しているので、ぜひ使って みて欲しい。なお、MSNメッセンジャーは4.6, 4.7を使うこと。ごく最近の バージョンはSIP対応でないので要注意。 ・実際にSIPを使っているエンジニアはまだまだ少数だと思う。実際に自分の 手を動かして体験し、サービスへの適用を考えて欲しい。 ◎質疑応答 ・司会者 波多さん、いっこく堂みたいでしたね:-)。 ・田中さん(フュージョン) 実際にSIPサーバを運用している。商用サービスにおける品質低下はどうなっ ているかよく聞かれるが、波多さんのシミュレーションの通りになる。回線 の足回りの状況に影響されるようだ。決して安いから品質が悪いわけではな い:-)。本発表の内容を周囲に知らせたい。 ・藤崎さん(NTT) 通話デモで、電話機で1003番を指定するとつながったが、これは対応を登録 してあるのか? (波多さん) その通り。押した番号が@の前につき、後ろは自動的にドメイン名がつくよ うになっている。 ・菊池さん(インターネットマルチフィード) 今のデモを組み合わせてENUMで遊べるか? (波多さん) ENUMどころかDNSにも対応していない。まだ認証の仕組みさえ入っていない。 関心のある方は、ぜひ実装して欲しい。 7.まとめ SIPのプロトコル概要の解説と、発表者の自作によるSIPサーバとPCやIP電話 機を使ったデモが行われた。特にデモは、SIPの主な機能を実際に見せるもの と、IP電話における品質低下をシミュレーションするものの2つが実施された。 8.所感 一般に、物を持ってきて実演して見せるというのは聴衆に与えるインパクト が強く、本発表もその点だけですでに聴衆の関心を引きつける要素を持ってい た。しかし本発表は実演だけが良かったわけではなく、前半に行われたSIPの 解説もわかりやすいもので聴衆の理解を助けていた。そして何よりも、SIPや IP電話を自分の手を動かして体験し、そこからサービスを考えて欲しいという 発表者の熱意が感じられたのが本発表の一番良い点であったと思う。