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网络。
二十世纪九十年代,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确定具体的事件通知。
----------方便灵活地用于交互式游戏、音乐、视频点播、语音、Web会议等众多应用和服务。
--------方便开发人员使用通用的编程语言来创建应用程序,方便读取和调试,
--------方便与会话相关的应用程序可以自动启动。
-------很多部分已经现成可用或到位,不必再引入新服务对SIP基础设施提供支持。
-------可由服务提供商在新的应用中添加,不会损坏网络。网络中基于SIP的旧设备不会妨碍基于SIP的新服务。
---------底层传输可以采用ATM(异步传输方式)的IP。SIP使用用户数据报协议(UDP)以及传输控制协议(TCP),将独立于底层基础设施的用户灵活地连接起来。如果服务或会话启动了视频和语音,仍然可以将语音传输到不支持视频的设备。
- 用户定位服务
- 会话建立
- 会话参与方管理
- 特点的有限确定
SIP会话使用多达四个主要组件:
SIP用户代理(UA)是终端用户设备,如用于创建和管理SIP会话的移动电话、多媒体手持设备、PC、PAD等。用户代理客户机发出消息,用户代理服务器对消息进行响应。
包含域中所有用户代理的位置的数据库。在SIP通信中,这些服务器会检索出对方的IP地址和其他相关信息,并将其发送到SIP代理服务器。
SIP代理服务器接受SIP用户代理的会话请求并查询SIP注册服务器,获取收件方用户代理的地址信息。然后将会话请求信息直接转发给收件方用户代理(如果其位于同一域中)或代理服务器(如果用户代理位于另一域中)。
SIP重定向服务器允许SIP代理服务器将SIP会话邀请信息定向到外部域。SIP重定向服务器可以与SIP注册服务器和SIP代理服务器同在一个硬件上。
这些系统通过传输包括了SDP协议(用于定义消息的内容和特点)的消息来完成SIP会话。
SIP通过以下逻辑功能完成通信:
情景说明1,SIP组件之间如何协调以在同一域中的用户代理之间建立SIP会话:
用户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会话:
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会话。然后,多媒体通道已建立。
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)
在Sip IM通信应用过程中,一般存在着两种会话模式:
会话中,对于消息体内容大于1300字节时,一般采用Session Model。其会话建立过程如下图:详见:SIP协议详解
主呼叫方A呼叫被叫方B:
在Sip消息中,对于消息体不大于1300字节时,一般采用Pager Model。Sip消息通信中采用Message方法,Message方法本身并不建立Dialog,在多数应用中,每条IM消息都是独立的。Pager Model请求流程如下:
1:User1发送Message请求到代理服务器;
2:代理服务器转发User1的Message请求给User2;
3:User2收到User1的消息后,回复200 OK给代理服务器;
4:代理服务器转发200 Ok回复给User1.
SIP消息体结构与Http协议结构相似,均由三部分组成:
一、request-line 请求行
格式:Method Request-URL SIP-Version CRLF
举例:INVITE sip:[email protected] SIP/2.0 /r/n
Method:
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种可能的取值:
常用的状态码举例:
三、Header 消息头
Header字段含义说明如下:
参考资料:
1.SIP协议详解
2.SIP百度百科