原文地址:http://xingyunbaijunwei.blog.163.com/blog/static/765380672012659814202/


1. 基本概念


Messages(消息) 消息是在服务器和客户端之间交换的独立文本, 有两种类型的消息,分别是请求(Requests)和响应(Responses).


Transaction(事务) 事务发生于客户端和服务器端之间,包含从客户端发出请求给服务器,到服务器响应给客户端的最终消息(non-1xx message)之间的所有消息. 如果请求是一个"Invite"消息,并且最终的响应是一个non-2xx消息,那么该事务包含一个"Ack"响应消息.如果服务器的响应是一个2xx消息,那么,随后的ACK是一个单独的事务.


Dialog(对话) 对话是两个UAs(user agent) 之间持续一段时间的端到端(peer-to-peer)的SIP 关系. 一个对话由一个Call-ID, 一个local tag 和 一个remote tag来标识.对话过去也叫做"call leg".dialog的建立是收到UAS的响应(To tag)时开始建立的。收到180响应时建立dialog叫做早期对话(early dialog),收到2XX的应答开始才是真正的dialog建立。


Session(会话) 
session 是媒体交换之后才建立的。具体而言就是通过offer/answer方式交换sdp的媒体。 session的建立可以使INVITE-200 也可以是200-ACK。这要看媒体的交换发生的时间。 具体来说,INVITE 中的消息体用sdp语言来描述自己可处理的媒体类型,200OK中带回UAS端可处理的媒体类型。这个时候媒体交换就算是完成了。也就是session建立起来了。


Call(呼叫) 一个呼叫是由一个会议中被同一个发起者邀请加入的所有成员组成的。一个 SIP 呼叫用全局唯一呼叫标识(CALL_ID)来识别。因此,如果一个用户被不同的人邀请参加同一个多点会议,每个邀请都有一个唯一的呼叫。



2.关系详解


SIP 中的Dialog,session,transaction和call  _sip


说明:

呼叫(Call)caller呼叫callee的号码来建立一系列的对话(Dialogs),这些对话组成了一个呼叫(Call).


会话(Session) 跟SDP内信息相关。在SDP中,多媒体会话指的是一组的媒体发送方和接收方及媒体流从发送方流向接受方。会话是由SDP里的user name, session id, network type, address type, 和源处地址元素来确定的。只有当媒体协商成功后,会话才能被建立起来。如图,当caller收到携带SDP的200 OK后开始建立会话。 


对话(Dialog) 指的是一对一的持续一段时间的连接关系,由Call-ID, From-tag和To-tag确定。当三个元素齐全的时候,即对话处于确定阶段时,对话已经建立起来。 如图,收到180 RINGING对话处于初始状态,收到200 OK对话处于确定状态。


事务(Transaction) 包括发送的请求和相应的回应,指的是UA之间的请求和应答关系。而VIA中的branch参数用于确定事务。 事务是由事件(方法)来引起的,一个方法(Method)的建立和到来都将建立新的事务。 如图,INVITE、RINGING和200 OK是一个事务,BYE和200 OK是另外一个事务。