Lesson2では,SIP UAがメッセージを直接やりとりする例を見てきた。しかしSIP UA同士が直接メッセージをやりとりすることは実はあまりない。SIP UAは,「SIPサーバー」と呼ばれる装置にSIPメッセージを中継してもらうことがほとんどだ。
UAがアドレスを覚えるのは大変
なぜSIPサーバーが必要なのかを考えてみよう。SIPサーバーの有無にかかわらず,発信するユーザーのアプリケーションの使い方は変わらない。「1234」といった番号やユーザー名,あるいは「yamada@example.com」といったSIP URIを指定してアプリケーションに相手の呼び出しを指示する。番号やユーザー名で指定された場合,SIP UAは決まったドメイン名を付けて「1234@example.com」といった具合にSIP URIに変換する。ここまでは特に難しくない。
SIPサーバーがないとここからが難しくなる。呼び出す相手のSIP UAのIPアドレスを,SIP URIから自力で導き出すには相手のSIP UAのIPアドレスを覚えておく必要があるからだ(図3-1)。だが,すべてのSIP UAが,呼び出す可能性のあるすべてのSIP UAのIPアドレスをいちいち覚えておくのは難しい。
情報を集めてそこで中継させる
そこで普通は,SIPサーバーにユーザーとIPアドレスの対応情報を集めて,SIPメッセージを中継させる。SIPの標準規格では,情報を集めるのは「レジストラEサーバー」,中継するのは「プロキシ・サーバー」と分けて定義されているが,1台のSIPサーバーが両方の機能を備えていることが多い。
中継はせずに,ほかのSIP UAやプロキシ・サーバーにSIPメッセージの転送先を教える「リダイレクト・サーバー」もある。通信事業者などの巨大ネットワークでは,リダイレクト・サーバーを置いてSIPサーバーの負荷を小さくすることがある。
レジストラ・サーバーは,SIP UAからREGISTERリクエストで送られてくるSIP URIとIPアドレスの登録を受け付ける(図3-2のA-1,2)。受け取った情報を基にSIP URIとIPアドレスの対応情報を更新する。
プロキシ・サーバーはSIP UAからメッセージを受け取ると,レジストラ・サーバーが更新した対応情報を参照して,SIPメッセージを適切なIPアドレスに転送する(同B-1,2)。
すべてのSIP UAがネットワークに参加したときにレジストラ・サーバーに位置情報を登録すれば,SIP UAはいちいち相手端末のIPアドレスを覚えなくてもよくなる。SIPメッセージをプロキシ・サーバーに送れば,そこから正しく転送してもらえる。
ちなみにSIPの標準規格では,レジストラ・サーバーが対応情報を更新したり,プロキシ・サーバーが情報を参照する方法は決まっていない。二つの間にデータベースを置いて参照や更新を受け付けることだけが決まっている。実際のSIPサーバーでは,このデータベースがレジストラ・サーバーやプロキシ・サーバーと共に動いている。
管理やセキュリティ確保の意味も
プロキシ・サーバーから送られてきたSIPメッセージには,相手のSIP UAのIPアドレスが書き込まれている。このため,そのあとのメッセージのやりとりはSIPサーバーを介する必要はない。
ただし,SIP UA間でメッセージを直接やりとりすることはほとんどない。わざわざプロキシ・サーバーを経由させるのには,通信履歴情報を一元管理したり,見知らぬ相手からいきなりSIPメッセージが届かないようにするという意味もある。
プロキシ・サーバーは,SIPメッセージを中継するときに,ヘッダーに必ずプロキシ・サーバーを中継するように指示する情報を書き込むことができる。この指示が書き込まれたSIP UAは,相手のIPアドレスがわかってもプロキシ・サーバー経由でメッセージを送る。
ただし,プロキシ・サーバーはSIPで確立したあとのセッションは中継しない。プロキシ・サーバーを使っている場合でも,マルチメディア・データを収めたパケットは端末間で直接やりとりする。