以下定义对SIP协议非常重要。
Address-of-Record: 一个 address-of-record (AOR) 是一个SIP或者SIPS URI地址,它指到了一个域,同时它支持定位服务。定位服务可以映射这个URL到其他的URL,其他的URL可能绑定了用户的有效性和可用性。典型的示例是定位服务通过注册来实现。AOR 经常被认为是一个用户的“公开地址”。
Back-to-Back User Agent:背靠背用户代理(B2BUA)是一个逻辑实体,它作为一个UAS来接收一个请求,处理这个请求。为了决定如何应答这个请求,它的工作方式又类似于一个user agent client (UAC)来生成请求。不像代理服务器,它会保持dialog状态,并且必须介入到整个它所创建的dialogs中发送的所有请求。因为,它自己本身就是一个UAC和UAS的结合体,本身并不需要特别明确的定义来定义它的行为。
Call:呼叫是一个非正式的名称,它指的是介于终端之间的通信,通常情况下创建呼叫的目的是为了多媒体的沟通。
Call Leg:dialog另外的名称[31];已不在此规定中使用。
Call Stateful: 一个代理是有状态呼叫,它具有这样的特征。如果它保持dialog整个状态,这个状态一直持续从初始化INVITE开始到BYE请求结束。一个call stateful 代理总是一个事务状态,但是事务状态不一定是一个有状态呼叫代理。
Client:终端用户是任何一个网络的要素,它发送SIP请求和接收SIP响应。用户端可能,或不可能直接和真人用户进行互动。用户代理终端和代理是终端。
Conference:一个对媒体会话,它包含了多个参与方。
Core:Core 指定了某些功能,这些功能专门针对某些SIP实体的参与方类型。例如,具体指定了是一个状态或者非状态代理,用户代理或者注册。除了某些非状态代理以外,所有的core功能都是事务用户。
Dialog:dialog是一种端对端的SIP关系,它介于两个UA之间,这两个UA在一定时间内维持着某种绑定关系。一个dialog的创建是通过SIP消息,例如对INVITE请求的2xx 响应。一个Dialog是通过一个call identifier, local tag,和一个remote tag来定义的。Dialog以前称之为一个call leg,call leg在RFC2543定义。
Downstream:在事务内的一个消息前转的,它涉及到了一个请求流程,这个请求流程是从用户代理客户端到用户代理服务器端的处理方向。
Final Response: 是一个响应消息,它结束SIP事务,相反的,一个provisional response(临时响应)则不会结束事务。所有All 2xx,3xx,4xx,5xx 和 6xx responses 都是最终响应消息。
Header: 头是SIP消息的组件,它传递消息的信息。它由一系列的头域值构成。
Header Field:头是SIP消息的组件。一个头域可以表现为一个或多个头域值。每一行头域值包含头域值名称和一个或者多个头域值。如果有多个头域值的话,可以通过逗号分开。一些头域值仅有单行头域,它总是以单行头域出现。
Header Field Value: 一个头域是一个单个数值;它由零个或多个头域值构成。
Home Domain:主机域对SIP用户提供服务。典型的解释是,这是一个域名,它出现在注册AOR的URL中。
Informational Response:类似于一个临时响应。
Initiator, Calling Party, Caller: 一方发起一个会话(和dialog),它带着一个INVITE请求。一个呼叫方始终保持一个角色,这个角色从它开始发送这个初始的INVITE开始计算,这个INVITE创建了一个dialog,一直到结束这个dialog。
Invitation:一个INVITE请求。
Invitee, Invited User, Called Party, Callee: 一方接收一个INVITE请求,这个请求的目的是为了创建一个新的会话。被呼叫方始终保持这个角色,这个角色从它开始接收这个INVITE开始计算,一直到dialog结束,这个dialog是由那个INVITE创建。
Location Service:定位服务用来支持一个 SIP 重定位或代理服务器来获得关于被呼叫方可能存在的地址信息。它包含一个绑定的address-of-record列表数值,这些从从零个到多个contact 地址。这个绑定关系可以通过多种方式来创建或者删除;此协议细节中定义了一个REGISTER method来更新绑定关系。
Loop:一个已到达代理的请求,经过前转以后,后来又返回到同样的代理。当这个请求第二次到达代理时,这个请求的Request-URI确认是第一次的请求,并且其他影响代理操作的头域值不会改变,因此代理会在这个请求中做出和第一次同样的处理决定。回环的请求是一种错误,流程会检测回环请求,通过协议本身来处理这种回环请求。
Loose Routing:如果代理遵守本规范来处理路由头域,代理会被告知是一个松散路由。这些流程从一系列的代理中分开了目的地请求(出现在Request-URL中),代理所遵守的机制被称之为松散路由。
Message: 消息是在SIP要素之间发送的数据,它是协议的一部分。SIP消息可以是请求或者响应。
Method: method是一个基本功能,一个请求在服务器端被激活。Method在请求自己的消息中传输。常见的methods是INVITE和BYE。
Outbound Proxy: 它是一个代理,负责接收从客户端发出的请求,即使它可能不是一个通过Request-URI解析度服务器。 通常情况下,一个UA 可以通过outbound proxy手动配置,或通过自动配置协议进行学习。
Parallel Search:在并行查询中,一个代理会对可能存在的用户位置发送几个请求,这些可能存在的用户位置用来接收请求。而且,并行查询也不是发送一个请求,然后等待收到这个请求的最后响应,然后发送接下来的请求。它不会等到前面的请求响应收到以后再发送下一个请求。
Provisional Response: 它是临时响应,临时响应表示服务器端的处理进程,但是临时响应不会结束SIP事务。1xx是临时响应,其他的响应是最终响应。
Proxy, Proxy Server:代理是一个中间实体,它的工作方式既是一个服务器端,又是一个客户端,作为客户端的作用是支持其他客户端发起请求。代理服务器基本功能是扮演路由的角色,它的工作就是确保请求被发送到比较接近目标用户的其他实体。代理也可以执行一些强制的策略(例如,确保用户被允许呼叫)。代理可以解析请求消息的部分消息内容,如果必要的话,在一个请求消息被前转之前,代理可以重写请求消息的部分参数内容。
Recursion:递归处理。当用户在响应中的Contact 头域中产生一个或多个URLS的新请求时,用户会在3xx响应中产生递归。
- Redirect Server:重定向服务器是一个用户代理服务器,它会对接收的请求产生3xx 响应,重新定向用户,让用户联系其他可选的URL列表中的URI地址。
- Registrar: 注册服务是一个注册服务器,它用来接受REGISTER请求,负责把注册服务器接受的信息保存到定位服务所支持的domain,这个domain是注册服务器负责。
- Regular Transaction:正常事务是任何带method的事务,带INVITE, ACK,或者CANCEL的method的除外。
- Request::请求是一个由用户端发送到服务器的SIP消息,请求的目的是触发一个特别的操作。
- Response:响应是一个由服务器端发送到用户端的SIP消息,其目的是说明请求发送后服务器端回复的状态。
- Ringback:回铃是一种信令音(回铃音),它是由呼叫方应用程序生成,用来表示被呼叫方已经被提示(被呼叫方正在振铃状态)。
- Route Set:路由集是一组有序SIP或者SIPS URI的集和,它用来表示当发送一个特别的请求时所经过的代理列表。路由集通过路由头,例如Record-Route或者经过配置后获得。
- Server:服务器是网络中的一个要素,它用来接收请求,然后对其进行服务支持,并且对其请求返回响应消息。服务器的实例包括代理,用户终端服务器,重定位服务器和注册服务器。
- Sequential Search:在顺序查询中,代理服务器按照顺序尝试查询每个contact地址,并且,只有当上一个查询返回最终响应后才进行下一个查询的新的处理。 2xx或者6xx 的最终响应总是结束顺序查询处理。
- Session: 在SDP规范中:"一个媒体会话是一系列媒体发送方和媒体接收方,以及从发送方到接收方之间的媒体数据流。一个媒体会议就是一个媒体会话的举例。" (RFC 2327[1]) (对SDP定义的会话来说,一个会话由一个或多个RTP 会话构成)。就像定义中的那样,对于同一会话来说,一个被呼叫方可以被不同的呼叫方多次邀请。如果使用了SDP,会话通过SDP 用户名称,会话ID,网络类型,地址类型和在地址单元中的原始值域构成。
- SIP Transaction: 一个SIP 事务会发生在客户端和服务器端之间,它由第一个由客户端发出的请求开始到服务器端最终响应的所有消息构成(非1xx消息)。如果请求是INVITE,并且最终响应是一个非-2xx消息的话,这个事务也会对这个响应包括一个ACK。这个对于200 OK(INVITE的响应)的ACK来说,它是一个独立的事务处理。
关于SIP事务的定义,除了rfc3261中定义以外,笔者为了帮助读者能够比较完整地了解事务的真正概念,除了在老师文档中有过介绍以外,特别添加了图例来进一步说明什么是SIP的事务,另外,读者一定要注意官方定义中的加粗部分内容的解释。
- SIP Transaction:A SIP 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
另外,事务有分为客户端事务和服务器端事务处理方式。在不同的环境中扮演不同的角色。
![](http://www.ctiforum.com/uploadfile/2019/0102/20190102092644296.jpg)
配合rfc3261对事务的定义,我们通过以下图例详细说明一下事务的定义。通过rfc的定义,我们看出,以下呼叫流程包括了三个事务处理的流程。这里大家应该注意到是,如果请求是INVITE情况下的问题。第一个是INNITE到200 OK的流程,它是一个非200 OK的情况。因此,第二个是ACK,它是一个独立分离的事务处理。第三个事务是一个非INVITE请求,客户端发送到是BYE,然后回复200 OK。因此,从简单的流程中可以看出,这个dialog 包括了三个事务处理。
![](http://www.ctiforum.com/uploadfile/2019/0102/20190102092716162.jpg)
当然,每个事务都有各自的ID和其他属性来区别于其他的事务。每个事务的ID包括以下几个方面的属性:
- 通过Via-header 添加到branch ID
- Cseg header
- rfc 3261定义的branch ID 起始前缀“z9hG4bK”
以下是一个INVITE中的定义示例:
参考资料:
https://www.rfc-editor.org/rfc/pdfrfc/rfc3262.txt.pdf
http://www.aboutsip.com/aboutsip-intro_transactions_and_dialogs.pdf