voip开发入门->SIP协议学习日记01


一、SIP简介


1. 什么是SIP?

会话初始化协议 SIP( Session Initiation Protocol ,RFC3261)是一个基于文本的处于应用层的控制协议,可以用来创建,修改和终止会话。具有简练、开放、兼容和可扩展等特性。

2. SIP的作用?

SIP并不能提供具体的服务,它只是在多媒体框架中的一部分,它与实时数据传输协议(RTP)实时流协议(RSTP)会话描述协议(SDP)等其他协议一起组成一个完整的多媒体架构,在这个多媒体架构中SIP相当于交通工具。

3. SIP是如何传输的?

SIP是基于TCP/IP协议进行数据传输的,因此可以通过UDP传输(较常用),也可以同TCP传输。

4. SIP的组成结构

从结构上来说SIP协议由一组相对无关的处理层次组成,这些层次之间只有松散的关系。 事务用户层(Transaction User)->事物层(Transaction)->传输层(Transport)->语法和编码层(Syntax and Encoding)


二、SIP常用术语

1.常用术语概述

** <1>会话(Session)**,就是一个多媒体发送方和接收方组成的集合。通常意义下可以理解为一次打电话从摘机、拨号、通话、挂机这一系列动作包含的所有信号集合。
<2>对话(Dialog),一个对话是持续一段时间的两个UA之间的端到端的SIP关系。用Call-ID,local tag(本地tag),remote tag(对方tag)来标志一个对话。
<3>事务(Transaction),是在客户端和服务端的事件,包括了从第一个由客户端发送到服务端的请求,到最后一个(非1xx)服务端向客户端发出的终结应答。一般通过Via头域中的branch参数和Cseq头域的方法参数来标志一个事务。
<4>用户代理 UA(User Agent ),一个逻辑实体的概念,包含UAC和UAS,仅存在于事务中。UAC( User Agent Client ):用户代理客户端,用于发送SIP请求。UAS( User Agent Server ):用户代理服务器,用于对SIP请求做响应的。
<5>背靠背的用户代理 B2BUA(Back-to-Back UserAgent),是直接的UAC和UAS的串连,要接收和处理请求,为了决定如何处理这个请求,又要发出一个请求,同时需要维持对话状态。
<6>呼叫(Call),它是指在端点之间一些通讯行为,通常用于建立多媒体对话。
<7>请求(Request),一个由客户端发到服务端得SIP信息,用于执行特定的功能。
<8> 应答(Response),一个由服务端发到客户端得SIP信息。用来标志从客户端发往服务端得请求处理的情况。
<9>消息(Message),SIP元素之间传送的协议数据就是消息。
<10> 方法(Method),是向服务器请求处理的主要功能。


三、协议信息


1.请求信息类型

INVITE:发起会话请求,邀请用户加入一个会话,会话描述含于信息体中。
BYE:结束会话
ACK:用于对请求消息的响应消息进行确认。
OPTIONS:用于请求能力信息。
CANCEL:用于释放未建立的呼叫。
REGISTER:用户SIP网络服务器登记用户位置。

2.响应消息状态码

1xx:临时响应,表示已经接受到请求信息,正对其进行处理;
2xx:成功响应,表示请求已经被接受、处理并被成功受理;
3xx:重定向响应,表示为完成请求信息需要采取进一步的行动;
4xx:客户机错误,表示请求消息中包含语法错误或者SIP服务器不能完成对该请求消息的处理;
5xx:服务器错误,表示SIP服务器故障不能完成对正确消息的处理。
6xx:全局故障,表示请求不嗯给你在任何SIP服务器上实现。

3.请求消息和响应消息的格式

SIP一般消息 = 起始行
*消息头
CRLF(空行)

               [消息体]

起始行=请求行/状态行(SIP请求消息起始行是请求行(Request-Line),响应消息起始行是状态行(Status-Line))。
请求消息头至少包括FromToCSeqCallMax-ForwardsVia六个字段他们是构建SIP消息的基本单元。
消息体一般采用SDP(Session Description Protocol)协议,会话描述协议。

4.SIP请求实例

INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 192.168.6.21:5060;branch=z9hG4bK776asdhds
From: sip:[email protected];tag=1928301774
To: sip:[email protected]
Call-ID: [email protected]
CSeq: 100 INVITE
Max-Forwards: 70
Contact: sip:[email protected]:5060
Content-Type: application/sdp
Content-Length: 142
Body(略)

其中Request Line包括方法名,Request URL,协议版本
下面的为头域部分,每个头域格式为,域名+“:”+域值。
头域后面加一个空行,然后是消息体部分(如果有的话)

需要注意几点
一个合法的SIP请求的头域部分必须至少包含如下6个头域:Via,From,To,Call-ID,Cseq,Max-Forwards。
整个消息中每行都是以回车换行(CRLF)结束。
头域的域名是大小写不敏感的,一般习惯第一个字母大写;域值也是大小写不敏感的,除非用引号引起来。
冒号左右对加多少空格没有限制,一般建议在冒号和值之间加一个空格(SP)即可。
在没有body时,头域的后面也要加一个空行。

5.SIP应答实例

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.6.21:5060;branch=z9hG4bK776asdhds
From: sip:[email protected];tag=1928301774
To: sip:[email protected];tag=34246673
Call-ID: [email protected]
CSeq: 100 INVITE
Max-Forwards: 70
Contact: sip:[email protected]:5060
Content-Type: application/sdp
Content-Length: 164
Body(略)

其中Status Line包括协议版本,状态码,状态说明
其他的头域除了Contact要改为自己的地址端口,Content-Length的值
为自己实际的body大小意外,其他可从收到的请求中复制。

你可能感兴趣的:(voip开发入门->SIP协议学习日记01)