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


三、默认常量定义

名称默认值描述
T1500msRTT 基准单位
T24s非 INVITE 重传最大间隔
T45s网络层最大响应延迟(用于完成状态)


四、工程实践建议

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

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

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

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


五、总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85988.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习深度学习】偏置项(Bias)概念

目录 前言 一、先说结论:偏置项是“默认起点” 二、类比理解 类比 1:老师给学生的“基础分” 类比 2:预测房价时的“固定成本” 三、没有偏置项的模型,会有什么问题? 四、在神经网络中,偏置项是神经…

使用数组 海选女主角

问题描述 面试那天,刚好来了m * n个MM,站成一个m * n的队列,副导演Fe(OH)2为每个MM打了分数,分数都是32位有符号整数。 一开始我很纳闷:分数怎么还有负的?Fe(OH)2解释说,根据选拔规则&#xff…

从0开始学习R语言--Day29--社交网络分析

在探寻数据之间的关系时,由于数据类型的限制,很多时候我们可以从数据的现实角度出发去选择方法,而不是一昧地从头尝试不同方法去分类。假如我们用的是传染病在市面上的传播路径数据,亦或是病毒对于基因的感染模块,就可…

一款基于 React 的开源酷炫动画库

React Bits 是一个开源的交互式 React 组件库,包含一系列动画化、交互式且完全可定制的 React 组件,用于构建令人惊艳且难忘的用户界面,可帮助开发者在 React 应用中轻松实现各种动画效果。它提供了超过70种动画组件,分为文本动画…

深入理解前端理念bundleless

Bundleless 是一种新兴的前端开发趋势,它的核心思想是减少或完全去除传统的打包步骤,直接利用浏览器对现代 JavaScript 特性(尤其是 ES 模块)的原生支持。这一趋势背后的推动力包括现代浏览器的进步、开发者对更快开发反馈的需求以及更简单的开发流程。以下是对 bundleless…

马斯克YC技术核弹全拆解:Neuralink信号编译器架构·星舰着陆AI代码·AGI防御协议(附可复现算法核心/开源替代方案/中国技术对标路径)

一、Neuralink技术栈深度剖析 ▶ 神经信号编译架构(基于已公开专利US20220369936) 关键算法实现: # 运动意图解码核心(简化版) import numpy as np from sklearn.ensemble import RandomForestClassifierclass Neura…

【RK3568 嵌入式linux QT开发笔记】 二维码开源库 libqrencode 交叉静态编译和使用

本文参考文章:https://blog.csdn.net/qq_41630102/article/details/108306720 参考文章有些地方描述的有疏漏,导致笔者学习过程中,编译的.a文件无法在RK3568平台运行,故写本文做了修正,以下仅是自我学习的笔记&#xf…

git本地裸仓库的“激活”:在同一台 Linux 服务器上创建工作区

大家好!在之前的文章中,我们探讨了 Git 裸仓库(Bare Repository)的概念,它是没有工作目录,只包含 .git 目录内容的特殊仓库格式,非常适合作为中心化的代码集散地或备份。我们也了解了 git clone…

如何排查在docker中运行软件的故障:Docker故障排查可视化指南,三招锁定问题根源

很多刚接触Docker的朋友常觉得故障排查很神秘。其实只需关注CPU、内存、磁盘这三大资源指标!Linux终端虽强大但不够直观,下面教你用可视化工具轻松监控: 一、宿主机全局监控:FinalShell 掌控全局 连接宿主机 打开FinalShell&…

【论文笔记】【强化微调】T-GRPO:对视频数据进行强化微调

tulerfeng/Video-R1: Video-R1: Reinforcing Video Reasoning in MLLMs [🔥the first paper to explore R1 for video] 1. 引述 在强化微调中,像 GRPO、DAPO 这样的方法都是对文本或者图片进行微调思考,所以这类微调方法不对时序信息做处理&…

【Unity】动画系统

0 前言 早些时间学动画系统时的笔记,实际还没学完,后续计划会慢慢补全吧。 1 动画 通常来说动画都是动画师来做的,不过Unity也能实现简单的动画效果。PS:官方文档中,将动画称之为动画剪辑。 1.1 创建动画 首先在Unit…

C++二级指针的用法指向指针的指针(多级间接寻址)

指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。 指针的指针就是将指针的地址存放在另一个指针里面。 通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个…

【格与代数系统】示例

【格与代数系统】格与代数系统汇总 例1 设是由诱导的代数系统,则其上的二元运算满足(ABCD) A. B. C. D. 代数系统满足交换律、幂等律、吸收律、结合律 例2 是(ABCD) A.有界格 有界格:有最大、最小元…

Stable Diffusion 项目实战落地:手机壁纸制作-第一篇 从零基础到生成艺术品的第一步!

大家好!欢迎来到《StableDiffusion实战-手机壁纸制作》系列的第一篇! 在这一篇文章里,我们将一起探索如何用StableDiffusion(SD)这款强大的工具,快速制作出炫酷的手机壁纸。 如果你对生成艺术、AI绘图感兴趣,那你一定不能错过! 你能做什么?你将做什么! 在之前的系…

WEB3开启 Hardhat 自动验证有什么意义

这是个非常好的问题,尤其是你在学习 Web3 后端开发时,理解为什么要启用 Hardhat 自动验证合约源码,会让你开发流程更完整、更专业。 ✅ 一句话总结: 开启 Hardhat 自动验证的意义是:让你的合约在区块链浏览器&#xff…

Qt窗⼝的学习(一)

Qt窗⼝是通过QMainWindow类来实现的。 QMainWindow是⼀个为⽤⼾提供主窗⼝程序的类,继承⾃QWidget类,并且提供了⼀个预定义的 布局。QMainWindow包含⼀个菜单栏(menubar)、多个⼯具栏(toolbars)、多个浮动窗⼝(铆 接部…

C++ 面试题常用总结 详解(满足c++ 岗位必备,不定时更新)

📚 本文主要总结了一些常见的C面试题,主要涉及到语法基础、STL标准库、内存相关、类相关和其他辅助技能,掌握这些内容,基本上就满足C的岗位技能(红色标记为重点内容),欢迎大家前来学习指正&…

git提交的脚本无执行权限怎么办

问题描述 自己写的小项目,没有在服务器安装 Jenkins 进行项目部署,为了图方便,在项目中编写了一个 deploy.sh 脚本文件用来执行项目部署。但是在服务器上 pull 下来之后发现脚本文件没有执行权限,通过 chmod 命令进行赋权&#x…

004.chromium编译进阶-启动时传入cookies

一、目标: 实现传入参数--set-cookies[{"domain":"https://baidu.com","name":"AAAA","value":"111"},{"domain":"https://baidu.com","name":"BBB","…

【数据库复习】

数据库复习题 一、填空题1.数据库系统一般由(数据库)、应用系统、(数据库管理系统)、(数据库管理员)和用户构成。2.数据模型通常由(数据结构)、(数…