当前位置: 首页 > 工具软件 > SIP > 使用案例 >

非常详细的SIP协议总结

长孙文栋
2023-12-01

1.SIP概念

   SIP(Session Initiation Protocol,会话发起协议)是一个用于建立,更改和终止多媒体会话的应用层控制协议,其中的会话可以是IP电话、多媒体分发及多媒体会议。SIP协议采用Client/Server模型,主要通过与Proxy Server之间的通信来完成用户呼叫的建立过程。

   SIP终端通过发送“邀请”消息给会话目的终端,消息中携带了自己的描述信息。目的终端可以根据“邀请”信息和自身的能力接受或拒绝请求。SIP可以通过称为“代理服务器”的实体来转发“邀请”消息。代理服务器可以完成确定目的终端的位置、查找路由的工作,根据会话终端的要求进行认证和授权,还能提供会话终端的呼叫路由策略。SIP通过“注册服务器”记录各终端的描述信息,包括地址信息,路由信息,号码信息等,各SIP终端可以通过发送“注册”消息给注册服务器,以登记或更新其描述信息。

   另外,SIP作为应用层协议,在传输层上可以使用TCP,也可以使用UDP。SIP可以支持IPv4和IPv6。

2.SIP的功能和特点

   SIP主要有五个基本功能:

  • 确定用户位置:确定被叫SIP终端所在的位置。SIP的最强大之处就是用户定位功能。SIP本身含有向注册服务器注册的功能,也可以利用其他定位服务器如DNS、LDAP等提供的定位服务器来增强其定位功能。

  • 确定用户可用性:确定被叫会话终端是否可以参加此会话。SIP支持多种地址描述和寻址,包括:用户名@主机地址、被叫号码@PSTN网关地址和普通电话号码(如Tel:01012345678)的描述等。这样,SIP主叫按照被叫地址,就可以识别出被叫是否在传统电话网上,然后通过一个与传统电话网相连的网关向被叫发起并建立呼叫。

  • 确定用户能力:确定被叫终端可用于参加会话的媒体类型及媒体参数。SIP终端在消息交互过程中携带自身的媒体类型和媒体参数,这使得会话都可以明确对方的会话能力。

  • 建立会话:建立主被叫双方的会话参数。SIP会话双方通过协商媒体类型和媒体参数,最终选择双方都具有的能力建立起会话。

  • 管理会话:可以更改会话参数或中止会话。

3.SIP方法
SIP定义了6种基本方法,如下:
REGISTER:注册联系信息。
INVITE: 初始化一个会话。
ACK: 对INVITE消息的最终响应。
CANCEL: 终止一个等待处理或正在处理的请求。
BYE: 终止一个会话。
OPTIONS: 查询服务器的性能。

SIP还定义一些扩展方法
SUBSCRIBE:订阅方法
NOTIFY: 事件通知方法
MESSAGE: 即时消息方法

4.SIP响应码
SIP状态码定义如下 :
100~199: 报告,表明请求已经收到、继续处理请求
200~299: 成功,表明行为已经成功收到,理解和接受
300~399: 重定向,表明为完成呼叫请求,还需要采取的进一步动作
400~499: 客户端错误,表明请求有语法或不能被服务器执行。客户端需要修 改请求,然后重发请求
500~599: 服务端错误,表明服务器出错,不能执行合法请求
600~699: 全局性错误

1xx

进展相应

临时相应

2xx

成功

最终相应

3xx

重定向错误

最终相应

4xx

客户端错误

最终相应

5xx

服务端错误

最终相应

6xx

全局错误

最终相应

5.SIP请求的标题头

6个必须标题头: From、To、Call-ID、CSeq、Via、Max-Forwards

标题头的解释:

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
ViaVia头域是被服务器插入request中,用来检查路由环的,并且可以使response根据via找到返回的路Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
Max-Forwards用于表示这个包最多可以传送多少跳,每经过一跳都会减一当Max-Forwards==0系统会返回483。默认为70Max-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
 

6.注册信令消息示范:

VIA域:包含了Alice接收发送请求的服务器地址(pc33.atlanta.com)。同样这个包含了一个分支参数来标志Alice和这个服务器的会话事务。

TO域:包含了显示姓名(Bob)和一个SIP或者SIPS URI(sip:bob@biloxi.com)请求将首先传输到这个URI中。显示姓名(Display names)在RFC 2822中描述。

From域:也同样包含一个显示姓名(Alice)和一个SIP或者SIPS URI(sip:alice@atlanta.com)这个URI用来标志请求的原始发起者。

这个域也包含了一个TAG参数,这个TAG参数是一个随机字串(1928301774),是软电话(softphone)在URI上增加的一个随机串。用来做标志用途的。

Call_ID:包含一个全局的唯一标志,用来唯一标志这个呼叫,通过随机字串和softphone的自己名字或者IP抵制混和产生的。通过TO TAG, FROM TAG和CALL-ID完整定义了Alice和Bob之间的端到端的SIP关系,并且表示这个是一个对话性质的关系。

CSEQ或者Command Sequence:包含了一个整数和一个请求名字。这个Cseq数字是顺序递增的。每当对话中发起一个新的请求都会引起这个数字的顺序递增。

Contact:域包含一个SIP或者SIPS URI用来表示访问Alice的直接方式,通常由用户名和一个主机的全名(Fully Qualified Domain Name FQDN)组成。当FQDN作为首选的时候,许多终端用户由于不会由名字登记(而导致不能访问Alice的主机),所以IP地址是可选的。

VIA域告诉大家本请求发送到哪里并且应答到哪里,Contract域告诉大家将来的请求将发送到哪里(奇怪…不是Alice发起的么,将来的请求应该是Bob才对啊)。

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

Content-type:包含了消息正文的描述(比如前面提到的application/sdp)

Content-length:包含消息正文的长度(字节数)

Register sip:SIP服务器编码@目的域名或者IP地址端口  SIP/2.0

Via:SIP/2.0/UDP 源域名或者IP地址端口

From:<sip:SIP设备编码@源域名>;tag=185328220

To: <sip:SIP设备编码@源域名>

Call-ID:ms1214-322164-681262131542511620107-0@172.18.16.3

CSeq:1 Register

Contact: <sip:SIP设备编码@源IP地址端口>

Max-Forwords:70

Expires: 7200

Content-Length: 0

SIP/2.0 401 Unauthorized

To: sip:SIP设备编码@源域名

Content-Length: 0

CSeq:1 Register

Call-ID:ms1214-322164-681262131542511620107-0@172.18.16.3

From:<sip:SIP设备编码@源域名>;tag=185328220

Via:SIP/2.0/UDP 源域名或者IP地址端口

WWW-Authenticate: Digest realm=”64010000”,nonce=”6fe9ba44a76be22a”

Register sip:SIP服务器编码@目的域名或者IP地址端口  SIP/2.0

Via:SIP/2.0/UDP 源域名或者IP地址端口

From:<sip:SIP设备编码@源域名>;tag=185328220

To: <sip:SIP设备编码@源域名>

Call-ID:ms1214-322164-681262131542511620107-0@172.18.16.3

CSeq:2 Register

Contact: <sip:SIP设备编码@源IP地址端口>

Authorization: Digest username=”64010000002020000001”,realm=”64010000”, nonce=”6fe9ba44a76be22a”,uri=”sip:64010000002020000001@172.18.16.5:5060”,response=”9625d92d1bddea7a911926e0db054968”,algorithm=”MD5”

Max-Forwords:70

Expires: 7200

Content-Length: 0

SIP/2.0 200 OK

To: <sip:SIP设备编码@源域名>;tag=69113a2a

Contact: sip:SIP设备编码@源IP地址端口

Content-Length: 0

CSeq:2 Register

Call-ID:ms1214-322164-681262131542511620107-0@172.18.16.3

From:<sip:SIP设备编码@源域名>;tag=185328220

Via:SIP/2.0/UDP 源域名或者IP地址端口

Date:2010-11-02T15:01:26.115

Expires: 7200

7.常用的状态码举例:

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

 类似资料: