sipsip(session initiation protocol)是一个应用层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。这些会话可以是internet多媒体会议 、ip电话或多媒体分发。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。
sip与负责语音质量的资源预留协议(rsvp) 互操作。它还与若干个其他协议进行协作,包括负责定位的轻型目录访问协议(ldap)、负责身份验证的远程身份验证拨入用户服务 (radius) 以及负责实时传输的 rtp 等多个协议。
sip 的一个重要特点是它不定义要建立的会话的类型,而只定义应该如何管理会话。有了这种灵活性,也就意味着sip可以用于众多应用和服务中,包括交互式游戏、音乐和视频点播以及语音、视频和 web 会议。sip消息是基于文本的,因而易于读取和调试。新服务的编程更加简单,对于设计人员而言更加直观。sip如同电子邮件客户机一样重用 mime 类型描述,因此与会话相关的应用程序可以自动启动。sip 重用几个现有的比较成熟的 internet 服务和协议,如 dns、rtp、rsvp 等。不必再引入新服务对 sip 基础设施提供支持,因为该基础设施很多部分已经到位或现成可用。
对 sip 的扩充易于定义,可由服务提供商在新的应用中添加,不会损坏网络。网络中基于 sip 的旧设备不会妨碍基于 sip 的新服务。例如,如果旧 sip 实施不支持新的 sip 应用所用的方法/标头,则会将其忽略。
sip 独立于传输层。因此,底层传输可以是采用 atm 的 ip。sip 使用用户数据报协议(udp) 以及传输控制协议(tcp),将独立于底层基础设施的用户灵活地连接起来。sip 支持多设备功能调整和协商。如果服务或会话启动了视频和语音,则仍然可以将语音传输到不支持视频的设备,也可以使用其他设备功能,如单向视频流传输功能。
通信提供商及其合作伙伴和用户越来越渴求新一代基于 ip 的服务。如今有了 sip(the session initiation protocol 会话启动协议),一解燃眉之急。sip 是不到十年前在计算机科学实验室诞生的一个想法。它是第一个适合各种媒体内容而实现多用户会话的协议,如今已成了 internet 工程任务组 (ietf) 的规范。
sip协议解析与实现
sip协议是一个基于应用层的会话控制协议。它可以创建、修改、终止多媒体会话(会议),也可以邀请参与者加入到一个现有的会话。
因为sip是一个基于应用层的协议,所以它不是一套完整的通讯系统方案,它需要和其它的方案或者协议结合起来实现整套系统。例如,实时传输协议(rtp)(rfc1889)用来传输音视频等实时的流媒体数据。实时流协议(rtsp)(rfc2326)用来控制媒体流的传递。媒体网关控制协议(megaco)(rfc3015)用来控制pstn网关。
由此可见,sip协议应该用来组合其它协议,从而实现完整的服务。但是,sip基础的功能和操作不依赖于其它协议。
sip( session initiation protocol ,rfc 3261)是由 ietf (国际互联网标准制定组织)制定的面向 internet 会议和电话的信令协议。sip是一个应用层的协议,可以建立,修改或者中止多媒体会话或者呼叫。它是一个基于ascii的端到端的协议,它实际上是在因特网上提供“约会”服务。用来实现voip的开放协议,最常用的有三种,sip、mgcp(media gateway control protocol)和h.323。
sip协议是专门为 ip 电话,尤其是结合 internet 设计的协议,同传统的 h.323 协议相比,sip 拥有明显的优越性:优异的可扩展性--大大提高了系统的处理能力;与 internet 紧密结合--使通讯更加轻松便捷的;卓越的开放性--不仅能够对手机、 pda 等移动设备提供良好的支持,对于在线即时交流、语音和视频数据传输等多媒体应用也能够很好地完成。
sip协议的特性和优势
与sip兼容的协议
sip协议可以单独地工作,也可以与下面的协议一起工作。
二第一个例子
下面引用rfc3261的例子来说明sip的基本功能,包括:定位终端,发送通讯请求,协商会话参数,建立会话和撤销建立的会话。图1显示了用户alice和bob使用sip交换信息的一个典型的例子(每一个消息用字母f和一个数字来标号,标号的前面有一个简短的消息类型说明)。在这个例子中,alice使用一个在她的pc机中的sip应用程序呼叫bob,bob使用他的sip电话,这个sip电话登录了互联网。同时,请注意两个sip代理服务器在alice和bob的会话的建立中起到的作用。
alice呼叫bob是使用他的sip标识符。sip标识符是一种uri(uniform resource identifier),称之为sip uri。sip uri格式很象email地址,包含一个用户名和一个主机名,如:sip:bob@biloxi.com。这里biloxi.com是bob的sip服务提供者的域名。alice的sip uri是:sip:alice@atlanta.com。sip也支持安全uri,叫做sips uri,例如,sips:bob@biloxi.com。一个向sips uri的呼叫使用加密传输(也就是tls)来携带从呼叫者到被呼叫者所有的sip消息。
sip是一个与http协议很像的,请求/应答式的事务模型。每一个事务最少由一个要完成特定方法或功能的请求,和服务器端的一个应答组成。在这个例子中,这个事务从alice的软电话发送一个invite请求到bob的sip uri开始。invite是一个sip消息,它表示请求者alice想与bob通话。invite请求包含一些头域。头域被称为属性,可以提供关于这个消息的额外信息。关于头域我们一会儿将会详细说明它们。图1中的invite信息(f1)可能像这样:
第一行文本是这个请求的方法名(invite)。后面的行是多个头域。这里只列出了最少需要的头域。先在这里对这些头域做一个简要的介绍:
via头域包含alice希望收到对于这个请求的应答的地址。也就是她告诉请求的接收者,应答应该发送到 pc33.atlanta.com。后面的branch参数是这个事务的标识符。
to头域包含一个显示名(bob)和一个sip uri或者sips uri,这里是使用的sip uri(sip:bob@biloxi.com)。这个sip uri就是这个请求要发送的目标。
from头域也包含一个显示名(alice)和一个sip uri或者sips uri,这里是使用的sip
uri(sip:alice@atlanta.com)来指出请求的发起人。这个头域还包含了一个tag参数,这个参数包含了一个随机字符串(1928301774),这个字符串的数字会被软电话自动增加,它主要起到鉴别的作用,后面还会说明它。
call-id头域包含一个全局唯一标识符来标识这次呼叫。这个标识符使用一个随即字符串和软电话所在的主机名(或者ip地址)一起生成。这样,to头域、from头域和call-id这三个头域就可以唯一的确定了alice和bob的这条点对点的通信关系,并且将这个通信关系交给一个对话(dialog)来处理了。
cseq头域(命令序列)包含一个整数和一个方法名字。在这个对话中每一个新的请求都会增加这个整数的值,保证这个数值是有序的。
contact头域包含一个sip uri或者sips uri指出一个能够接触到alice的直接路由,一般这个sip uri由用户名和一个完全限定域名(fqdn)构成。因为许多终端系统没有注册域名,所以也可以使用ip地址代替fqdn。via头域向对方指出了这个请求的应答应该发送到哪里,而contact头域向对方指出了将来的请求应该发送到哪里。
max-forwards头域限制了在这个请求传送到目的地的时候最多可以有多少跳。它包含一个整数,在每一跳这个整数都会被减少。
content-type头域描述消息体的类型(在这个例子里消息体采用了sdp描述,但是消息体内容没有给出)。
content-length头域指出了消息体的字节数。
在后面我们将完整的介绍sip头域(rfc3261第20节)。
在会话中像媒体类型、编码方式、采样率等信息都不使用sip描述,而是在消息体中使用其它会话描述协议的格式。这个例子中采用了sdp描述(rfc2327)。
软电话不知道bob或者拥有biloxi.com域名的sip服务器,它将invite请求发送给为alice提供服务的域名为atlanta.com的sip服务器。关于alice如何获得atlanta.com sip服务器的地址,可以使用由alice的软电话指定,或者使用dhcp探测到等方式。
atlanta.com sip服务器是一个sip代理服务器。一个代理服务器接收sip请求,为请求的发送者转发请求。在这个例子中,代理服务器接收到invite请求后发送一个100应答(trying)给alice的软电话。100应答(trying)指出这个invite请求已经被代理服务器接收到,并且已被经进一步向目的地路由。
sip中的应答使用3位数字表示,每一个编号都表示一个描述短语。这个100应答(trying)也同样包含和invite请求一样的to、from、call-id、cseq和via以及branch参数,这样可以使alice的软电话知道这个应答是对应发送的invite请求的。atlanta.com代理服务器定位出biloxi.com代理服务器(这可能需要通过域名解析服务器(dns)等实现,后面还会详细讲解)获得了它的ip地址,并且准备把invite请求转发给biloxi.com代理服务器。在转发请求之前,atlanta.com代理服务器增加了一个额外的via头域,这个via头域包含自己的地址(这时候这个invite请求的第一个via头域包含alice的软电话的地址)。
biloxi.com代理服务器接收到这个invite请求,并且也发送一个100(trying)应答给atlanta.com代理服务器指出它已经接收到这个invite请求,并正在处理这个请求。biloxi.com代理服务器知道bob的ip地址(这可能需要定位服务),它又在这个invite请求中加入了一个新的via头域,值为自己的地址,然后它把这个invite请求发送给bob的sip电话。
bob的sip电话接收到这个invite请求,发送一个180(ringing)应答,同时使用铃声通知bob有一个来自alice的呼叫,让bob决定是否接听。这个180(ringing)应答反向经过这两个代理服务器被发送到alice。每一个代理服务器使用via头域决定向哪里发送这个应答,并且把移除它自己添加的via头域。这样,虽然只有初始的invite请求发送的时候使用了dns服务和定位服务,而这个180(ringing)应答没有使用,同时代理服务器也不需要记录整个通讯的状态,但是这个应答还是能够成功的发送给请求的发送者alice。
当alice的软电话接收到180(ringing)应答后,它将这个消息告诉给alice,也许使用一个声音(彩铃)或者在alice的屏幕上显示一个消息。
在这个例子中,bob决定接听电话,当他按下接听按钮时,他的sip电话发送200(ok)应答表示接受了这个呼叫。这个200(ok)应答包含一个消息体,消息体使用sdp描述bob准备和alice建立的会话的媒体类型等信息。这样,alice和bob交换了一次sip信息:alice用invite请求发送一次给bob,bob用200(ok)应答发送一次给alice。这个交换实现了基本的协商能力和简单的offer/answer模型。如果bob不希望接听电话,或者他现在正忙(接听其它电话),那么他会发送一个错误应答而不是200(ok)应答。一个错误应答将不会建立会话。
bob发送的200(ok)应答可能是这样的:
应答的第一行包含一个应答代码(200)和一个解释短语(ok)。其它行就是应答的头域。via,to,from,call-id和cseq头域的值都从invite请求拷贝而来(这时候应该有3个via头域,分别由alice的sip软电话,atlanta.com代理服务器,和biloxi.com代理服务器添加)。bob的sip电话添加一个tag参数到to头域。以后所有的属于这个对话的请求和应答都要包含这个tag参数。
当alice的软电话接收到这个200(ok)应答后,马上停止响铃并显示呼叫已经被接听了。最后,alice发送一个确认信息(ack)给bob的sip电话,表示自己收到了最终应答(200(ok))。这个例子中的最终应答由alice直接发送给了bob,这是因为alice的软电话从contact头域里面可以得到bob的地址信息。通过invita/200/ack的三步握手,sip会话就建立起来了。关于sip会话建立的详细步骤请参看rfc3261第13节。
现在alice和bob的多媒体会话已经建立起来了,他们可以发送通过sdp协商好的格式的媒体数据了。一般来说,媒体数据包的传输与sip消息的传输采用不同的通信方式。sip消息大多通过代理服务器转发,而媒体数据多使用点对点的传输。
在会话过程中,无论是alice还是bob决定改变这个媒体会话,都要通过发送一个re-invite请求。这个re-invite请求包含新的媒体描述(可能是sdp),它不会建立新的会话,而是修改当前已经存在的会话。对方接收到这个请求后,发送一个200(ok)同意这个改变,最后请求者发送ack。如果对方不同意这个修改,可能会发送一个错误应答,比如488(不接受)。但是这个失败应答不会使已存在的会话退出,而是继续使用以前协商的媒体进行通信。关于修改一个会话的详细说明,请参看rfc3261第14节。
最后,bob发送bye消息挂断电话。bye消息直接发送到alice的软电话。alice发送200(ok)确定接收到了bye消息,并且终止这个会话。bob不用发送ack,因为ack只有在接收到对invite的应答时才被发送。关于终止一个会话更详细的说明,请参看rfc3261第15节。还有一个问题就是关于biloxi.com服务器如何获得bob的位置。bob的sip电话开机的时候会向一个注册服务器发送register消息。register消息的作用是将bob的sip uri或者sips uri与bob当前使用的电话地址进行帮定,并将这个帮定信息保存到数据库中,这被称之为定位服务(location service)。biloxi.com代理服务器使用定位服务获得bob的地址。注册服务器、代理服务器、定位服务器都是逻辑上的服务器,而不是物理上的服务器,所以他们可以位于同一台服务器上。
华米科技正式发布了新一代智能可穿戴芯片
采用西门子S7-300PLC和变频器实现焦炉鼓风机控制系统的设计
电磁流量计在使用时一般会出现哪些故障
人类正从工业文明走向数字文明 区块链和人工智能发展的拐点已至
JEEP自由光与奥迪Q5哪个好?一文了解两款车的区别
sip协议详细分析与实现
中国移动携手高新兴物联发布《中低速物联网业务迁移技术能力报告》
三星发布带遥控器的GearVR是为了向竞争对手看齐
仪器设备接地不好的危害
科普磁环电感耐压测试不过的可能原因
华为发布新的开发者技术,使能全场景智慧生态体验
全球最吸金的30大连接器厂商整理介绍
AGV/AMR锂电池应用情况
高需求高规格成工业电脑行业发展趋势
加利福利亚州法律规定在区块链上的签名将具有法律效力
激光雷达与自动驾驶如何创造未来
为什么有多核处理器?从多核到众核处理器
中国移动“5G+”计划推进5G发展,年底5G基站建设达35万个
BP2306CJ+BP2525B晶丰明源PWM/模拟调光 APFC BUCK 驱动芯片
软通动力“信创医共体解决方案”通过鲲鹏技术认证并获鲲鹏应用创新大赛第三名