
事务的概念非常难以理解,网上有很多这方面的资料,读者可以查阅。
Transaction occurs between a client and a server and comprises all messages from the first request sent from the client to the server up to a final (non-1xx) response sent from the server to the client. If the request is INVITE and the final response is a non-2xx, the transaction also includes an ACK to the response. The ACK for a 2xx response to an INVITE request is a separate transaction.
这里的示例仅对事务加以简单说明(RINGING 是 1xx 响应,OK是 2xx 响应,所以是两个事务),非rfc3261官方资料。
在事务层上面的是事务用户(TU)。每个SIP实体,除了无状态代理都是一个事务用户。当一个TU希望发送一个请求时,它会创建一个用户事务实例,然后把这个实例传递给这个请求,并且携带目的地IP地址,端口和传输请求。一个创建了用户事务的TU也可以取消这个用户事务。当用户取消了一个事务时,它会请求服务器停止进一步的处理,变换到退出的状态,这个状态是这个事务初始化前的退出状态,并且生成对这个事务生成错误响应消息。这个处理过程是通过一个CANCEL 请求来处理,它构成了属于自己的事务,但是仅针对这个被取消的事务(Section 9)。
事务的处理包括了多种不同的状态,主要包括以下六种(非官方资料)状态:

- SIP 要素也就是用户代理用户测,服务器,无状态代理,有状态代理和注册。SIP要素包含了一个核心模块,这个核心模块来对各自其要素进行区别处理。在核心要素模块中,除了无状态代理以外,其他的要素都是事务用户。这里,UAC和UAS的核心处理流程越来于method。关于methods支持了多种规则和定义(Section 8)。对于UAS来说,这些规则控制请求的结构;对于UAS来说,这些规则控制请求的流程和生成响应消息。因为,注册在SIP协议中扮演着一个非常重要的角色,一个处理注册的UAS会设定一个特别的名称注册。在Section 10中描述了UAC和UAS核心的对REGISTER method的处理方式。Section 11描述了UAC和UAS核心对OPTIONS method的处理方式,它决定UA的支持能力。
- 某些其他的请求是在dialog中发送。一个dialog是一个介于用户代理之间的peer-to-peer SIP关系,这种关系存在于一定时间内。这个dialog支持介于用户代理之间的消息的顺序传递和正确的请求路由。在这个细节规定中,INVITE method 是唯一的方法来创建dialog。当一个UAC在dialog中发送一个请求时,它会遵守一般的UAC规则,这些规则在Section 8会加以讨论,它也会遵守 mid-dialog 请求时的规则。Section 12讨论在dialog和表述它们的结构和维护流程。
- 在SIP协议中,最重要的method是INVITE method,它用来创建参与方之间的会话。一个会话是参与方的汇总和它们之间通信的的媒体流交互。Section 13讨论了如何实现会话发起,这些导致了一个或者多个SIP dialog生成。Section 14讨论了如何在一个dialog中通过INVITE用法来修改会话属性。最后,在section 15中讨论如何结束一个会话。
- 章节8,10,11,12,13,14,和15的流程完整讨论了UAcore(Section 9描述了取消流程,这个取消流程支持都支持UA core 和 proxy core)。Section 16讨论代理的要素,这些要素支持了介于两个用户代理之间的信息路由。
参考资料:
https://www.rfc-editor.org/rfc/pdfrfc/rfc3262.txt.pdf
关注微信公众号:asterisk-cn,获得有价值的Asterisk行业分享
Asterisk freepbx 中文官方论坛:http://bbs.freepbx.cn/forum.php
Asterisk freepbx技术文档: www.freepbx.org.cn
融合通信商业解决方案,协同解决方案首选产品:www.hiastar.com
Asterisk/FreePBX中国合作伙伴,官方qq技术分享群(3000千人):589995817