VoIP を実現する SIP とは?
こんにちは、ひらたつです。
今回もネットワークスペシャリストの知識に関する記事を書きました。
前回の第1回では、「Ethernet のフレームフォーマットと各領域の説明」と題して Ethernet のフレームフォーマットについての記事を書きました。
流れ的に今回は IP パケット といきたかったのですが、学習に使っている本 (情報処理教科書 ネットワークスペシャリスト 2023年版(ICTワークショップ)|翔泳社の本) では先に SIP (Session Initiation Protocol) が出てきました。
SIP が初耳で内容が良くわからずいろいろと調べましたのでその内容を整理します。
ネットワークスペシャリストを目指している方の参考になれば幸いです。
SIP とは?
SIP (Session Initiation Protocol) とは セッションを制御する プロトコルであり、データの転送には主に RTP (Real-time Transport Protocol) が用いられる。
RTP などのデータ転送で必要な情報の記述には SDP (Session Description Protocol) が用いられる。
というような説明が多くの記事、本でされていますが、私は良く分かりませんでした。
この文を読んで SIP、RTP、SDP の役割が分かれば以下の説明を読む必要はないかもしれません。(笑)
SIP はセッションを制御するプロトコルであり、データを転送するためのプロトコルではない。
ここが私の中では非常に大切でした。
イメージは以下です。
SIP は セッションの開始と終了のみを管理 して、データは別のプロトコルでやりとりされます。
データ転送で主に用いられるのが RTP (Real-time Transport Protocol) です。
RTP の通信には相手の IP アドレスやポート番号、音声の圧縮方式の情報が必要です。
これらの情報を SIP でやりとりします。
ただ、SIP 自体はセッション制御だけの役割しかなく、IP アドレスやポート番号、音声の圧縮方式の情報をどう SIP フォーマットの中に記載するかのルールは決まっていません。
この記載ルールを決めているのが SDP (Session Description Protocol) です。
以上をまとめると SIP は以下の特徴があります。
- セッションの開始と終了を管理する
- セッションの開始時に通信相手とデータ通信で使用する IP アドレスやポート番号、サポートしている圧縮方式などをやりとりする
プロトコルスタックでの位置付け
SIP は TCP/IP モデルの「アプリケーション層」に該当します。
従って、UDP か TCP を使用されますが、デフォルトでは UDP が使用されます。
また、SDP は SIP の ボディ で用いられます(詳細は 3. ボディ をご確認ください)。
SIP は何に使われている?
現在の主な用途は電話、テレビ電話やインスタント・メッセージングのような双方向のリアルタイム通信である。
SIP はセッションを制御するプロトコルですので、双方向の通信で用いられます。
Zoom や Skype、LINE 電話などで VoIP (Voice over Internet Protocol) が使われていますが、VoIP にも SIP が使われています。
- Zoom
Zoom の VoIP 電話サービス Zoom Phone は VoIP 業界のリーダーです。 Zoom Phone があれば、企業はコミュニケーション システムを最新化して、コストを削減し、生産性を向上させ、よりよいビジネス成果を達成することができます。
- Skype や LINE 電話
スマートフォンの普及に伴い、米Microsoftの「Skype」といったサービスだけでなく、NTTコミュニケーションズが提供する「050 plus」(関連記事)やNHN Japanの「LINE」(関連記事)など、音声通話ができる数多くのサービスが登場しています。これらのサービスは、従来の電話サービスが採用している回線交換方式ではなく、VoIP(Voice over IP)技術を用いたデータ通信による音声通話を可能としています。
【補足】RTP とは?
RTP (Real-time Transport Protocol) は TCP/IP ネットワーク上で音声や動画のように連続するデータの流れをリアルタイムに伝送するための通信プロトコルです。 RTP/RTCPとは?【第2回】RTP/RTCPパケットにはどんな情報が含まれているか|TECHブログ | 株式会社PALTEK
RTP は UDP を用いるアプリケーション層のプロトコルです。
プロトコルスタックは下図です。
RTP は UDP を用いますが、TCP を用いる RTSP (Real Time Streaming Protocol) もあるみたいです。
また、通信状況(遅延時間、パケット損失率、送出と受信のパケット数など)を含む管理パケットを通信参加者に提供するプロトコルである RTCP (Real Time Control Protocol) もあります。
RTP の詳細は別の記事で整理できたらと思います。
SIP のメッセージフォーマット
SIP のメッセージフォーマットは下図です。
具体的な中身は下図のようになっています。
- リクエスト例
- レスポンス例
スタートラインに SIP メソッドなどが記載されており、ヘッダーにリクエストの着信先や生成元、リクエストが経由したパスなどが記載されます。
ボディには、RTP で使う IP アドレスやポート番号、音声の圧縮方式などの情報が記載されます。
このボディの記載方法は SIP では規定されておらず、SDP で決められています。
1. スタートライン
SIP の通信は、リクエストとレスポンスのやりとりで行われます。
SIP は HTTP を例に設計されたらしく、リクエストとレスポンスというしくみは HTTP と同じになっています。
SIPメソッド | 説明 |
---|---|
INVITE | セッション開始要求 |
ACK | セッション確立の確認 |
BYE | セッション終了 |
CANCEL | セッション確立のキャンセル |
REGISTER | 情報の登録 |
OPTIONS | サーバ機能問い合わせ |
PRACK | 暫定応答に対する確認 |
INFO | セッション内の情報通知 |
SUBSCRIBE | イベントの通知要請 |
NOTIFY | 要請されたイベントの通知 |
MESSAGE | テキストメッセージなどの送信 |
UPDATE | セッションの変更 |
PUBLISH | ステータス情報の通知 |
REFER | 転送指示 |
ステータス | コード | メッセージ | 応答内容 |
---|---|---|---|
暫定応答 (コード:100~199) |
100 | Trying | 暫定応答 |
180 | Ringing | 呼び出し中 | |
成功応答 (コード:200~299) |
200 | OK | リクエスト成功 |
転送応答 (コード:300~399) |
301 | Moved Permanently | 恒久的に移動した |
302 | Moved Temporary | 一時的に移動した | |
リクエストエラー (コード:400~499) |
400 | Bad Request | リクエストが不正な構文 |
401 | Unauthorized | ユーザ認証が必要 | |
403 | Forbidden | 禁止されている | |
404 | Not Found | 見つからなかった | |
486 | Busy Here | ビジー状態である(通話中など) | |
487 | Request Terminated | リクエストが終了させられた | |
サーバーエラー (コード:500~599) |
500 | Server Internal Error | サーバー内部エラー |
503 | Service Unavailable | サーバー利用不可 | |
グローバルエラー (コード:600~699) |
600 | Busy Everywhere | どの場所もビジー |
603 | Decline | どの端末も参加できない |
2. ヘッダー
リクエストの着信先や生成元、リクエストが経由したパスなどが記載されます。
パラメーター | 内容 |
---|---|
Call-ID | ユニークな ID であり、セッションの識別に使用される |
To | リクエストの着信先 URI |
From | リクエストの生成元 URI |
Contact | 以後、自分へのリクエストを送ってほしい URI |
Cseq | 同一 Call-ID で何個目のリクエストかを表示 |
Via | リクエストが経由してきた経路。レスポンスを転送する経路として使われる。 |
Content-Type | ボディメッセージの MIME タイプ |
Content-Length | ボディの長さ(バイト数) |
※ URI (Uniform Resource Identifier) とは URL (Uniform Resource Locator) と URN (Uniform Resource Name) の総称です。
3. ボディ
ボディの記載方法について SIP では MIME (Multipurpose Internet Mail Extensions) 形式で記載することのみを規定しています。
実際どのように記載されるかは、使用する MIME Type
に依存します。
使用される MIME 形式はヘッダーの Content-Type
に記載されるようです。
調べると、Content-Type
の記載例は以下があるようですが、他のリクエストでの記載例は分かりませんでした。
実際にパケットをキャプチャすると分かるかもしれません。
- INVITE リクエスト:application/SDP
- NOTIFY リクエスト:application/xpidftxml or application/cpim-pidftxml
- MESSAGE リクエスト:text/plain
おそらく、使用される MIME は SDP (Session Description Protocol) が最も多く、どの本やサイトでも詳細に説明されていました。
SIP シーケンス
UA 間での直接のやりとり
SIP では端末のことを User Agent (UA)
と呼びます。
この UA どうしでのやりとりが一番単純なシーケンスとなります。
- 発呼側から
INVITE
リクエストが送られる - 着呼側から暫定応答が送られる(
100 Trying
,180 Ringing
) - 着呼側が応答すれば、
200 OK (成功応答)
のレスポンスが送られる - 発呼側から
ACK
が送られ、成功応答を受信したことが着呼側へ伝えられる - (リアルタイムデータ通話が行われる)
- 発呼側か着呼側どちらかから
BYE
リクエストが送られる BYE
リクエストを受け取った側から200 OK (成功応答)
のレスポンスが送られる
SIP サーバーがある場合のやりとり
UA どうしがお互いの IP アドレスを知らない場合は SIP サーバーが通信を仲介します。
SIP サーバーには以下の役割があります。
- レジストラサーバー:UA が送信した登録リクエスト (
REGISTER
) を受け取り、ロケーションサーバーに登録する - ロケーションサーバー:UA の位置情報(SIP URI に IP アドレスを紐づけた情報)を保管する
- プロキシサーバー:UA からの通信を受信し転送する
イメージは以下です。
インターネット通話を実現する「VoIP」と「SIP」とは?初心者にもわかりやすく解説 から引用しています。
レジストラサーバーとロケーションサーバーとしての役割は UA からやりとりをしたいリクエスト (INVITE
) より前に完了している必要があります。
SIP サーバーがプロキシサーバーとして UA 間のやりとりを行う場合は以下の流れになります。
- 発呼側から SIP サーバーに
INVITE
リクエストが送られる - SIP サーバーは発呼側からの
INVITE
リクエストの着呼側 SIP URI から IP アドレスを割り出し着呼側へ転送する - SIP サーバーは
100 Trying (暫定応答)
を送り、INVITE
リクエストの転送を知らせる - 着呼側から暫定応答が送られ、SIP サーバーは発呼側へ転送する(
180 Ringing
) - 着呼側が応答すれば、
200 OK (成功応答)
のレスポンスが送られ、SIP サーバーは発呼側へ転送する - 発呼側から
ACK
が直接着呼側へ送られ、成功応答を受信したことが伝えられる - (リアルタイムデータ通話が行われる)
- 発呼側か着呼側どちらかから
BYE
リクエストが送られる BYE
リクエストを受け取った側から200 OK (成功応答)
のレスポンスが送られる
最後に
SIP の応用先として VoIP※ があり、VoIP でのシーケンスや問題点なども調べたのですが、長くなったので次回の記事に分けようと思います。
※ VoIP (Voice over Internet Protocol) とは、インターネットやイントラネットのような IP ネットワーク上で音声通話を実現する技術のことです。音声をデジタル信号に変換し、パケットとして IP ネットワークを通してリアルタイムに送受信します。
では次回の記事でお会いしましょう。