Timer | 值 | 適用 | 說明 |
---|---|---|---|
T1 | 預設 0.5s | 17.1.1.1 | 預估的來回時間 (RTT) |
T2 | 4s | non-INVITE 請求 INVITE 回應 | 最大重送間隔 |
T4 | 5s | non-INVITE Client Transaction | 訊息停留在網路的最大時間 |
A | T1, 2*T1, ... | INV 請求 | UDP 請求重送間隔 |
E | T1, 2*T1, ... (最大 T2) | non-INV 請求 | |
G | 17.2.1 | INVITE 回應的重送間隔 | |
B | 64*T1 | Client Transaction | 等候回應逾時 |
F | |||
H | 64*T1 | 17.2.1 | 等候 ACK |
D | UDP: > 32s TCP/SCTP:0 | INVITE Client Transaction | 等候重送的回應 |
K | UDP: T4 TCP/SCTP:0 | Non-INVITE Client Transaction | 等候重送的回應 |
I | UDP: T4 TCP/SCTP:0 | 17.2.1 | 等候重送的 ACK |
J | UDP: 64*T1 TCP/SCTP:0 | 17.2.2 | 等候重送的非 INVITE 請求 |
C | > 3min | 16.6 bullet 11 | Proxy INVITE transaction 逾時 |
星期日, 7月 21, 2019
SIP Timers
星期五, 7月 19, 2019
SIP Option Tags
option-tag 是 SIP 的擴充選項,例如 100rel 等,本身是不超過 20 字元的 alphanum 字串 (在 SIP ABNF 定義 option-tag = token),用在信頭欄位 Require、Proxy-Require、Supported 和 Unsupported 來表示是否支援及採用。
擴充選項的支援及採用
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。
- 發請求表示可支援的或必須支援的 option-tag。
- Supported 列支援的 option-tag。
- Require 列 UAS 必須支援的 option-tag。
- Proxy-Require 列 Proxy 必須支援的 option-tag。
- CANCEL 和失敗 INVITE 的 ACK 不用 Require 和 Proxy-Require。
- 成功 INVITE 的 ACK 只能包含 INVITE Require 和 Proxy-Require 有的 option-tag。
- UAC 如果收到 420 Bad Extension,應該嘗試再次請求,但這次略過列在回應 Unsupported 的 option-tag。
- 檢查 Proxy-Require,如有不支援回 420 Bad Extension。
- 忽略 CANCEL 和失敗 INVITE 的 ACK 的 Proxy-Require。
- 檢查 Require,如有不支援回 420 Bad Extension。
- 需要某 option-tag 才能進行,但 Supported 沒列,回 421 Extension Required。
- 忽略 CANCEL 和失敗 INVITE 的 ACK 的 Require。
- 成功 INVITE 的 ACK 只能包含 INVITE Require 有的 option-tag。
- 採用時,回應含 Require 列啟用的 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。罕用。