SIP 协议中的定时器

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 网络层最大响应延迟(用于完成状态)

四、工程实践建议

  1. Timer T1 可调节:可以根据网络延迟配置为 250~1000ms。

  2. TCP/WS场景中 Timer A/G/J 不使用:无需重传。

  3. 调试时开启事务日志 :如 FreeSWITCH/Sofia 中启用 sofia tracelevel 9

  4. 使用 Wireshark 验证定时器触发点


五、总结

SIP 协议通过定时器机制补偿了 UDP 的不可靠性,同时也控制事务状态机的生命周期。理解这些定时器的定义及作用,对于调试通话建立失败、消息重传、事务挂起等问题具有重要价值。

相关推荐
xiangxiongfly91523 天前
Android 倒计时总结
android·倒计时·flow·timer·handler·countdowntimer
Pafey2 个月前
常见的 SIP 错误码
sip
谢平康3 个月前
使用firewall-cmd配置SIP端口转发,实现双网卡互通,内外网方式
freeswitch·sip·双网卡互通
CoreMaker-lab3 个月前
e2studio开发RA4L1(8)----GPT定时器频率与占空比的设置
pwm·timer·e2studio·瑞萨ra·renesas·r7fa4l1bd4cfp·ra4l1
贾宝玉的玉宝贾3 个月前
FreeSWITCH 简单图形化界面40 - 使用mod_curl模块进行http请求
python·http·voip·freeswitch·sip
xiao--xin5 个月前
Java定时任务实现方案(一)——Timer
java·面试题·八股·定时任务·timer
戴草帽的大z7 个月前
Kamailio SIP服务器的配置与运行
kamailio·voip·sip
戴草帽的大z7 个月前
基于CentOS系统利用Kamailio搭建企业级SIP服务器
linux·centos·kamailio·sip
JWASX7 个月前
定时/延时任务-Timer用法
java·定时器·timer