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 的不可靠性,同时也控制事务状态机的生命周期。理解这些定时器的定义及作用,对于调试通话建立失败、消息重传、事务挂起等问题具有重要价值。