SIP事务的理解

 http://blog.sina.com.cn/s/blog_4b839a1b010007ts.html

事务(Transaction)的理解

Transaction有交易的意思,Sip是个事务型的协议,因为它需要各部件间互通消息来实现。

事务所处的位置如图:

SIP事务的理解

             图一 事务环境图

1)事务处理主要用于处理消息的交互,它的实现使用了状态机。向上它向事务使用者(TU)提交事务的触发事件(计时器超时和传输层消息),向下把所要发送的Sip消息包传送给传输层代为转发。

2)而在事务中一定有客户端和服务器端,两者没有必然的界限。只要是发起请求的,在该事务中充当的当然是客户端,接受请求的必然是服务器端。所以对于代理服务器来说,相对下面的请求来说它是服务器端,对于上面来说却是代发请求的客户端。

 

事务分类

事务根据类型还分Invite和Non-Invite型,即邀请和非邀请类型。Non-Invite类型事务主要处理的是除Invite和ACK类型外的所有Sip信息。而非Invite里的ACK信息要处理的话就不属于事务处理的范围了,一般由程序自己把信息发送给传输层直接发送。Invite需要三次握手,所以需要的时间比较长;而Non-Ivite类型只需两次握手,要求回应时间短。

 

所以由RFC3261规定,Sip中主要有四种事务,对应有四种状态机:

Invite Client Transaction(ICT):    

Non-Invite Client Transaction(NICT):  

Invite Server Transaction(IST):   

Non-Invite Server Transaction(NIST): 

 

其中有个特别的地方在于:对于2**回应的ACK不属于ICT的事务处理范围

原因在于收到200(OK)的ACK上。

对于接收到这些ACK的用户来说,如果非最后的客户端,即UA接收到该消息的话将关掉该事务再转发该消息,不再理会之后的事情。而收到200的UAC可能把ACK直接发往真正的UAS,此时不再通过代理服务器或重定向服务器。而前面提到的事务的概念指的是两者之间的交互,可此时UAC要发往信息不再是之前存在的事务(交易者已变)。所以此时发送ACK已不是事务的范畴了,同样ACK的重发和UAS的200重发都不再是事务的范畴,因为发送200的UAS和接收到200的UAC的事务状态已置为结束。

 

    ****本文只是了解事务基本,对于细节还得看RFC才行,特别是四种事务的状态机图。

 

你可能感兴趣的:(SIP)