SIP协议

1. SIP简介

SIP,全称Session Initiation Protocol,会话发起协议,是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。用于创建、修改、释放一个或多个参与者的会话,广泛应用于CS(Circuit Switched,电路交换)、NGN(Next Generation Network,下一代网络)以及IMS(IP Multimedia Subsystem,IP多媒体子系统)的网络中,支持并应用于语音、视频、数据等多媒体业务,同时也用于Presence(呈现)、Instant Message(及时消息)等特色业务。SIP类似于HTTP,基于IP协议的SIP利用了IP网络。

2. SIP的发展历程

二十世纪九十年代,Henning Schulzrinne教授与人共同提出通过Internet传输实时数据的实时传输协议(RTP,Real-time Transport Protocol),还与人合作编写实时流传输协议(RTSP,Real-time Streaming Protocol)标准提案,用于控制音视频内容再Web上的流传输。1996年,RFC 2543----第一个SIP规范;2001年,RFC 3261—SIP基础确立, RFC 3262对临时响应的可靠性作规定, RFC 3263确立SIP代理服务器的定位规则, FRC 3264提供提议/应答模型, FRC 3265确定具体的事件通知。

3. SIP的特点

  1. 不定义要建立的会话类型,只定义应该如何管理会话。

----------方便灵活地用于交互式游戏、音乐、视频点播、语音、Web会议等众多应用和服务。

  1. SIP消息基于文本,构建类似于HTTP。

--------方便开发人员使用通用的编程语言来创建应用程序,方便读取和调试,

  1. 重用MIME类型描述

--------方便与会话相关的应用程序可以自动启动。

  1. 重用现有的几个成熟的Internet服务和协议,例如DNS、RTP、RSVP等。

-------很多部分已经现成可用或到位,不必再引入新服务对SIP基础设施提供支持。

  1. 对SIP的扩充易定义。

-------可由服务提供商在新的应用中添加,不会损坏网络。网络中基于SIP的旧设备不会妨碍基于SIP的新服务。

  1. SIP独立于传输层,支持多设备功能调整和协商。

---------底层传输可以采用ATM(异步传输方式)的IP。SIP使用用户数据报协议(UDP)以及传输控制协议(TCP),将独立于底层基础设施的用户灵活地连接起来。如果服务或会话启动了视频和语音,仍然可以将语音传输到不支持视频的设备。

4. 通信要求

  1. 用户定位服务
  2. 会话建立
  3. 会话参与方管理
  4. 特点的有限确定

5. SIP会话构成

SIP会话使用多达四个主要组件:

  • SIP用户代理

SIP用户代理(UA)是终端用户设备,如用于创建和管理SIP会话的移动电话、多媒体手持设备、PC、PAD等。用户代理客户机发出消息,用户代理服务器对消息进行响应。

  • SIP注册服务器

包含域中所有用户代理的位置的数据库。在SIP通信中,这些服务器会检索出对方的IP地址和其他相关信息,并将其发送到SIP代理服务器。

  • SIP代理服务器

SIP代理服务器接受SIP用户代理的会话请求并查询SIP注册服务器,获取收件方用户代理的地址信息。然后将会话请求信息直接转发给收件方用户代理(如果其位于同一域中)或代理服务器(如果用户代理位于另一域中)。

  • SIP重定向服务器

SIP重定向服务器允许SIP代理服务器将SIP会话邀请信息定向到外部域。SIP重定向服务器可以与SIP注册服务器和SIP代理服务器同在一个硬件上。

这些系统通过传输包括了SDP协议(用于定义消息的内容和特点)的消息来完成SIP会话。

SIP通过以下逻辑功能完成通信

  • 用户定位功能:确定参与通信的终端用户位置
  • 用户通信能力协商功能:确定参与通信的媒体终端类型和具体参数
  • 用户是否参与交互功能:确定某个终端是否加入某个特定会话中
  • 建立呼叫和控制呼叫功能:包括向被叫“振铃”、确定主叫和被叫的呼叫参数、呼叫重定向、呼叫转移、终止呼叫等

情景说明1,SIP组件之间如何协调以在同一域中的用户代理之间建立SIP会话:
SIP协议_第1张图片
用户A使用SIP电话,用户B有一台PC,运行支持语音和视频的软客户程序。加电后,两个用户都在ISP(网络服务提供商)网络中的SIP代理服务器上注册了他们的空闲情况和IP地址。
1.呼叫用户B:

用户A发起此呼叫,告诉SIP代理服务器要联系用户B

2.查询B在哪里:

SIP代理服务器向SIP注册服务器发出请求,要求提供用户B的IP地址

3.响应B的SIP地址:

SIP代理服务器收到SIP注册服务器查询到的用户B的IP地址

4.呼叫:

SIP代理服务器转发用户A和用户B进行通信的邀请信息(使用SDP),包括用户A要使用的媒体

5.响应:

用户B通知SIP代理服务器可以接受用户A的邀请,且已经做好接收消息的准备

6.响应:

SIP代理服务器将此消息(用户B接受A的邀请)传达给用户A,从而建立SIP会话。然后,用户创建一个点到点的RTP连接,实现用户间的交互通信。

情景说明2,SIP组件之间如何协调以在不同域中的用户代理之间建立SIP会话:
SIP协议_第2张图片

1.呼叫用户B:

用户A邀请正在使用多媒体手持设备的用户B进行SIP会话,域A中的SIP代理服务器辨别出用户B不在同一域中

2.询问域B中的用户:

SIP代理服务器在SIP重定向服务器上查询用户B的IP地址。
注:SIP重定向服务器既可以在域A中,也可以在域B中,还可既在域A又在域B中。

3.响应:

SIP重定向服务器将用户B的联系信息反馈给SIP代理服务器

4.呼叫域B中的SIP代理:

该SIP代理服务器再将SIP会话邀请信息转发给域B中的SIP代理服务器

5.查询B在哪里:

域B中的SIP代理服务器向SIP注册服务器发出请求,要求提供用户B的IP地址

6.用户B的地址:

域B的SIP代理服务器收到域B的SIP注册服务器查询到的用户B的IP地址

7.代理呼叫:

域B的SIP代理服务器转发用户A的邀请信息发送给用户B

8.响应:

域B中,用户B通知该SIP代理服务器可以接受用户A的邀请,且已经做好接收消息的准备

9.响应:

用户B再沿着邀请信息经由的同一路径转发接受邀请的信息

10.响应:

域A的SIP代理服务器将此消息(用户B接受A的邀请)传达给用户A,从而建立SIP会话。然后,多媒体通道已建立。

6. 常用的SIP消息

SIP协议是一个Client/Server协议,因此SIP消息分为两种:请求消息和响应消息。
请求消息是SIP客户端为了激活特定操作而发给服务器的消息。

常见的SIP请求消息如下:

  • INVITE:表示主叫用户发起会话,邀请其他用户加入一个会话,也可以用在呼叫建立后用于更新会话(此时INVITE又称为Re-invite)
  • ACK:客户端向服务器端证实它已经收到了对INVITE请求的最终响应。
  • PRACK:表示对1XX响应信息的确认请求消息。
  • BYE:表示终止一个已经建立的呼叫。
  • CANCEL:表示在收到对请求的最终响应之前取消该请求,对于已完成的请求则无影响。
  • REGISTER:表示客户端向SIP服务器端注册列在To字段中的地址信息。
  • OPTIONS:表示查询被呼叫的相关信息和功能。

SIP协议中的响应消息用于对请求消息进行响应,指示呼叫的成功或失败状态

常见的一些响应消息:

  • 100试呼叫(Trying)
  • 180振铃(Ringing)
  • 181呼叫正在前转(Call is Being Forwarded)
  • 200成功响应(OK)
  • 302临时迁移(Moved Temporarily)
  • 400错误请求(Bad Request)
  • 401未授权(Unauthorized)
  • 403禁止(Forbidden)
  • 404用户不存在(Not Found)
  • 480暂时无人接听(Temporarily Unavailable)
  • 486线路忙(Busy Here)
  • 504服务器超时(Server Time-out)
  • 600全忙(Busy Everywhere)

7. Sip消息的两种会话模式

在Sip IM通信应用过程中,一般存在着两种会话模式:

  1. Session Model
  2. Pager Model

7.1 Session Model

会话中,对于消息体内容大于1300字节时,一般采用Session Model。其会话建立过程如下图:详见:SIP协议详解
SIP协议_第3张图片
主呼叫方A呼叫被叫方B:

  1. 主叫方A发送INVITE请求到代理服务器1;
  2. 代理服务器1发送100 Trying响应,试呼叫主叫方A;
    3-6. 代理服务器搜索被叫方B的地址,获取地址后转发INVITE请求;
    7-9:被叫方B生成的180振铃响应,返回给主叫方A;
    10-12:被叫方B生成的200 OK响应,返回给主叫方A;
    13-17:主叫方A收到被叫方B200 OK响应后,向被叫方B发送一个ACK,会话建立;
    18-20:会话结束后,任何参与者(A或B)都可以发送一个bye请求来终止会话;
    21-23:主叫方A发送200 OK响应来确认bye,会话终止。

7.2 Pager Model

在Sip消息中,对于消息体不大于1300字节时,一般采用Pager Model。Sip消息通信中采用Message方法,Message方法本身并不建立Dialog,在多数应用中,每条IM消息都是独立的。Pager Model请求流程如下:
SIP协议_第4张图片
1:User1发送Message请求到代理服务器;
2:代理服务器转发User1的Message请求给User2;
3:User2收到User1的消息后,回复200 OK给代理服务器;
4:代理服务器转发200 Ok回复给User1.

7.3 SIP消息体格式

SIP消息体结构与Http协议结构相似,均由三部分组成:

  • 请求行(request-line)与状态行(status-line)
  • 消息头(header)
  • 正文(body)

一、request-line 请求行
格式:Method Request-URL SIP-Version CRLF

举例:INVITE sip:[email protected] SIP/2.0 /r/n

Method:

  • REGISTER:注册联系信息
  • INVITE:发起会话请求
  • ACK:INVITE请求的响应的确认
  • CANCEL:取消请求
  • BYE:终结会话
  • OPTIONS:查询服务器能力
  • MESSAGE:RFC3428对Sip协议的扩展,增加了MESSAGE方法。采用Pager Model进行通信,传递不超过1300字节的数据。

Request-URL:
指示请求的用户或者服务的地址信息

SIP-Version:
请求和响应消息都需要包含SIP版本信息。

二、status-line 状态行
格式:SIP-Version Status-Code Reason-Phrase CRLF

举例:SIP/2.0 200 OK /r/n

Status-Code状态码:
状态代码由3位数字组成,表示请求是否被理解或被满足
状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类。
第一个数字有5种可能的取值:

  • 1XX:临时响应、表示请求消息正在被处理
  • 2XX:成功响应、表示请求已被成功接收完全理解并接收
  • 3XX:重定向响应、表示需采取进一步完成请求
  • 4XX:客户机错误、表示请求消息中包含语法错误或服务器无法完成客户机的请求
  • 5XX:服务器错误、表示服务器无法合法完成请求
  • 6XX:全局故障、表示任何服务器都无法完成该请求

常用的状态码举例:

  • 100:Trying 试呼叫
  • 180:Ringing 振铃
  • 181:Call is Being Forwarded 呼叫正在前转
  • 200:OK 成功响应
  • 302:Moved Temporarily 临时迁移
  • 400:Bad Request 错误请求
  • 401:Unauthorized 未授权
  • 403:Forbidden 禁止
  • 404:Not Found 用户不存在
  • 408:Request Timeout 请求超时
  • 480:Temporarily Unavailable 暂时无人接听
  • 486:Busy Here 线路忙
  • 504:Server Time-out 服务器超时
  • 600:Busy Everywhere 全忙

三、Header 消息头
Header字段含义说明如下:

  • Call-ID:由本地设备Client生成,全局唯一,每次呼叫这个值唯一不变
    举例:Call-ID:[email protected]
  • From:表示请求的发起者
    举例:From: sip:[email protected];tag=49583
  • To:表示请求的接收者
    举例:To:sip:[email protected]
  • Via:Via头域是被服务器插入request中,用来检查路由环,并且可以使response根据via找到返回的路
    举例:Via:SIP/2.0/TCP user1pc.domain.com; branch=z9hG4bK776sgdkse
  • Max-Forwards:用于表示这个包最多可以传送多少跳,每经过一跳都会减一当Max-Forwards==0系统会返回483.默认为70
    举例:Max-Forwards:70
  • Contact:包含源的URL信息,用来给响应方直接和源建立连接用
    举例:Contact:sip:192.168.100.1:1111
  • Content-Type:指明消息体的类型(SDP会话描述协议)
    举例:
    Content-Type:text/plain;
    Content-Type:application/sdp;
    Content-Type:application/cpim;
  • Content-Length:指明消息体的字节大小
    举例:Content-Length:18

参考资料:
1.SIP协议详解
2.SIP百度百科

你可能感兴趣的:(协议之学习积累,网络,网络协议)