SIP协议

一、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(即时消息)等特色业务。可以说,有IP网络的地方就有SIP协议的存在。
SIP是类似于HTTP,SIP可以减少应用特别是高级应用的开发时间。由于基于IP协议的SIP利用了IP网络,固定网运营商也会逐渐认识到SIP技术对于他们的远意义。

二、Sip消息的两种会话模式

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

  1. Session Model
  2. Pager Model

2.1、Session Model
会话中,对于消息体内容大于1300字节时,一般采用Session Model。其会话建立过程如下图所示:
在这里插入图片描述主叫方A呼叫被叫方B:

步骤1:主叫方A发送INVITE请求到代理服务器;
步骤2:代理服务器发送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,会话终止。

注:以上的整个流程称之为一个Dialog

2.2、Pager Model
在Sip消息中,对于消息体不大于1300字节时,一般采用Pager Model。Sip消息通信中采用MESSAGE方法,MESSAGE方法本身并不建立Dialog,在多数应用中,每条IM消息都是独立的,颇似分页消息。

2.2.1 MESSAGE方法的由来
RFC3428对Sip协议进行了扩展,在Sip协议中增加了MESSAGE请求方法。采用Pager Model进行通信,传递不超过1300字节的数据。

2.2.2Pager Model请求流程如下
以User1向User2发送MESSAGE消息为例:
在这里插入图片描述
步骤1:User1发送MESSAGE请求到代理服务器;
步骤2:代理服务器转发User1的MESSAGE请求给USER2;
步骤3:User2收到User1的消息后,回复200 OK给代理服务器;

三、SIP消息体格式

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

  1. 请求行(request-line) or 状态行(status-line)
  2. 消息头(header)
  3. 正文(body)

3.1、请求行
请求行格式:Method Request-URI SIP-Version CRLF
请求行举例:INVITE sip:bob@zte.com SIP/2.0 /r/n

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

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

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

3.2、状态行
状态行格式: SIP-Version Status-Code Reason-Phrase CRLF
状态行举例:SIP/2.0 200 OK /r/n

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

第一个数字有五种可能的取值:

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

常用的状态码举例:

状态码			msg												含义
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									全忙

3.3、消息头

发送MESSAGE消息给user2

MESSAGE sip:user2@domain.com SIP/2.0
Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
Max-Forwards: 70
From: sip:user1@domain.com;tag=49583
To: sip:user2@domain.com
Call-ID: asd88asd77a@1.2.3.4
CSeq: 1 MESSAGE
Content-Type: text/plain
Content-Length: 18
user2, come here.

Header 字段含义说明:

Header	含义说明	举例
Call-ID	由本地设备(Client)生成,全局唯一,每次呼叫这个值唯一不变	Call-ID: asd88asd77a@1.2.3.4
From	表示请求的发起者	From: sip:user1@domain.com;tag=49583
To	表示请求的接收者	To: sip:user2@domain.com
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	包含源的URI信息,用来给响应方直接和源建立连接用	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

四 参考
SIP协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值