newcoderlife

《下一代网络技术》二
SIP 协议中的 Session(会话)、Dialog(对话)、Transaction(事务)有什么不同?在分析 ...
扫描右侧二维码阅读全文
30
2019/04

《下一代网络技术》二

SIP 协议中的 Session(会话)、Dialog(对话)、Transaction(事务)有什么不同?在分析 SIP 协议消息格式及字段含义的基础上,说明在 SIP 协议中如何标识一个会话、一个 Dialog、一个事务?

Session

会话是指在终端之间的媒体流,包括音视频和文件。在 SIP 协议中主要是指在链路上的话音数据。

Dialog

对话是指用户代理之间的联系,由 SIP 协议建立并持续一段时间。

Transaction

事物是指从客户端到服务器的一组请求以及对应的答复。

区别与标识

区别主要是三者的层次不同,在逻辑上存在大小之分。对话和事务处于信令层,而会话处于媒体传输层。Session 主要是在链路建立之后的通信,Dialog 可以包含多个 Transaction,可以通过 Call-ID、local tag、和 remote tag 进行标识。

SIP 协议中的用户代理(UA:User Agent)、用户代理客户端(User Agent Client)、用户代理服务器端(User Agent Server)、代理服务器(Proxy Server)这些实体有什么不同?

用户代理客户端

一个对象,可以创建新请求,并发往用户代理服务器。

用户代理服务器

相应 SIP 请求。

用户代理

包含用户代理客户端和用户代理服务器

代理服务器

服务器和终端的中介,可以代表终端发出请求。

有状态的代理(Stateful Proxy)和无状态的代理(Stateless Proxy)有什么不同?

有状态代理

保存请求的相关信息,每个请求可以默认地使用以前的请求信息。服务端容易对客户状态进行管理,服务端并不要求每次客户请求都携带额外的状态数据。

无状态代理

客户信息必须全部来自于请求所携带的信息以及其他服务器自身所保存的、并且可以被所有请求所使用的公共信息。并不保存客户请求的数据,客户在请求时需要携带额外的状态数据,无状态服务器更加健壮,重启服务器不会丢失状态信息,这使得维护和扩容更加简单。

阅读课程实验一中使用到的服务器软件 opensips 的文档以及参考资料“SER - Getting Started”第六章“HelloWorldser.cfg”及第10章“Call Forwarding ser.cfg”,说明呼叫转移(Call Forwarding)业务(/功能)的实现原理。

呼叫转移业务主要是由一个 SIP 服务器作为中转,通过配置呼叫转移策略,将客户端 A 发往客户端 B 的数据包转往客户端 C。这一配置可以通过 OpenSIPS 的配置文件完成,也可以由用户在数据库中添加相关的记录来实现。

分析opensips软件的实现原理,分析opensips软件在不需要重新编译的情况下,仅通过opensips.cfg文件就可重新配置opensips软件以实现新的业务功能的基本原理。

通过 OpenSIPS 源码进行分析,发现它的脚本文件解析是通过 lex 和 yacc 实现的,在 main 函数里有 yyparse() 函数可以解析 opensips.cfg,解析完成后,执行速度可以达到 C 原生代码级别。在其它的高级语言中,例如在 Java 中,这一特性是通过反射实现的,可以通过重载类的加载器来实现相关内容。

Last modification:June 27th, 2019 at 12:21 pm
点击广告投喂博主 以获得更快的访问速度!

Leave a Comment