SIP(Session Initiation Protocol) 是一種信令協議,廣泛用于建立、維持和終止多媒體會話(如VoIP通話)。作為基于UDP等不可靠傳輸的協議,SIP 通過多個定時器機制來確保消息的可靠傳輸和狀態機的正常運行。
本文將詳細介紹 SIP 中常用的定時器定義、用途及默認值,主要參考自 RFC 3261。
一、定時器分類概覽
SIP 協議中定時器主要服務于 事務層(Transaction Layer),分為以下兩類:
-
INVITE 事務定時器:用于 INVITE 請求(建立會話)
-
非 INVITE 事務定時器:如 REGISTER、OPTIONS、BYE 等請求
二、常用定時器詳解
1. Timer A
-
適用類型:INVITE 客戶端事務(基于UDP)
-
作用:初始請求超時重傳間隔,指數退避。
-
默認值:
T1
,一般為 500ms,之后每次翻倍。 -
示意:發送 INVITE → 無響應 → 500ms → 重傳 → 1s → 重傳 → 2s …
2. Timer B
-
適用類型:INVITE 客戶端事務
-
作用:整個事務的最大超時時間,超過則報錯。
-
默認值:
64*T1
(約 32s) -
觸發條件:如果在 Timer B 期間沒有收到任何最終響應(如 200 OK),事務失敗。
3. Timer C
-
適用類型:INVITE 客戶端事務(TCP 或 TLS 場景)
-
作用:等待 2xx 最終響應的超時定時器(一般由UA層管理)
-
默認值:通常實現設為 180s
-
說明:TCP 無需重傳,但仍需等待響應。
4. Timer D
-
適用類型:INVITE 服務端事務(UDP)
-
作用:等待 ACK 的最大時間
-
默認值:
32s
(當使用 UDP 時,避免重復發送響應) -
說明:防止服務端在沒有收到 ACK 的情況下過早刪除事務。
5. Timer E
-
適用類型:非 INVITE 客戶端事務
-
作用:請求重傳時間,指數退避
-
默認值:
T1
初始,最大不超過T2
(4s)
6. Timer F
-
適用類型:非 INVITE 客戶端事務
-
作用:最大等待時間
-
默認值:
64*T1
(32s)
7. Timer G
-
適用類型:INVITE 服務端事務
-
作用:2xx 以下響應重傳間隔
-
默認值:
T1
,指數退避
8. Timer H
-
適用類型:INVITE 服務端事務
-
作用:最大等待 ACK 的時間
-
默認值:
64*T1
(32s)
9. Timer I
-
適用類型:INVITE 服務端事務(完成狀態)
-
作用:事務完成后進入終止狀態前的延遲(UDP)
-
默認值:
T4
(默認 5s)
10. Timer J
-
適用類型:非 INVITE 客戶端事務
-
作用:等待最終響應確認的時間
-
默認值:
64*T1
(32s)
11. Timer K
-
適用類型:非 INVITE 服務端事務
-
作用:事務完成狀態進入終止狀態前的延遲
-
默認值:
T4
-
T4
三、默認常量定義
名稱 | 默認值 | 描述 |
---|---|---|
T1 | 500ms | RTT 基準單位 |
T2 | 4s | 非 INVITE 重傳最大間隔 |
T4 | 5s | 網絡層最大響應延遲(用于完成狀態) |
四、工程實踐建議
-
Timer T1 可調節:可以根據網絡延遲配置為 250~1000ms。
-
TCP/WS場景中 Timer A/G/J 不使用:無需重傳。
-
調試時開啟事務日志:如 FreeSWITCH/Sofia 中啟用
sofia tracelevel 9
。 -
使用 Wireshark 驗證定時器觸發點。
五、總結
SIP 協議通過定時器機制補償了 UDP 的不可靠性,同時也控制事務狀態機的生命周期。理解這些定時器的定義及作用,對于調試通話建立失敗、消息重傳、事務掛起等問題具有重要價值。