Lesson2では,SIPが相手を呼び出してセッションを確立する様子を見ていこう。
セッション情報はボディ部に
SIPでは,発信側と着信側の間で,UDPまたはTCPを使ってテキスト・ベースのメッセージをやりとりする。メッセージには,処理を要求する「リクエスト」と,その応答の「レスポンス」の2種類がある。
メッセージは複数の行で構成されるが,注目すべきなのは1行目(図2-1)。ここに,どんな種類のメッセージなのかという概略が書き込まれている。1行目だけを見れば基本的なやりとりがわかる。
例えばリクエストの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の(1))。アプリケーションから接続の依頼を受けた発信側のSIP UAが送る「INVITE」リクエストと,相手が電話を取ってセッションを確立できる状態になったら送る「200 OK」レスポンス,そしてセッションを確立したことを通知する「ACK」リクエスト──の三つだ。この三つのやりとりで接続は基本的に完了する。
ただし,INVITEリクエストを受け取ったSIP UAは,途中経過をレスポンスとして通知する。例えば,INVITEリクエストを受け取ると,受け付けたという意味の「100 Trying」レスポンスをすぐに送信する。さらにユーザーを呼び出し始めた時点で「180 Ringing」レスポンスを送る。こうすることで,発信側が途中経過を把握できるようにしている。
こうしていったんセッションを確立すると,SIPはしばらくお休みに入る(同(2))。ただし,互いに確立したセッションはしっかり覚えておく。
通話が終わった後の切断のやりとりは簡単だ。切断する側が「BYE」リクエストを送信し,相手側が200 OKレスポンスを返す。INVITE以外のほとんどのリクエストは,リクエストに対し一つのレスポンスでやりとりが完了する。