在我们的文章中和网络上的资料中,我们会经常使用SIP协议中一些专有的技术名称。对于读者来说,这些专有名词基本概念可能非常了解。但是这些名词在具体的示例中产生的绑定关系和其生成的流程是一个非常容易让人费解的内容,例如呼叫中发生了几个Dialog,发送了几个Transactions,ACK是否算一个独立的事务等。以下图例说明了一个最简单的示例包括了呼叫中Dialog,transaction数量和它们之间的关系。读者了解这些流程和关系对其分析和排查技术问题有极大的帮助。
以上示例仅是一个点对点的呼叫示例,当然,在实际生产环境中,双方呼叫不仅仅是一个点对点的呼叫。在实际生产环境中,大部分呼叫需要经过一个代理服务器来处理。今天,我们结合几个具体的示例重新和大家分享一下比较完整的呼叫流程,看看在呼叫过程中到底发生了多少个Dialog和Transactions。
为了回答这些问题,我们需要首先介绍一下rfc3261的定义细节,然后结合RFC3261规范给出几个示例来解释Dialog和Transactions发送的数量。
因为以前的文章中大量介绍了这些名称的基本概念,我们不再花费时间过多介绍其它完整的概念和相关背景知识。读者可查阅我们的历史文档或者参考RFC3261来进一步了解学习。
通常大家所说的SIP call或者call其实在规范中没有非常明确的官方定义,这是一个非常口语化通俗的的说法或表达方式。一般来说,call可以表示为session,一个SIP呼叫至少具有以下几个方面的特点:
- 首先是一个session 会话
- 其次,它必须包括所有的初始,管理和结束会话的所有消息
- 通过Call-ID 头来确认其身份
为了能够让读者完整准确理解我们接下来的讨论,我们使用一个稍微复杂一点的forking呼叫的示例来说明call,dialog和transactions的关系以及呼叫过程中各自的数量。
更多细节,查看微信公众号(Asterisk开源派)文章: