0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RFC3261で学ぶSIP入門:INVITE〜200 OK〜ACK、そしてBYEまで

Last updated at Posted at 2025-12-01

この記事は筆者オンリーのAdvent Calendar 20252日目の記事です。 SIPのプロトコルであるRFC3261についざっくり書いてみます。

1. はじめに:SIPとRFC3261とは

SIP(Session Initiation Protocol)は、IPネットワーク上で音声・映像などのリアルタイムセッションを開始・変更・終了するためのシグナリングプロトコルです。
VoIP、ビデオ会議、IMS/VoLTE など幅広く利用されています。

RFC 3261 は、この SIP のコア仕様を定めた文書で、

どんなメソッドがあるか

どんなヘッダがあるか

どんな順番でやり取りされるか(コールフロー)

といった内容がまとめられています。

この記事では RFC3261 の中でも特に「最小限で通話ができる部分」だけに絞って解説します:

INVITE → 200 OK → ACK で通話確立

BYE → 200 OK で通話終了

おまけ:REGISTER で端末の位置登録

2. SIPの登場人物(UA / Proxy / Registrar)

User Agent (UA)

エンドポイントとなる電話機・ソフトフォン・PBX など。

リクエストを出すとき → UAC (User Agent Client)

リクエストを受けるとき → UAS (User Agent Server)

Proxy Server

リクエストを転送する中継ノード。
ルーティングやポリシー適用などを担当。

Registrar / Location Server

REGISTER を受けて、
「このSIP URI が今どのIP/ポートにいるか」
を保存する役割。

3. SIPメッセージのざっくり構造

SIPはHTTPライクなテキストプロトコルです。

INVITE リクエスト例
INVITE sip:bob@example.com SIP/2.0
Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds
From: "Alice" <sip:alice@example.com>;tag=1928301774
To: <sip:bob@example.com>
Call-ID: a84b4c76e66710@pc33.example.com
CSeq: 314159 INVITE
Contact: <sip:alice@pc33.example.com>
Content-Type: application/sdp
Content-Length: 142

v=0
o=alice 2890844526 2890844526 IN IP4 pc33.example.com
s=-
c=IN IP4 192.0.2.1
t=0 0
m=audio 49172 RTP/AVP 0
a=rtpmap:0 PCMU/8000

ポイント:

1行目:メソッド Request-URI SIP/2.0

続くのがヘッダ(Via, From, To, Call-ID, CSeq…)

空行の後に SDP(メディア情報)が入る

4. よく出てくるメソッド(INVITE / ACK / BYE / REGISTER)

INVITE

通話開始(セッション開始)の要求。SDP を同梱するのが一般的。

ACK

INVITE の**最終応答(200〜6xx)**に対する確認用メッセージ。
※ INVITE 専用メッセージである点が重要。

BYE

既に確立した通話の終了。呼の発信/着信どちらからでも送れる。

REGISTER

端末の現在位置を Registrar に登録する。

5. 基本コールフロー

INVITE → 180 Ringing → 200 OK → ACK

最小構成の2者間通話の流れは次のとおり:

Alice (UA)                             Bob (UA)
    |                                     |
    |---------- INVITE ------------------>|
    |<--------- 100 Trying ---------------|
    |<--------- 180 Ringing -------------|
    |<--------- 200 OK ------------------|
    |---------- ACK -------------------->|
    |===== RTP (音声/メディア) ========>

各ステップの意味

INVITE
通話要求。通常SDPを含む。

100 Trying(任意)
「処理中」を示す暫定応答。

180 Ringing
相手端末が鳴動中であることを通知。

200 OK
通話受諾。SDP返答でメディア条件が決まる。

ACK
200 OK を受領したことを通知。
→ これでセッション(ダイアログ)成立。

RTP(メディア)
SIPはシグナリングのみ。音声はRTPで流す。

6. セッション終了フロー:BYE → 200 OK

通話の切断は非常にシンプル:

Alice (UA)                             Bob (UA)
    |===== RTP (会話中) ==========>|
    |                               |
    |----------- BYE -------------->|
    |<---------- 200 OK-------------|
    |                               |

ポイント:

BYE はどちら側からでも送れる

BYE → 200 OK では ACK は不要(INVITE のときだけ)

7. おまけ:REGISTER で端末の位置登録

SIP URI と実際の IP/ポートの紐付けを行うために使われます。

REGISTER の典型フロー

UA (Alice)                   Registrar
    |                           |
    |------ REGISTER ---------->|
    |<----- 401 Unauthorized ---|  (認証要求)
    |------ REGISTER (+Auth) -->|
    |<----- 200 OK -------------|

この登録情報をもとに、Proxy/Registrar は
INVITE sip:bob@example.com を正しい場所へ転送できます。

8. まとめ

SIPはセッション開始/終了を行うテキストプロトコル

基本コールフロー

INVITE → 200 OK → ACK

メディアはRTP

終了フロー

BYE → 200 OK(ACKなし)

REGISTER は端末の位置登録

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?