NGN 時代の重要プロトコル Session Initiation Protocol() 概要資料 2008 年 3 月 31 日初版 日本電気株式会社 第二システムソフトウェア事業部
目次 とは は双方向のプロトコル URIの書き方 のトランスポートプロトコル のメッセージ構造 のリクエストメソッドとレスポンスコード SDP ダイアログ セッション メディア トランザクション ネットワークの構成 (サーバなし) ネットワークの構成 (レジストラサーバ) ネットワークの構成 (リダイレクトサーバ) ネットワークの構成 (プロキシサーバ) プロキシ経由のメッセージの流れ1 プロキシ経由のメッセージの流れ2 プロキシサーバの種類 タイマ のアドレス解決 参考文献 2
とは は IP ネットワーク上でマルチメディアセッションを開始 / 変更 / 終了するためのアプリケーション層のシグナリングプロトコル できること 保留 転送 会議 コールウェイティング ( キャッチホン ) などのさまざまな電話機能 相手の現在の在席状態 ( プレゼンス ) を把握可能 インスタントメッセージのやり取りをリアルタイムに実現 特徴 シンプルなプロトコル構造 HTTP 1.1 ライクなテキストのメッセージ メディアに依存しない リクエスト レスポンス型で双方向 (Push 型を実現 ) 普及状況 多くの製品が に対応 IP 電話機 携帯電話 (FOMA N902iL など ) インスタントメッセンジャー (Windows Messenger など ) ソフトフォン (NEC DtermSP30, フリーソフト X-Lite など ) アプリケーション層 トランスポート層 ネットワーク層 NGN(Next Generation Network) では が呼制御プロトコルとして利用される 関連規約の標準化が進んでいる 映像 音声アプリ 映像 音声コーデック RTP UDP IP RTCP TCP に関係するプロトコル 呼 端末制御 TLS 参考文献 [003] より SDP SCTP 3
は双方向のプロトコル ネットワークは ユーザエージェント (UA) と サーバで構成される UA は簡単には 端末のこと UA は以下の機能を持つ ユーザエージェントクライアント (UAC) リクエストを送信する ユーザエージェントサーバ (UAS) レスポンスを返す A Aさんから電話を掛ける UAC UAS 話したい ユーザ A いいですよ ユーザ B UAS 会話が終了 さようなら B Bさんが電話を切る UAC ユーザ A はい さようなら ユーザ B は双方向プロトコルであり UA は UAC,UAS の二つの役目を行う 4
URI の書き方 sip:< ユーザ識別子 >:< パスワード >@< ホスト >:< ポート番号 >;<URI パラメータ >?< ヘッダ フィールド > 宛先ホスト上のユーザ名 平文なので使用は推奨されていない ここが sips の場合 トランスポートプロトコルは TLS となる 宛先ホストの FQDN( 推奨 )* か IP アドレス 宛先ホスト上のポート番号 デフォルトは (5060) S(5061) トランスポートプロトコルの指定など 例 sip:01234567@abcde.necst.nec.co.jp tel URI の場合 tel:+81-11-123-4567 *FQDN: フルドメイン名付きホスト名 5
のトランスポートプロトコル 利用目的に応じてプロトコルが決まる を暗号化したい YES TLS( つまり SSL) 規約上 サポートは任意 NO マルチストリームなどの TCP 以上の機能を使いたい YES SCTP NO IP 層でフラグメント化されるほどメッセージが大きい? YES TCP こちらはサポート必須 NO UDP 6
のメッセージ構造 は HTTP と同様にテキストベースであり 非常にシンプルな構造 リクエストメッセージ例 sip:testuser@192.168.0.13:5060 /2.0 UAC UAS 開始行 To: sip:testuser@192.168.0.13:5060 Content-Length: 0 Contact: <sip:app-146l7fz54ihri@192.168.0.160:5060;transport=udp;wlsscid=1ae3fd44d3cdfe> CSeq: 1 Call-ID: xyzzy50c3d7b40200d6b8efa5d48ad09fbf3b(8bd35e318117584004e425ba7051b7b4:192.168.0.160)@192.168.0.160 Via: /2.0/UDP 192.168.0.160:5060;wlsscid=1ae3fd44d3cdfe;branch=z9hG4bK8f9b17fe6a647f820fa35cb67f4a716a From: <sip:192.168.0.160:5060>;tag=75f1ad39 Max-Forwards: 70 空行 [ データがない場合もある ] メッセージヘッダ メッセージボディ レスポンスメッセージ例 /2.0 200 OK UAC OK UAS 開始行 Via: /2.0/UDP 192.168.0.160:5060;wlsscid=1ae3fd44d3cdfe;branch=z9hG4bK8f9b17fe6a647f820fa35cb67f4a716a From: <sip:192.168.0.160:5060>;tag=75f1ad39 To: <sip:testuser@192.168.0.13:5060>;tag=2065010947 Contact: <sip:testuser@192.168.0.13:5060> Call-ID: xyzzy50c3d7b40200d6b8efa5d48ad09fbf3b(8bd35e318117584004e425ba7051b7b4:192.168.0.160)@192.168.0.160 CSeq: 1 Content-Type: application/sdp Server: X-Lite release 1105x Content-Length: 309 メッセージヘッダ 空行 v=0 o=testuser 29690723 29698822 IN IP4 192.168.0.13 s=x-lite c=in IP4 192.168.0.13 以降略 ここに SDP が記述されている メッセージボディ 7
のリクエストメソッドとレスポンスコード 新たな RFC によりリクエストメソッドおよびレスポンスコードが追加されている リクエストメッセージ セッション確立 RFC 3261 ACK に対する最終レスポンスの受信確認 BYE セッション終了 CANCEL 確立途中のセッションのキャンセル REGISTER 所在の登録 OPTIONS 相手の能力問い合わせ INFO セッション制御情報の送信 RFC 2976 UPDATE セッション情報の更新 RFC 3311 SUBSCRIBE イベントの送信要求 RFC 3265 NOTIFY イベント状態の通知 RFC 3265 PRACK 暫定応答用 RFC 3262 MESSAGE インスタントメッセージなどのテキスト送信 RFC 3428 REFER 第三者へのコンタクト要求 RFC 3515 PUBLISH UAへのイベント状態配信 RFC 3903 主なレスポンスコード 100 Trying RFC3261 200 OK 302 Moved Temporarily 500 Server Internal Error 8
SDP Session Description Protocol(SDP) は セッションを定義するための情報交換規則 UA 間にセッションを確立するとき UAC からの リクエストのメッセージボディに記述される また UAS からの 200 OK メッセージのメッセージボディにも記述される SDP 例 バージョンセッション開始者と識別情報セッション名コネクション情報開始 終了時刻メディア種別 プロトコルメディア属性 v=0 o=testuser 28972475 28972537 IN IP4 192.111.22.33 s=x-lite c=in IP4 192.168.0.13 t=0 0 m=audio 8000 RTP/AVP 0 8 3 98 97 101 a=rtpmap:0 pcmu/8000 a=rtpmap:8 pcma/8000 a=rtpmap:3 gsm/8000 a=rtpmap:98 ilbc/8000 a=rtpmap:97 speex/8000 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-15 a=sendrecv の方で制御するのでいつも 0 ここでは RTP の属性 フォーマット固有パラメータ SDP は に依存していないので 以外でも使用できる また も SDP 以外のセッション記述方法を使用することを許容している 9
ダイアログ ダイアログ セッション メディア UA と UA の関連付け プロキシサーバなど中継する UA は関係しない セッション SDP により結びついた UA と UA の関連付け 1 ダイアログは 1 つのセッションが関連付けされる メディア UA 間で送受信さえる音声や映像 1 セッションは複数のメディアを管理することができる メディアのないセッションは通常はない レスポンスメッセージ例 レイヤレイヤ セッションレイヤセッションレイヤ UA ダイアログ セッション SDP UA ダイアログ セッション /2.0 200 OK Via: /2.0/UDP 192.168.0.160:5060;wlsscid=1ae3fd44d3cdfe; From: <sip:192.168.0.160:5060>;tag=75f1ad39 To: <sip:testuser@192.168.0.13:5060>;tag=2065010947 Contact: <sip:testuser@192.168.0.13:5060> Call-ID: xyzzy50c3d7b40200d6b8efa5d48ad09fbf3b(8bd35e31811 CSeq: 1 Content-Type: application/sdp Server: X-Lite release 1105x Content-Length: 309 メディアレイヤメディアレイヤ 参考文献 [011] より 映像メディア 音声メディア RTP RTP 映像メディア 音声メディア 空行 v=0 o=testuser 29690723 29698822 IN IP4 192.168.0.13 s=x-lite c=in IP4 192.168.0.13 t=0 0 m=audio 8000 RTP/AVP 0 8 3 98 97 101 a=rtpmap:0 pcmu/8000 以降略 10
トランザクション 一対のUAまたは( ステートレスプロキシサーバ以外 ) の間の関連付け リクエスト-レスポンスで1トランザクション ステートレスプロキシは リクエスト レスポンスを次に送るだけで再送処理などを行わないため トランザクションの関連付けに影響しない UAC サーバ ( ステートレスプロキシサーバ ) サーバ ( ステートフルプロキシサーバ ) UAS OK OK トランザクション トランザクション 11
ネットワークの構成 ( サーバなし ) ダイアログ セッション開始のコマンド 1 発信 2 OK 応答 もしもし 3 RTP はいはい ユーザ A ユーザ B 帯域制御やマルチメディアデータのハンドリングなどは の役目ではない それらには RTP などを使用する 12
ネットワークの構成 ( レジストラサーバ ) URI URI URI URI URI URI コンタクトアドレスコンタクトアドレスコンタクトアドレスコンタクトアドレス コンタクトアドレスコンタクトアドレス ロケーションサーバ ここの通信方法を では規定しない 例えば LDAP を使用することができる サーバ ( レジストラサーバ ) 私のアドレスは ***.***.**.** です 1 REGISTER 1 REGISTER 私のアドレスは ***.***.**.** です ユーザ A 登録する URI コンタクトアドレス リクエストメッセージ例 宛先となるレジストラサーバ REGISTER sip:reg.abc.necst.nec.co.jp /2.0 Via: /2.0/UDP 192.168.0.13:5060;rport;branch=z9hG4bK4.. From: TestUser <sip:testuser@abc.necst.nec.co.jp>;tag=833195397 To: TestUser <sip:testuser@abc.necst.nec.co.jp> Contact: "TestUser" <sip:testuser@192.168.0.13:5060> Call-ID: 469AE27488BC11DB8BB1000D9352FC68@abc.necst.nec.co.jp CSeq: 9525 REGISTER Expires: 1800 Max-Forwards: 70 User-Agent: X-Lite release 1105x Content-Length: 0 ユーザ B 13
ネットワークの構成 ( リダイレクトサーバ ) ユーザBは サーバ2が知っているはずなので呼 2 び出し 2 サーバ 2 ( リダイレクトサーバ ) abc.necst.nec.co.jp sip:kairos@abc.necst.nec.co.jp サーバ1 ( プロキシサーバ ) 1 sip:kairos@abc.necst.nec.co.jp 5 4 3 ロケーションサーバに問い合わせ ユーザ B の移動先を調べる いやいや ユーザ B はサーバ 3 が知ってますよ 302 Moved Temporary Contact: sip:kairos@newoffice.necst.nec.co.jp sip:kairos@newoffice.necst.nec.co.jp 6 URI URI ロケーションサーバ コンタクトアドレスコンタクトアドレス サーバ 3 ( プロキシサーバ ) newoffice.necst.nec.co.jp sip:kairos@newoffice.necst.nec.co.jp もしもし 7 RTP ユーザ A はいはい ユーザ B 14
ネットワークの構成 ( プロキシサーバ ) サーバ ( プロキシサーバ ) 1 発信 2 発信 UAC 4 200 OK 応答もしもし 5 RTP 3 200 OK 応答 UAS ユーザ A はいはい ユーザ B 15
プロキシ経由のメッセージの流れ 1 メッセージヘッダの Record-Route フィールドの有無により流れが異なる Record-Route フィールドは 経由したプロキシの情報を示す プロキシサーバが Record-Route に自分を設定するかどうかは任意 サーバが Record-Route フィールドデータを設定しない場合 サーバ A ( プロキシサーバ ) 200 OK 180 Ringing 100 Trying 200 OK 180 Ringing 100 Trying サーバ B ( プロキシサーバ ) 200 OK 180 Ringing もしもし 200 OK BYE RTP はいはい 相手の呼び出し音 ACK プルルル! 完了後 UAC から送られるメッセージは サーバで中継しない 16
プロキシ経由のメッセージの流れ 2 サーバが Record-Route フィールドデータを設定した場合 200 OK Route サーバ B Route サーバ A BYE ACK 200 OK サーバ A ( プロキシサーバ ) サーバ B Record-Route サーバ A 200 OK BYE ACK 200 OK サーバ B ( プロキシサーバ ) サーバ A サーバ B 200 OK BYE ACK 200 OK もしもし RTP はいはい 完了後も UAC から送られるメッセージは サーバで中継する Record-Route フィールドに自分を設定しないプロキシサーバは ACK や BYE を受け取れないので 後述するコール ステートフル プロキシになることができない 17
トランザクション ステートフル プロキシ プロキシサーバの種類 トランザクションの状態を管理する 実際には リクエストの情報を保持し リクエストの分岐 ( フォーク ) や暫定レスポンスの送信を行うことができる さらに高機能だと コール ステートフル プロキシ ダイアログの状態を管理する つまり 誰と誰が会話中かを管理できる フォーク 暫定レスポンス サーバ トランザクション ステートレス プロキシ 受け取ったリクエストやレスポンスを送信先に中継するだけ 暫定メッセージの送信や再送信は行わない ステートフルに比べて負荷が軽い 大規模向き サーバ 18
タイマ コールステートフルプロキシの場合 定期的なダイアログの存在確認と 確認失敗時の自動的ダイアログクローズの処理が必要 UA がタイマをサポートしていないとき UA がタイマをサポートしているとき UA サーバ ( プロキシサーバ ) UA UA サーバ ( プロキシサーバ ) UA 障害発生 BYE OK ACK 参考文献 [011] より BYE が来ないので通話中のままと思ってしまう OK ACK 障害発生 BYE 障害発生 Supported: timer Session-Expires: 1800 OK ACK Supported: timer Session-Expires: 1800 BYE タイマリセット タイムアウト! Supported: timer Session-Expires: 1800 OK ACK Supported: timer Session-Expires: 1800 Session-Expires を経過しても か UPDATE が来ないので セッションを破棄 BYE 障害発生 19
のアドレス解決 UA や サーバは 他ドメインの プロキシサーバの IP アドレス トランスポートプロトコル ポート番号を DNS サーバから取得する必要がある 他ドメインのどこに転送するかを リクエスト時と レスポンスの再送時に調べる必要がある DNS サーバ DNS に同一サーバ名で複数の サーバを登録することで 負荷分散 ドメイン A サーバ群 ( プロキシサーバ ) サーバ群 ( プロキシサーバ ) ドメイン B UAC Trapezoid( 台形 ) UAS 20
Web サイト 参考文献 [001] JSR 116: Servlet API (Java Community Process) http://jcp.org/en/jsr/detail?id=116 [002] 通信系 情報系サービスを融合する Servlet (@IT) http://www.atmarkit.co.jp/fjava/kaisetsu/j2eewatch09/j2eewatch09.html [003] 入門 ~ プロトコル概要から の適用 将来像まで ~(JPNIC) http://www.nic.ad.jp/ja/materials/iw/2003/proceedings/t9.pdf ソフトフロント阪口氏作成 [004] ソフトフロント : テクノロジトップ http://www.softfront.co.jp/tech/sip.html 書籍 [010] 千村保文, 村田利文, 改訂版 教科書, インプレス, 2004 [011] 澤田拓也, 池田徹, 木下岳人, 西澤哲夫, 川島倫央, 実践 詳解テキスト, リックテレコム, 2005 21
信頼性 柔軟性 サポート 3 つの安心でお客様のシステムを支えます!! Leading-edge technologies and time-proven quality for your evolving-business. お問合わせ先日本電気株式会社第二システムソフトウェア事業部 Tel : 03-3456-4321 Email : info-webotx@isd.jp.nec.com 製品ホームページ http://www.nec.co.jp/webotx/ 22