您的位置:首页 > 编程语言 > Java开发

SIP 协议深入学习

2012-09-20 15:32 357 查看
会话发起协议(Session
Initiation Protocol,SIP)

      **有用链接**

              1 http://www.cnblogs.com/DreamSea-for-Jimmy/archive/2011/07/29/2121040.html

              2 http://www.cnblogs.com/DreamSea-for-Jimmy/archive/2011/07/29/2120995.html

   (1)SIP协议最早由是由MMUSIC IETF工作组在1995年研究的,由IETF组织在1999年提议成为的一个标准。

SIP主要借鉴了Web网的HTTP和SMTP两个协议。 目前仍在不断的发展之中,相关设备供应商和业务供应商联合成立了一个关于SIP的论坛WWW.SIPFORUM.ORG

  (2)SIP 支持的功能:
基本会话;
多用户之间的会话;
交互的媒体应用。


基于SIP的IP网络电话系统所用的协议栈结构如图所示:



 

(3)分布式架构



 

(4)一个发起和终止会话的实体,包含两个功能实体.:

       

         User Agent Clients (UAC) –发起呼叫的功能实体.
        User Agent Server (UAS) –接收呼叫的功能实体.
UAC 和 UAS -都能终止一个呼叫.

(5)Proxy Server  - *****

为其它的客户机代理,进行SIP消息的转接和转发的功能。消息机制与UAC和UAS相似.
对收到的请求消息进行翻译和处理后,传递给其他的服务器.
对SIP请求及响应进行路由.

(6)Location Server - 位置服务器

 为SIP 重定向服务器(Redirect Server)或*****(proxy server) 提供被叫用户可能的位置信息.

(7)Redirect Server - 重定向服务器

接受SIP请求消息,进行地址映射,将映射后的地址(零个或多个)返回给客户机.
与*****proxy server不同的是, redirect server不会发起自己的呼叫.
与user agent 不同的是, redirect server不接受呼叫终止或主动终止呼叫.

(8)Registrar Server - 登记服务器

接受REGISTER 请求的服务器.
可以支持鉴权的功能
在典型应用中,可与*****proxy sever或重定向服务器redirect server一起提供用户定位服务

(9)SIP 消息 – 方法和响应

SIP 网络成员依赖于SIP信息的交互来进行通讯

SIP 方法:
INVITE – 通过邀请用户参与来发起一次呼叫.
ACK - 请求用于证实UAC已收到对于INVITE请求的最终响应,和INVITE消息配套使用.
BYE - USER AGENT用此方法指示释放呼叫.
CANCEL -该方法用于取消一个尚未完成的请求,对于已完成的请求则无影响.
REGISTER – 客户使用该方法在服务器上登记列于To字段中的地址.
OPTIONS – 用于询问服务其能力.
INFO – 用于承载带外信息,如DTMF信息.

SIP Responses:
1xx -正在处理的信息.
2xx -成功.
3xx -重定向.
4xx - Client错误.
5xx - Server错误.
6xx - Global错误.

(10)SIP 消息头部

SIP 消息格式大量借鉴了HTTP的文本和语法.
SIP 消息看起来类似HTTP消息, 如消息格式,头部字段等,也支持MIME.
SIP 头部实例:
-----------------------------------------------------------------
                        SIP Header
-----------------------------------------------------------------
INVITE sip:5120@192.168.36.180 SIP/2.0
Via: SIP/2.0/UDP 192.168.6.21:5060
From: sip:5121@192.168.6.21
To: <sip:5120@192.168.36.180>
Call-ID: c2943000-e0563-2a1ce-2e323931@192.168.6.21
CSeq: 100 INVITE
Expires: 180
User-Agent: Cisco IP Phone/ Rev. 1/ SIP enabled
Accept: application/sdp
Contact: sip:5121@192.168.6.21:5060
Content-Type: application/sdp

(11)SIP 地址形式

SIP 地址形式用SIP URL来定义, 其格式为: user@host--用户名 @ 主机名(或域名).
SIP URL 实例:
sip:hostname@chinatelecom.org
sip:hostname@192.168.10.1
sip:14083831088@zte.com 

SIP中还存在许多其他消息,下面给出一些请求:
消息用法
INVITE呼叫一个用户代理,传送一次呼叫。
ACK确认呼叫。
BYE终止呼叫。
CANCEL终止还未OK的呼叫。
REGISTER提供一项注册服务,带有一个联系地址和可以用来代替的别名。例如,在前面的例子中,地址sip:UAA@example.com就是sip:UserA@10.20.30.40的别名。然后,注册服务器example.com就可以把呼叫转发给地址10.20.30.40。
OPTIONS询问一个用户代理的“能力”(例如,该用户代理能够识别的消息和编码)。
现在给出一些经常使用的响应消息:
消息用法
100 Trying消息已收到,但是最终用户代理尚未进行处理。请等待。
180 Ringing最终用户代理已经收到消息,正在提示用户。请等待。
200 OK最终用户已经接受消息。
301 Moved Permanently & 302 Moved Temporarily用户代理的地址已经改变,新的永久或临时地址位于Contact字段中。
400 Bad Request普通错误消息。客户端不能识别消息。
401 Unauthorized & 407 Proxy Authentication Required请使用证书重试。
404 Not Found要联系的用户不存在或尚未注册。
408 Request Timeout另一方没有响应。这意味着SIP消息永远不会OK。所有重试都将被丢弃。这并不意味着电话响太长时间(电话可以永远响铃)。
消息使用类似的头字段类型,
头字段用法
FromSIP请求的发送者。
ToSIP请求的接受者。这通常与SIP URI相同(可以是一个“别名”或一个实际地址)。
Contact用户代理的实际地址。
Call-ID这并不是呼叫者的电话号码。它惟一地代表两个用户代理之间的完整呼叫或对话。所有相关的SIP消息都使用同一个Call-ID。例如,当一个用户代理收到一条BYE消息,根据Call-ID,它就知道要挂断哪次呼叫。
CSeq消息的顺序编号。这在一次对话或一个Call-ID中是惟一的。这用于区别新的消息和“重试消息”。当一条初始消息没有及时OK时,重试就会进行,并会定时发送。
Content-Type消息内payload的MIME类型。
Content-Lengthpayload的大小,以字节为单位。信封和payload之间由一空行隔开。
  还有一些与消息路由选择功能相关的头字段,如:Via、Route和Record-Route。许多头字段提供像Accept、User-Agent和Supported这样的功能。其他头字段则提供像Authorization、Privacy和WWW-Authenticate这样的安全性功能。还有很多其他的头字段存在。此外,这些字段中许多都有缩写语法(比如,From = f,To = t,等等)。


SIP的其他功能

  使用SIP及其扩展可以实现很多应用:
VoIP
视频会议
针对文本和数据的即时消息传递,比如MSN Instant Messenger
注册(我在线!)
到场(我的伙伴在不在?)
Click-to-talk(点击通话,即点击这里便可与一个技术支持代理交谈)
应答机器/互动式语音应答(Interactive Voice Response,IVR)系统(“请输入您的密码。请记录您的姓名。英文请按1,西班牙语请按2…”)
网络游戏,比如Quake和一些手机游戏(甚至基于语音和IM)
基于手机的应用程序
移动电子商务
  基本上,如果是两个端点之间进行通信,SIP就能完成。 
但是,关于活动的Web技术支持代理的想法又如何呢?现在我们能否使用SIP来实现它?我们能否使用Java来实现它?干脆点说,可以。


Java中的SIP

  我经常使用SIP。我可以负责任地说,Java为SIP提供了绝佳的支持。Java技术的一个分支把与开发SIP应用程序相关的许多细节抽象出来,这对于SIP开发人员大有帮助。下面这些技术大部分位于JAIN (Java APIs for Integrated Networks)工作组中。
JAIN SIP API (JSR 32)
SIP Servlet API (JSR 116)
JAIN SIP Lite (JSR 125)
SIP API for J2ME (JSR 180)
JAIN SIMPLE Presence (JSR 164)
JAIN SIMPLE Instant Messaging (JSR 165)


其他相关技术有:

JAIN SDP (JSR 141)
Java Media Framework for RTP (J2SE可选包,并非JAIN的)

  如果您希望开发一个客户端应用程序,就需要一个客户端SIP引擎或者“堆栈”。在这里可以找到一个优秀的开源Java SIP堆栈。它还支持SDP。如果不想自己开发SIP电话,您可以使用这个

SIP 规定了以下基本的通信要求:

1. 用户定位服务

2. 会话建立

3. 会话参与方管理

4. 特点的有限确定

  SIP 的一个重要特点是它不定义要建立的会话的类型,而只定义应该如何管理会话。有了这种灵活性,也就意味着 SIP 可以用于众多应用和服务中,包括交互式游戏、音乐和视频点播以及语音、视频和 Web 会议。

  下面是 SIP 在新的信令协议中出类拔萃的一些其他特点

  SIP 消息是基于文本的,因而易于读取和调试。新服务的编程更加简单,对于设计人员而言更加直观。

  SIP 如同电子邮件客户机一样重用 MIME 类型描述,因此与会话相关的应用程序可以自动启动。

  SIP 重用几个现有的比较成熟的 Internet 服务和协议,如 DNS、RTP、RSVP 等。不必再引入新服务对 SIP 基础设施提供支持,因为该基础设施很多部分已经到位或现成可用。

  对 SIP 的扩充易于定义,可由服务提供商在新的应用中添加,不会损坏网络。网络中基于 SIP 的旧设备不会妨碍基于 SIP 的新服务。例如,如果旧 SIP 实施不支持新的 SIP 应用所用的方法/标头,则会将其忽略。

  SIP 独立于传输层。因此,底层传输可以是采用 ATM 的 IP。SIP 使用用户数据报协议 (UDP) 以及传输控制协议 (TCP),将独立于底层基础设施的用户灵活地连接起来。

  SIP 支持多设备功能调整和协商。如果服务或会话启动了视频和语音,则仍然可以将语音传输到不支持视频的设备,也可以使用其他设备功能,如单向视频流传输功能。 

SIP 会话构成

  SIP 会话使用多达四个主要组件:SIP 用户代理、SIP 注册服务器、SIP 代理服务器和 SIP 重定向服务器。这些系统通过传输包括了SDP 协议(用于定义消息的内容和特点)的消息来完成 SIP 会话。下面概括性地介绍各个 SIP 组件及其在此过程中的作用。

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

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

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

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

  以下几个情景说明 SIP 组件之间如何进行协调以在同一域和不同域中的 UA 之间建立 SIP 会话:

在同一域中建立 SIP 会话

  下图说明了在预订同一个 ISP 从而使用同一域的两个用户之间建立 SIP 会话的过程。用户 A 使用 SIP 电话。用户 B 有一台 PC,运行支持语音和视频的软客户程序。加电后,两个用户都在 ISP 网络中的 SIP 代理服务器上注册了他们的空闲情况和 IP 地址。用户 A 发起此呼叫,告诉 SIP 代理服务器要联系用户 B。然后,SIP 代理服务器向 SIP 注册服务器发出请求,要求提供用户 B 的 IP 地址,并收到用户 B 的 IP 地址。SIP 代理服务器转发用户 A 与用户 B 进行通信的邀请信息(使用 SDP),包括用户 A 要使用的媒体。用户 B 通知SIP 代理服务器可以接受用户 A 的邀请,且已做好接收消息的准备。SIP 代理服务器将此消息传达给用户 A,从而建立 SIP 会话。然后,用户创建一个点到点 RTP 连接,实现用户间的交互通信。

1.呼叫用户 B

2.查询没?>在哪里?>
3.响应没?SIP 地址?>
4.頂呼叫

5. 响应

6. 响应

7. 多媒体通道已建立

在不同的域中建立 SIP 会话



  本情景与第一种情景的不同之处如下。用户 A 邀请正在使用多媒体手持设备的用户 B 进行 SIP 会话时,域 A 中的 SIP 代理服务器辨别出用户 B 不在同一域中。然后,SIP 代理服务器在 SIP 重定向服务器上查询用户 B 的 IP 地址。SIP 重定向服务器既可在域 A 中,也可在域 B 中,也可既在域 A 中又在域 B 中。SIP 重定向服务器将用户 B 的联系信息反馈给 SIP 代理服务器,该服务器再将 SIP 会话邀请信息转发给域 B 中的 SIP 代理服务器。域 B 中的 SIP 代理服务器将用户 A 的邀请信息发送给用户 B。用户 B 再沿邀请信息经由的同一路径转发接受邀请的信息。

  1. 呼叫用户 B
2. 询问撐胰绾谓油ㄓ?B 中的用户 B??
3. 响应摯砜刂破鞯挠虻刂窋 4. 摯頂呼叫域 B 的 SIP 代理 5. 查询撚没?B 在哪里??
6. 用户 B 的地址 7. 代理呼叫 8. 响应 9. 响应 10.响应 11.多媒体通道已建立 

无缝、灵活、可扩展:展望 SIP 未来

  SIP 能够连接使用任何 IP 网络(有线 LAN 和 WAN、公共 Internet 骨干网、移动 2.5G、3G 和 Wi-Fi)和任何 IP 设备(电话、PC、PDA、移动手持设备)的用户,从而出现了众多利润丰厚的新商机,改进了企业和用户的通信方式。基于 SIP 的应用(如VOIP、多媒体会议、push-to-talk(按键通话)、定位服务、在线信息和 IM)即使单独使用,也会为服务提供商、ISV、网络设备供应商和开发商提供许多新的商机。不过,SIP 的根本价值在于它能够将这些功能组合起来,形成各种更大规模的无缝通信服务。

  使用 SIP,服务提供商及其合作伙伴可以定制和提供基于 SIP 的组合服务,使用户可以在单个通信会话中使用会议、Web 控制、在线信息、IM 等服务。实际上,服务提供商可以创建一个满足多个最终用户需求的灵活应用程序组合,而不是安装和支持依赖于终端设备有限特定功能或类型的单一分散的应用程序。

  通过在单一、开放的标准 SIP 应用架构下合并基于 IP 的通信服务,服务提供商可以大大降低为用户设计和部署基于 IP 的新的创新性托管服务的成本。它是 SIP 可扩展性促进本行业和市场发展的强大动力,是我们所有人的希望所在。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息