星期日, 7月 21, 2019

SIP Timers

Timer適用說明
T1預設 0.5s 17.1.1.1預估的來回時間 (RTT)
T24snon-INVITE 請求
INVITE 回應
最大重送間隔
T45snon-INVITE Client Transaction訊息停留在網路的最大時間
AT1, 2*T1, ...
INV 請求UDP 請求重送間隔
ET1, 2*T1, ... (最大 T2)
non-INV 請求
G17.2.1INVITE 回應的重送間隔
B64*T1Client Transaction等候回應逾時
F
H64*T117.2.1等候 ACK
DUDP: > 32s
TCP/SCTP:0
INVITE Client Transaction等候重送的回應
KUDP: T4
TCP/SCTP:0
Non-INVITE Client Transaction等候重送的回應
IUDP: T4
TCP/SCTP:0
17.2.1等候重送的 ACK
JUDP: 64*T1
TCP/SCTP:0
17.2.2等候重送的非 INVITE 請求
C> 3min16.6 bullet 11Proxy INVITE transaction 逾時

參考:RFC3261 Table of Timer Values

星期五, 7月 19, 2019

SIP Option Tags

option-tag 是 SIP擴充選項,例如 100rel 等,本身是不超過 20 字元的 alphanum 字串 (在 SIP ABNF 定義 option-tag = token),用在信頭欄位 RequireProxy-RequireSupportedUnsupported 來表示是否支援及採用。

擴充選項的支援及採用

UAC 在 Supported 放可支援的 option-tag、或在 Require 放 UAS 必須支援的 option-tag、或在 Proxy-Require 放 Proxy 必須支援的 option-tag。Proxy 如果不支援 Proxy-Require 的 option-tag,回 420。UAS 如果不支援 Require 的 option-tag,回 420。UAS 需要的 option-tag 沒列在 Supported,回 421。UAS 採用的 option-tag,列在回應的 Require。

UAC
  • 發請求表示可支援的或必須支援的 option-tag。
  • CANCEL 和失敗 INVITE 的 ACK 不用 Require 和 Proxy-Require。
  • 成功 INVITE 的 ACK 只能包含 INVITE Require 和 Proxy-Require 有的 option-tag。
  • UAC 如果收到 420 Bad Extension,應該嘗試再次請求,但這次略過列在回應 Unsupported 的 option-tag。
Proxy UAS
  • 檢查 Require,如有不支援回 420 Bad Extension
  • 需要某 option-tag 才能進行,但 Supported 沒列,回 421 Extension Required
  • 忽略 CANCEL 和失敗 INVITE 的 ACK 的 Require。
  • 成功 INVITE 的 ACK 只能包含 INVITE Require 有的 option-tag。
  • 採用時,回應含 Require 列啟用的 option-tag。
Client 和 Server 間的 negotiation option-tag 的機制不會因都支援而有所延遲。

相關信頭欄位

Proxy-Require

告訴 Proxy 必須支援哪些 option-tag 才能處理請求。proxy 可新增、不能加密。

Proxy-Require  =  "Proxy-Require" HCOLON option-tag *(COMMA option-tag)

範例:
Proxy-Require: foo

Require

必須支援的 option-tag,用在請求、421 Extension Required、或在其它回應表示採用。Proxy 可新增、不能加密。

Require       =  "Require" HCOLON option-tag *(COMMA option-tag)
範例:
Require: 100rel

Supported (k)

在請求是 UAC 告訴 UAS 支援哪些 option-tag。在 SIP OPTIONS 回應是 UAS 告訴 UAC 支援哪些 option-tag。空白表示所有都不支援。在 RFC2543 沒有。INVITE 及其 2xx 回應應該要有。

Supported  =  ( "Supported" / "k" ) HCOLON [option-tag *(COMMA option-tag)]
範例:
Supported: 100rel

Unsupported

用在 420 Bad Extension,告訴 UAC 不支援的 option-tag。

Unsupported  =  "Unsupported" HCOLON option-tag *(COMMA option-tag)
範例:
Unsupported: foo

相關回應碼

420 Bad Extension

不當擴充。

Proxy 不認得 Proxy-Require 或 UAS 不認得 Require 列的某些 option-tag。回應必須含有 Unsupported 表示不支援的 option-tag 有哪些。UAC 應該再次嘗試請求,但這次略過列在回應 Unsupported 的 option-tag。

例如:
      UAC->UAS:   INVITE sip:watson@bell-telephone.com SIP/2.0
                  Require: 100rel

      UAS->UAC:   SIP/2.0 420 Bad Extension
                  Unsupported: 100rel

421 Extension Required

需要擴充。

UAS 需要特定 option-tag 處理請求,但沒列在請求的 Supported。421 回應含 Require 表示需要的 option-tag。罕用。

擴充選項

全部註冊的擴充選項及相關 RFC 參見 IANA

參考

RFC 3261