Lesson2では,SIPが相手を呼び出してセッションを確立する様子を見ていこう。

セッション情報はボディ部に

 SIPでは,発信側と着信側の間で,UDPまたはTCPを使ってテキスト・ベースのメッセージをやりとりする。メッセージには,処理を要求する「リクエスト」と,その応答の「レスポンス」の2種類がある。

 メッセージは複数の行で構成されるが,注目すべきなのは1行目(図2-1)。ここに,どんな種類のメッセージなのかという概略が書き込まれている。1行目だけを見れば基本的なやりとりがわかる。

図2-1●SIPメッセージのフォーマット<br>メッセージの1行目で大まかな意味がわかる。メッセージはヘッダー部とボディ部に分かれ,ボディ部にセッションのUDPポートやフォーマットなどの情報を書き込む。
図2-1●SIPメッセージのフォーマット
メッセージの1行目で大まかな意味がわかる。メッセージはヘッダー部とボディ部に分かれ,ボディ部にセッションのUDPポートやフォーマットなどの情報を書き込む。
[画像のクリックで拡大表示]

 例えばリクエストの1行目には,どんな種類のリクエストなのかを示す「メソッド名」と,あて先を示す「SIP URI」が書かれている。

 レスポンスも1行目に応答の概略が書き込まれている。要求どおりに処理した場合は「200 OK」と書き込まれるといった具合だ。

 SIPメッセージは,1行目を含む「ヘッダー部」と,それに続く「ボディ部」に分かれる。セッションが確立したあとに,どのプロトコルを使うかといった情報は,SDPという書式でボディ部に書かれる(図2-1)。

 図2-1の例では,「192.0.3.101というIPアドレスで待ち受け,そのうち音声はUDP6716番のRTP,動画はUDP6712番のRTPで待ち受ける」といったことが書かれている。

接続のときは途中経過を報告

 それでは,接続時と切断時に,SIPのメッセージがどのようにやりとりされるのかを見てみよう(図2-2)。

図2-2●SIPによるセッション確立と切断のやりとり<br>セッションを確立するときは,発信側がINVITEリクエストを送信する。最終的に200 OKレスポンスを受け取ってACKリクエストを返せば確立作業は終了する。切断するときはBYEリクエストを送り200 OKレスポンスを受け取ることになる。
図2-2●SIPによるセッション確立と切断のやりとり
セッションを確立するときは,発信側がINVITEリクエストを送信する。最終的に200 OKレスポンスを受け取ってACKリクエストを返せば確立作業は終了する。切断するときはBYEリクエストを送り200 OKレスポンスを受け取ることになる。
[画像のクリックで拡大表示]

 接続時のやりとりで重要なメッセージは三つ(図2-2の(1))。アプリケーションから接続の依頼を受けた発信側のSIP UAが送る「INVITE」リクエストと,相手が電話を取ってセッションを確立できる状態になったら送る「200 OK」レスポンス,そしてセッションを確立したことを通知する「ACK」リクエスト──の三つだ。この三つのやりとりで接続は基本的に完了する。

 ただし,INVITEリクエストを受け取ったSIP UAは,途中経過をレスポンスとして通知する。例えば,INVITEリクエストを受け取ると,受け付けたという意味の「100 Trying」レスポンスをすぐに送信する。さらにユーザーを呼び出し始めた時点で「180 Ringing」レスポンスを送る。こうすることで,発信側が途中経過を把握できるようにしている。

 こうしていったんセッションを確立すると,SIPはしばらくお休みに入る(同(2))。ただし,互いに確立したセッションはしっかり覚えておく。

 通話が終わった後の切断のやりとりは簡単だ。切断する側が「BYE」リクエストを送信し,相手側が200 OKレスポンスを返す。INVITE以外のほとんどのリクエストは,リクエストに対し一つのレスポンスでやりとりが完了する。