SIP(Session Initiation Protocol,会话初始协议)

一、概念:

SIP(会话发起协议): 是一个应用层的信令控制协议, 定义了用户间交互式媒体会话的发起,修改和终止过程.

SIP默认使用UDP 5060端口,但也可以使用TCP 5060。  

SIP的四项基本功能:定位用户,将SIP地址解析为IP地址;

协商Session的feature和capability;

在进行呼叫时改变会话参数;

负责会话的建立和中断。

会话

会话ID: 由Call-ID,和一个本地tag和远程tag组成。

对话是表现为两个用户代理(UA)之间的持续一段时间的点对点的SIP关系(从INVITE到BYE通话的整个过程)

事务:

一个SIP 事务由一个单个请求和这个请求的所有应答组成,这些应答包括了零个或者多个临时应答以及一个或者多个终结应答。在事务中,当请求是一个INVITE(叫做INVITE事务),当终结应答不是一个2xx应答的时候,事务还包括一个ACK。如果应答是一个2xx应答,那么ACK并不认为是事务的一部分。

一个会话中分为多个事务,有服务端事务和客户端事务。同一个事务的响应和其原请求的CSeq字段的序号和方法相同。 

二、SIP协议:

SIP分层:第一层的是它的语法和编码层。第二层是传输层。第三层是事务层。在事务层之上是事务用户(TU)

  请求:请求行:MESSAGE sip:[email protected]:6010 SIP/2.0

  应答:状态行:SIP/2.0 200 OK
  头域:

From:域也同样包含一个显示姓名(Alice)和一个SIP或者SIPS URI(sip:[email protected])这个URI用来标志请求的原始发起者。From域必须包含一个由UAC产生的新的”tag”参数。

TO:域包含了显示姓名和一个SIP或者SIPS URI.请求将首先传输到这个URI中。这个域内的地址可以是也可以不是请求的最终接收者。

CallID:包含一个全局的唯一标志,用来唯一标志这个呼叫,通过随机字串和softphone 的自己名字或者IP地址混和产生的。在对话中的任一UA的所有请求和所有应答的Call-ID必须一致。

CSEQ或者Command Sequence: 用来区分和作为事务的顺序使用的。包含了一个整数和一个请求名字。这个Cseq数字是顺序递增的。CSeq: 1 INVITE

VIA:用来描述请求当前经历的路径的,并且标志了应答所应当经过的路径。Via头域的branch ID参数提供了事务的标志,并且用于proxy来检查循环路由。只有当需要通过选择传输设备到达下一个节点(hop)的时候,才需要在头域中包含Via域。当UAC创建一个请求,它必须在头域中添加一个Via域。如果在应答中,有不只一个Via头域值存在,那么UAC应该丢弃这个消息。

Contact: 提供了访问后续请求的特定UA实例的联系方法.

Max-Forwards:最大转发数量限制了通讯中转发的数量。它是由一个整数组成,每转发一次,整数减一。

Route:用于强制一个请求经过一个proxy路由列表。

Route头域:用于无状态的事务路由。

一个合法的 SIP 请求必须至少包含如下头域:TO, FROM, Cseq, Call-ID, Max-Forwards, Via;这些字段在所有SIP请求中必须包含。这 6个字段是 SIP 消息的基本组成分,他们提供了用于路由用的核心信息,包含了消息的地址,响应的路由,消息传递次数,详细的顺序,事务的唯一标志。

 

二、SIP组件:

User Agent(SIP终端):

User Agent Clients (UAC) –发起呼叫的功能实体.

User Agent Server (UAS) –接收呼叫的功能实体.

用户代理按照是否保存状态可分为有状态代理、有部分状态用户代理和无状态用户代理。IP电话、PC、路由器等都能做UA,UAC 和 UAS -都能终止一个呼叫.  

Proxy Server: 代理服务器是同时作为服务器和客户机的中间实体,其目的是代表其他客户机生成请求。请求被内部处理或可能在翻译之后将其传递到其他服务器。主要起到call routing、authentication、authorization、address resolution、loop detection的功能。 

Redirect Server: 重定向服务器接受 SIP请求,并将被呼叫方的 SIP地址映射成零个(如果没有可知地址)或更多的新地址并且将它们返回客户机。不像代理服务器,重定向服务器不传递请求到其他服务器。

Registrar Server: UA可以向Registrar Server注册自己的位置信息,Registrar Server将位置信息保存在数据库中(也可保存在其他server的数据库中)以回复其他server发来的location request。

以上几种服务器可共存于一个设备,也可以分布在不同的物理实体中。SIP服务器完全是纯软件实现,可以根据需要运行于各种工作站或专用设备中。

 

三、SIP消息:

SIP消息有两种:客户机到服务器的请求(Request),服务器到客户机的响应(Response)。

SIP消息由一个起始行(start-line)、一个或多个字段(field)组成的消息头、一个标志消息头结束的空行(CRLF)以及作为可选项的消息体message body)组成。其中,描述消息体(message body)的头称为实体头(entity header),其格式如下:

SIP消息=起始行/状态行

*消息头部(1个或多个头部)

CRLF(空行)

〖消息体〗。

起始行分请求行(Request—Line)和状态行(Status—Line)两种,其中请求行是请求消息的起始行,状态行是响应消息的起始行。

消息头分通用头(general-header)、请求头(request-header)、响应头(response-header)和实体头(entity-header)4种。

1. REGISTER  

UA client使用此message向server注册以标明自己的位置。

一个REGISTER请求可以增加一个address-of-record和一个或者多个联系地址之间的绑定。Request-URI无用户部分。

2. INVITE

UAC发送此信息用以邀请UAS加入会话(包择一对一通话或conference),其实就是一个call setup message。

3. ACK

为INVITE回复一个确认信息。

4. CANCEL

用来中止一个还没建立(在建立过程当中)的呼叫。

UAS接收到对一个INVITE请求的CANCEL请求,当这个INVITE还没有得到终结应答的时候,UAS会“停止振铃”,并且给INVITE请求一个应答(487)。

客户端:发送INVITE后,客户端等到了第一个临时应答后才能发送CANCEL。

5. OPTIONS

用来查询server的capability。

提供客户端一个手段来查询服务端支持的方法,内容类型,扩展,codecs等。

6. BYE

用来中断呼叫。

7. INFO

发送会话中信息而不改变会话状态。

8. PRACK

用于回复一个临时性的请求

9. REFER

使用这个REFER指向另一个电话,从而完成call transfer,联系第三方。

10. SUBSCRIBE

该方法用来向远端端点预订其状态变化的通知。11. NOTIFY

12. UPDATE

在接到初始INVITE的回复时,UAC用UPDATE修改一个呼叫的参数而不影响该会话的当前状态,例如QoS等。

13. MESSAGE:通过在其请求体中承载即时消息内容实现即时通讯;

 

四、SIP 呼叫流程:

 

附录:缩略语

ACD: Automatic Call Distribution 自动呼叫分配

PBX: Private Branch eXchang用户级交换机

NGN:  Next Generation Network 下一代网络

IMS: IP Multimedia Subsystem  IP多媒体子系统

IVR: Interactive Voice Response 交互语音应答系统

ALG: Application Layer Gateway 应用层网关

IM:   Instant Messaging 即时通讯

SMS: Short Message Service短信服务

HA:   High Availability 高可用性

PMS: Property Management System财产管理系统

DISA:     Direct Inward System Access直接拨入系统访问

VRRP:     Virtual Router Redundancy Protocol 虚拟路由器冗余协议

VAD:  Voice Activity Detection静音监测

CNG: Comfort Noise Generator舒适背景噪音生成

ToS: Type of Service 服务类型

DSCP: Differentiated Services Code Point 差分服务代码点

DID: 直接拨入

DOD:直接拨出

你可能感兴趣的:(SIP(Session Initiation Protocol,会话初始协议))