SIP INVITE 会话建立过程 (www.ideawu.net)

【简介】

运行于 UDP 之上的 SIP,因为 UDP 是不可靠传输的,所以 SIP 协议本身要自己实现可靠传输。对于如何可靠传输,SIP 的 RFC 文档没有要求实现独立的传输层,而是将可靠传输隐含于交互过程本身。如果向 TCP/IP 协议那样分层,特点是清晰。而将可靠传输隐含于交互,则可控程度更高,当然也更复杂。
所以,RFC 中创造了一些概念,如 Transaction 等等,对于有经验的程序员来说,这完全没必须,反而造成困扰。对于程序员,用几句简单的过程描述就可以解决。如下。
Client: 定期重复发送 INVITE 直到收到响应。
Server:收到 INVITE 后,定期重复发送响应,直到收到 ACK。
Client:收到响应后,认为会话已经建立。这时如果再次收到响应,继续发送 ACK。
Server:收到 ACK,认为会话已经建立。这时如果再次收到 INVITE,丢弃。
里面有两个“定期发送”,其实就是超时重传的意思。当然,超时重传有最终次数限制。
程序看到上面的话,实现起来就简单了。不太明白 RFC 为什么要用 Trasaction 那样奇怪的方式来描述,可能和那个时期或者某个公司的编程习惯有关,作者可能是基于自己的某个代码实现来描述。其他人实现时,未必需要 Transaction 这种东西。
关于可靠传输,我已经在另一篇博客文章(http://www.ideawu.net/blog/archives/782.html )中介绍了,就是确认,重传,排序(序号)。SIP 把确认隐含于交互过程,例如响应是对 INVITE 的确认,ACK 是对响应的确认。在不同的状态接受不同类型的报文,以及会话建立之后对非期望报文的丢弃就属于排序(序号)。SIP 本身也有序号,并不是单纯的报文排序之用。

点击查看原文 >>

@技术头条 2017-06-20 00:39 / 原作者微博:@ideawu / 0个评论
赞过的人: @技术头条
要不要再学学下面的文章?
HTTPS通信过程分析 (l1n.wang)
为什么需要HTTPS?HTTP缺点: 1. 明文传输; 2.C/S两端不存在验证机制,无法确认对方身份,可能存在中间人攻击。
by @技术头条 2024-01-17 23:09 查看详情
团队管理过程的信息不对称 (hiwannz.com)
聊聊那些在工作中常见的“信息不对称”。虽然这个名词几乎每个人都听到过,但实际上我觉得还是可以按照“人员,角色,岗位”三个维度拆分成 5 种不同的信息不对称区别。
by @技术头条 2023-11-29 23:49 查看详情
从登录会话看AD域分层管理模型 (blog.nsfocus.net)
AD(Active Directory)域中高权限用户的凭据泄露是最常见和严重的风险之一,实战中被攻击者利用会迅速导致域控失陷。本文介绍了现阶段可以从技术层面和管理层面遏制这类风险的技术方法和管理模型。
by @技术头条 2023-11-06 22:54 查看详情
从登录会话看AD域分层管理模型 (blog.nsfocus.net)
AD(Active Directory)域中高权限用户的凭据泄露是最常见和严重的风险之一,实战中被攻击者利用会迅速导致域控失陷。本文介绍了现阶段可以从技术层面和管理层面遏制这类风险的技术方法和管理模型。
by @技术头条 2023-11-06 22:54 查看详情
记录一下当年把 FreeBSD 中 zlib 砍到只剩一份的过程 (blog.delphij.net)
软件项目中,实现同一功能的源代码只保留一份是一项十分重要的最佳实践,这种做法可以带来许多显而易见的好处。

FreeBSD 是一个有相当长历史的项目,而 zlib 是一个很常用的库,并且当时在整个系统中有多处不同的副本,因此我们希望这个迁移的过程尽可能平滑而尽量不要直接导致整个项目无法联编,或是需要长时间禁用某些模块的情况。
by @技术头条 2023-10-24 23:52 查看详情
如何建立你的离岸交付团队? (insights.thoughtworks.cn)
这里有四种离岸交付合作模式:Team Extension Model,Hybrid Collaboration Model,E2E Collaboration Model和Onshore/Offshore Collaboration Model。每种模式都有其优势和挑战,需要根据组织自身情况选择合适的模式。其中E2E Collaboration Model是一种全面的离岸交付模式,适用于团队成熟度较高、业务模块相对独立的情况。
by @Thoughtworks 2023-08-09 13:49 查看详情
一次「找回」TraceId的问题分析与过程思考 (tech.meituan.com)
用好中间件是每一个开发人员的基本功,一个专业的开发人员,追求的不仅是中间件的日常使用,还要探究这背后的设计初衷和底层逻辑,进而保证我们的系统运行更加稳定,让开发工作更加高效。结合这一主题,本文从一次线上告警问题出发,通过第一时间定位问题的根本原因,进而引出Google Dapper与MTrace(美团内部自研)这类分布式链路追踪系统的设计思想和实现途径,再回到问题本质深入@Async的源码分析底层的异步逻辑和实现特点,并给出MTrace跨线程传递失效的原因和解决方案,最后梳理目前主流的分布式跟踪系统的现状,并结合开发人员日常使用中间件的场景提出一些思考和总结。
by @技术头条 2023-07-02 23:39 查看详情
在DDD中建立领域模型 (insights.thoughtworks.cn)
我们应该基于领域概念设计领域模型,然后再采用合适的模式降低领域模型的复杂度,进一步增加领域模型的表达能力。
by @Thoughtworks 2023-02-22 09:20 查看详情
图解 Flink 滚动窗口、会话窗口和滑动窗口 (www.awaimai.com)
Flink 作业中的窗口是指一种对无限数据流设置有限数据集,从而实现了处理无线数据流的机制。

窗口本身只是个划分数据集的依据,它并不存储数据。

当我们需要在时间窗口维度上对数据进行聚合时,窗口是流处理应用中经常需要解决的问题。Flink的窗口算子为我们提供了方便易用的API,我们可以将数据流切分成一个个窗口,对窗口内的数据进行处理。

窗口主要有两种,一种基于时间的时间窗口(TimeWindow),一种基于数量的计数窗口(CountWindow),计数窗口与时间无关,本文主要讨论时间窗口。
by @技术头条 2022-08-19 00:16 查看详情
Systrace 流畅性实战 3 :卡顿分析过程中的一些疑问 (androidperformance.com)
Systrace (Perfetto) 工具的基本使用如果还不是很熟悉,那么需要优先去补一下上面列出的 Systrace 基础知识系列,本文假设你已经熟悉 Systrace(Perfetto)的使用了
by @技术头条 2022-08-19 00:10 查看详情