sip事务

简介

        事务(Transaction)是SIP通信中的基本单位。事务是指一个请求和对该请求的所有响应的集合,这些响应包括零个或多个临时响应和一个或多个最终响应。事务是SIP通信中的基本单元,用于确保请求和响应的可靠传输。

        Transaction(事务) 事务发生于两个UA之间【1】,包含从UA1发出请求给UA2,到UA2响应给UA1的最终消息(non-1xx message)之间的所有消息. 如果请求是一个"INVITE"消息,并且最终的响应是一个non-2xx消息,那么该事务包含一个"ACK"响应消息(ACK-branch和INVITE-branch值一样).如果服务器的响应是一个2xx消息,那么随后的ACK具有独立的branch值,但同样属于INVITE事务【2】。

注解【1】:两个UA,可以是UAC与UAS; UAC与服务器; 服务器与UAS等。

注解【2】:在SIP协议中,ACK仅与INVITE请求配套使用:证实已收到INVITE请求的最终响应。不管服务器发来的最终响应code码是多少,客户端都会发送一个ACK消息通常用于确认对INVITE请求的最终响应,以建立一个可靠的会话。故而:此种情况下,ACK消息作为一个独立的SIP请求,确实具有自己的branch值来确保事务的唯一性和正确性。然而,尽管它作为一个独立的请求存在,但在SIP协议的上下文中,它仍然被视为INVITE事务的一部分

注意:Via头域branch参数用于唯一标识一个特定的请求消息及其对应的响应消息集合,即一个事务。在SIP网络中,即使两个请求消息的其他部分完全相同,只要它们的branch参数不同,它们就会被视为两个不同的事务。即:唯一标识一个sip事务

举例1:ACK-branch和INVITE-branch值一样。

举例2:ACK-branch具有独立值

分类

1. 根据请求是否由INVITE发出,分为:INVITE事务和非INVITE事务

1)INVITE事务

        INVITE事务是用于处理SIP INVITE请求的,它包括一个三次握手过程:客户端发送INVITE请求,服务端发送响应,客户端发送ACK确认。INVITE事务的特点是需要维持一定时间的持续周期,以便处理可能的重传和等待最终的应答。在不可靠的传输方式(如UDP)下,客户端事务会以递增的时间间隔重传INVITE请求,直到收到最终应答或达到重传限制。

事务周期:从发送INVITE请求--ACK最终响应 

2)非INVITE事务

        非INVITE事务处理的是非INVITE请求方法,如REGISTER、SUBSCRIBE、BYE等。这些事务不使用ACK,它们是简单的请求-应答交互,不涉及三次握手过程。对于非INVITE事务,如果使用非可靠传输,请求会被间隔倍增T1(默认500ms)的时间重传,直到达到T2(2s)。如果收到临时应答,重传会继续,直到达到T2。服务端事务在收到请求后会发送响应,并在必要时重传最后一个应答。 

事务周期:从发送非INVITE的sip请求--状态码响应(可以是200,也可以是404等)

总结来说,INVITE事务专门用于建立会话,涉及复杂的交互和重传机制,而非INVITE事务用于其他SIP功能,如注册和事件通知,其交互更为直接和快速。

2. 根据角色不同,分为:客户端事务和服务器端事务。

客户端事务

1)角色与功能:

        SIP客户端事务是由用户代理客户端(User Agent Client,UAC)发起请求时创建的,负责将请求发送给服务器端事务,并接收来自服务器端事务的响应。

        客户端事务的主要功能是发送SIP请求(如INVITE、REGISTER、SUBSCRIBE等),并处理来自服务器端事务的响应。

2)生命周期:

        对于INVITE请求,客户端事务的生命周期包括发送INVITE请求、等待初始响应(如100 Trying、180 Ringing)、等待最终响应(如200 OK或4xx、5xx、6xx类型的响应),以及ACK请求以确认通话建立。

        对于非INVITE请求(如REGISTER、SUBSCRIBE等),客户端事务的生命周期包括发送请求、等待初始响应和处理可能的重试。

服务器端事务

1)角色与功能:

        SIP服务器端事务是由用户代理服务器(User Agent Server,UAS)或代理服务器在接收到SIP请求时创建的,负责处理请求并发送响应给客户端事务。

        服务器端事务的主要功能是接收SIP请求,根据请求的内容执行相应的操作(如建立通话、注册用户等),并发送响应给客户端事务。

2)生命周期:

        对于INVITE请求,服务器端事务的生命周期包括接收INVITE请求,发送初始响应(如100 Trying、180 Ringing),等待最终响应(如200 OK),并等ACK请求以确认通话建立。

        对于非INVITE请求,服务器端事务的生命周期包括接收请求,发送响应,并可能处理重试或最终响应。

答疑

1. 一次完整的sip请求(INVITE请求或非INVITE请求),是否可以看作既属于客户端事务也属于服务器端事务?

        一次完整的sip请求在SIP(Session Initiation Protocol,会话初始协议)中确实涉及到了客户端事务(Client Transaction)和服务器端事务(Server Transaction)两个概念,但它们并不是在同一个实体或角色上同时存在的,而是分别对应于请求的发起方和响应方。因此,不能简单地看作既是客户端事务也是服务器端事务,因为它们分别对应于不同的角色和职责。从各自的角色(UAC/UAS)出发,一次完整的sip呼叫,既是客户端事务也是服务器端事务。

2. 一次完整的sip请求过程,是否可以看作既属于客户端事务周期也属于服务器端事务周期?

        可以看作同时涉及了客户端事务周期(Client Transaction Lifecycle)和服务器端事务周期(Server Transaction Lifecycle),但这两个周期是分别在不同的实体(即客户端和服务器)上发生的。在各自的角色上看一次完整的sip请求过程可以看作同时是客户端事务周期和服务器端事务周期

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值