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?

RFC4028入門:SIP セッションタイマ(Session Timers)とは何か

Last updated at Posted at 2025-12-03

この記事は筆者オンリーのAdvent Calendar 20254日目の記事です。
今回は、SIP 通話を維持するための RFC4028(Session Timers) について、できるだけシンプルに解説します。

1. RFC4028(Session Timers)とは?

RFC4028 は、SIP のセッションが 死んでいないか(生きているか)を確認する仕組み を定義した拡張仕様です。

SIP の通話は INVITE → 200 OK → ACK のあと、
SIP レベルでは特に何も送られないまま 長時間続くことがあります。

しかし現実には:

NAT のマッピングが切れる

Proxy / B2BUA の状態が死ぬ

セッションは終わっているのに BYE が来ない

ネットワーク障害で片方向だけ孤立する

など「通話が継続中なのか判断できなくなる」問題が起きがちです。

そこで、RFC4028 は次を提供します:

定期的な “更新(refresh)" を SIP メッセージで行い、
セッションがまだ有効であることを確認する仕組み

これが Session Timer(セッションタイマ) です。

2. Session-Expires と Min-SE

RFC4028 の中心となる SIP ヘッダは以下の 2 つ。

Session-Expires ヘッダ

通話が自動終了するまでの秒数を示す。

例:

Session-Expires: 1800

→ 30分(1800秒)でセッションが expire(期限切れ)

Min-SE ヘッダ

Session Timer の最小値を伝える。

Min-SE: 90

→ タイマ値は最低でも 90 秒以上である必要がある

3. 誰がタイマを更新するのか?(refresher)

RFC4028 では、どちらがセッション更新の責任を持つか を明確にします。

refresher=uac または refresher=uas

例:

Session-Expires: 1800;refresher=uac

→ UAC(発信側)が session refresh(更新)を行う

責任担当(refresher)は

UAS が決めて 200 OK で知らせる

コールフロー中に再交渉も可能

4. Refresh の実体:UPDATE または re-INVITE

Session Timer の更新は:

UPDATE

re-INVITE

のいずれかで行います。

タイマが切れる前に refresher が行う動作

例えば Session-Expires: 1800 の場合:

1800 秒の 半分(900秒)程度で refresh を送るのが一般的

送信例:

UPDATE sip:bob@example.com SIP/2.0
...

または:

INVITE sip:bob@example.com SIP/2.0

これらが 200 OK によって承認されれば、Session Timer はリセットされる。

5. Session Timer を使う実際のメリット

① セッションの消失を検知できる

ネットワーク断・機器故障で片側が死んでも、
refresh が返ってこなければ セッションを自動終了できる。

② NAT マッピングの維持

refresh は SIP レベルのトラフィックなので、
NAT の UDP/TCP 変換が切れにくくなる。

③ 通話課金などの運用要件

「課金のために一定時間で生存確認したい」
というキャリア用途にもマッチ。

6. Session Timer の典型的なコールフロー

最もよく見るパターンは以下:

UA-A (UAC)                             UA-B (UAS)
   |                                    |
   |----------- INVITE ---------------->|
   |<---------- 200 OK (SE=1800) -------|
   |----------- ACK ------------------->|
   |                                    |
   |--- UPDATE (refresh) -------------->|
   |<-- 200 OK -------------------------|
   |                                    |
   |--- UPDATE (refresh) -------------->|
   |<-- 200 OK -------------------------|
   |                                    |
   |----------- BYE ------------------->|
   |<---------- 200 OK -----------------|

ポイント:

refresher はたいてい UAC または UAS のどちらかが担当

refresh が失敗した場合はセッションを切断

更新は UPDATE が一般的(メディアの変更が必要なら re-INVITE)

7. Session Timer が拒否されるケース

UAS が Min-SE を理由に拒否する例:

422 Session Interval Too Small
Min-SE: 120

→ タイマが 120 秒未満なので再送要求
(UAC はより大きな値で INVITE を再送する必要がある)

8. RFC4028 を実装するときの注意点(実践)

① refresher の決定は UAS が主導

業界実装では UAS が refresher=uas を返すことも多い(B2BUA の負荷管理目的)。

② UPDATE を使う方が安全

re-INVITE はメディア協調が必要で面倒なため、
UPDATE で refresh する実装が一般的。

③ Proxy/B2BUA が介在すると必須になる

セッション維持管理を Proxy が行う場合、Session Timer がないと
**セッションリーク(終了できない状態)**が起きやすい。

④ タイマ値は長すぎても短すぎてもダメ

短い → 更新トラフィックが多くなる

長い → セッション消失検知に時間がかかる

実運用では 1800s(30分) 〜 600s(10分) 付近が多い。

9. まとめ

RFC4028 は SIP セッションの生存確認の仕組み

Session-Expires / Min-SE / refresher がキーパラメータ

refresh は UPDATE または re-INVITE

切断検知・NAT維持・通話管理などに必須

実装では UPDATE + refresher=uas がよく使われる

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?