はじめに

【9秒チャレンジ】
SIPは、音声通話やビデオ会議などのセッション制御するプロトコルで、セッションの確立、変更、終了を行います。SDPでセッション内容を定義し、RTPでデータ通信を実施します。SIPメッセージは、リクエスト(INVITE、BYEなど)とレスポンス(成功、エラーコード)でやり取りされ、リアルタイム通信を実現します。
更に詳しく知りたい場合↓
1. SIPの概要
1.1 SIPとは?
- Session Initiation Protocol(SIP)は、音声通話、ビデオ会議、インスタントメッセージングなどのリアルタイム通信におけるセッション制御を行うプロトコル。
- RFC 3261で規定され、主にアプリケーション層(OSIモデルの第7層)で動作。
1.2 SIPの役割
SIPは、以下を実現します:
- セッションの確立: 通話や会議を始める。
- セッションの変更: 通話中に新たな参加者を追加するなどの設定変更。
- セッションの終了: 通話や会議を終了する。
1.3 SIPの特徴
- テキストベース: メッセージ形式はHTTPに似た構造で、人間にも読める形。
- モジュール構造: 他のプロトコル(例: SDP, RTP)と連携して動作。
- SIP: 制御用プロトコル。
- SDP (Session Description Protocol): メディア情報の交換。
- RTP (Real-Time Transport Protocol): 実際の音声・映像データの転送。

要するに、
セッションの確立はSIPで
そのセッションに関する定義・ルールなどはSDP
実際にデータをやり取りするしている最中はRTPを使う。
2. セッションとは?
2.1 一般的なセッションの定義
- 通信の区切りやまとまりを表す概念。文脈により異なるが、通常は以下のような意味で使われる:
- Webアプリケーションでは、ログインからログアウトまでの間。
- ネットワーク通信では、接続の開始から終了まで。
- SIPでは、「通話や通信の一連の流れ」をセッションと呼ぶ。

セッションというのは通信の区切りを表した単語。で、それは「これ!」というような特定の状態を指す言葉ではない。例えば、「ログイン~ログアウト」という通信の区切りを指すこともあるし、「1つのターンアラウンド」だったり、「複数のターンアラウンドをまとめたもの」を指すこともある。
2.2 SIPにおけるセッション
- SIPのセッションの具体例:
- 通話の発信(開始)→ 確立 → 音声データのやり取り → 通話の終了。
- 会議の開始→ 他の参加者を追加→ 終了。
3. SIPのメッセージ構造
3.1 SIPメッセージの2種類
- リクエストメッセージ: 発信側(呼び出し側)から送る。
- レスポンスメッセージ: 応答側から返す。

リクエスト:発呼側→着呼側
レスポンス:着呼側→発呼側
3.2 リクエストメッセージ
以下が主要なリクエストメソッドです:
メソッド | 説明 |
---|---|
INVITE | セッションの生成要求(招待)。 |
BYE | セッションを切断する。 |
REGISTER | ユーザー情報をSIPサーバーに登録する。 |
ACK | INVITEに対する確認を送る。 |
OPTIONS | 相手のサポート状況を確認する。 |
CANCEL | セッションの確立をキャンセルする。 |
3.3 レスポンスメッセージ
- ステータスコードで結果を示します。
主なステータスコードの分類:
ステータスコード | 意味 | 例 |
---|---|---|
1XX | 処理中 | 180 Ringing: 呼び出し中 |
2XX | 成功 | 200 OK: 正常終了 |
3XX | リダイレクト | 302 Moved Temporarily |
4XX | クライアントエラー | 404 Not Found: ユーザーなし |
5XX | サーバーエラー | 500 Server Error: サーバー障害 |
6XX | 全般的なエラー | 603 Decline: 拒否 |
4. SIPの通信フロー

今回はSIPサーバを使わずに、ユーザ同士が直接セッションを生成する流れを紹介します。
4.1 一般的な通信手順(SIPサーバを使わない場合)
1. REGISTER: ユーザー情報の登録
- 発信側(User Agent Client, UAC)は自分のSIP URIとIPアドレスをSIPサーバーに登録。
- SIP URIのフォーマット:
sip:利用者識別子
@ドメイン名- sip:プロトコルの種類を表す
メール(user@example.com)やHTTP URL(http://example.com)などと混同しないようにプロトコルは明示する必要がある。 - 利用者識別子:ユーザを識別するID(ユーザ名や電話番号を指定する)
- ドメイン名:そのユーザが所属するネットワークやサーバーの場所を示す
- sip:プロトコルの種類を表す
- サーバーはこれを基にSIP URIとIPアドレスを対応付け。
- SIP URIのフォーマット:

SIP URIとIPアドレスを対応付けをSIPサーバでしておくことで、発呼側は相手のSIP URIを知っていれば相手のIPアドレスを知らずともセッションが確立できるというわけです。
そもそも、発呼側っていうのは相手の電話番号とか利用者識別子しっているという前提があるからできる。電話もそう。相手の電話番号を知っているから呼び出すことができる。それと同じです。
p.s.今回はSIPを介さない通信なので、この機能は使いません。
2. INVITE: セッションの開始
- 発呼側が、着呼側にINVITEを送信。
3. 200 OKとACK: セッションの確立
- 着呼側が200 OKで応答。
- 発呼側がACKを送信し、セッションを確立。

で、セッションの確立が終わったら、実際のデータ交換などはRTPなどのプロトコルを使用する。
4. BYE: セッションの終了
- 発呼側または着呼側がBYEを送信。
- 相手側が200 OKで応答し、セッションを終了。
まとめ
SIP(Session Initiation Protocol)は、リアルタイム通信に使用されるプロトコルで、音声通話やビデオ会議など、セッション制御を行うためのものです。セッションとは、通信の開始から終了までの一連のやり取りを指し、SIPはそのセッションの確立、変更、終了を管理します。SIPは単独で使われることもありますが、SDP(Session Description Protocol)やRTP(Real-time Transport Protocol)と一緒に使われることが一般的です。
SDPは、セッションの内容や形式を定義するプロトコルで、具体的には、どのメディアを使用するか、どのコーデックを使うかなどの情報を伝えます。RTPは、セッションが確立した後、実際に音声や映像などのデータを送信するためのプロトコルです。これらが組み合わさることで、SIPによって確立されたセッション上で、音声やビデオのデータ通信が行われます。
SIPには、リクエストメッセージとレスポンスメッセージの2種類のメッセージがあります。リクエストメッセージは発呼側から着呼側に送られ、セッションの開始や終了、確認などを要求します。代表的なメソッドには、「INVITE(セッションの開始を要求)」、「BYE(セッション終了を通知)」、「ACK(セッション開始の確認)」などがあります。一方、レスポンスメッセージは着呼側から発呼側に返され、処理結果を示します。レスポンスメッセージは、ステータスコードで表され、例えば「1XX(処理中)」、「2XX(成功)」、「4XX(クライアントエラー)」、「5XX(サーバーエラー)」などがあります。
SIPの流れを簡単に説明すると、
最初に①発信側が相手にINVITEメッセージを送信し、
その後、②着信側が200 OKで応答します。
③発信側はその応答を受け取ってACKメッセージを送信し、セッションが確立されます。
確立されたセッションでは、RTPなどのプロトコルを使ってデータ通信が行われ、セッション終了時には、どちらか一方がBYEメッセージを送り、相手側が200 OKで応答することで、セッションが終了します。
また、SIPを使用する際、相手のIPアドレスを事前に知っている場合、直接通信が可能ですが、通常はSIPサーバーを利用して、ユーザー情報(SIP URIやIPアドレス)を登録し、相手と通信できるようにします。この仕組みによって、相手のIPアドレスを知らなくても通信ができるようになります。
以上がSIPの基本的な流れと仕組みです。SIPは、リアルタイム通信の管理を担当し、SDPやRTPと連携して音声通話やビデオ会議を実現します。