SIP初步

1、什么是SIPSIP(会话发起协议)属于IP应用层协议,用于在IP网上为用户提供会话应用。会话(Session)指两方或多方用户之间的语音、视频、及其他媒体形式的通信,具体可能是IP电话、会议、即时消息等等。SIP是一个信令协议,它对应于传统电话网络中的呼叫信令协议(比如SS7ISUP)。构建一个完整多媒体通信架构还需要结合其他一些协议,必要的有:RTP,用于媒体传输;RSVP,用于QOS保证等等。发起方向目的方发送一个SIP请求消息(INVITE),其中包含提议的会话参数的描述,请求在二者之间建立一个会话;目的方返回一个SIP响应消息(200 OK),其中包含接受的会话参数的描述,接受会话建立请求发起方发送一个SIP请求消息(ACK)确认会话的建立。一个修改会话的简单例子如下图所示:会话中的任意一方可以发送一个SIP请求消息(reINVITE),其中包含提议的新的会话参数,请求修改二者之间的会话;另一方返回一个SIP响应消息(200 OK),其中包含接受的新的会话参数,接受会话修改请求一个结束会话的简单的例子如下图所示:会话中的任意一方可以发送一个SIP请求消息(BYE),请求结束会话;另一方返回一个SIP响应消息(200 OK),接受会话结束请求2.2 用户位置管理SIP支持用户(终端)的移动性。SIP要求终端定期向网络发送注册请求(REGGISTER),报告自己的当前位置。这样SIP服务器中始终存储了用户(终端)的当前地址。当用户被呼叫时,SIP服务器能够将SIP请求发送到用户的当前地址。3、实体 & 网络SIP UA(User Agent,用户代理)是最基本的SIP实体,它通常就是用户终端。理想情况下,通过SIPUA就可以完成用户之间会话的建立。(参见第2节 SIP基本功能中的会话发起与管理)。但是为了支持SIP的移动性,以及其他高级功能,比如运营商对呼叫的控制等等,会话发起及管理的信令过程不能直接在两个SIPUA之间完成,而是需要经过由若干SIP服务器构成的SIP信令网络。这些SIP服务器可以分为两类:注册服务器和路由服务器。SIP注册服务器(registrar)的主要功能是接受SIP UA的注册请求,维护用户名-地址映射。路由服务器的主要功能是将SIP消息路由到目标SIP UA。路由服务器有SIP重定向服务器(redirectserver)和SIP代理服务器(proxy)两种。前者以重定向方式路由SIP请求消息,后者以代理方式路由SIP请求消息。在重定向方式下(如下图所示),SIP重定向服务器收到了SIP请求消息,查询到目标SIPUA的当前地址后,通过SIP响应消息(302 Moved temporarily)返回给发起方SIPUA。之后的SIP消息交互与重定向服务器无关,发起方SIP UA直接向目标SIP UA的当前地址发送请求消息。在代理方式下(如下图所示),SIP代理服务器收到了SIP请求消息,查询到目标SIPUA的当前地址后,将SIP请求消息转发到目标SIPUA的当前地址。之后的SIP消息交互都要经过SIP代理服务器。这使得SIP代理服务器可以对会话进行控制,比如结束会话等等。4、SIP操作与SIP消息SIP所提供的功能是通过一些原子性的基本功能(比如注册(registration),发起会话(Initiation)、会话结束等)组合而成的。每个原子性基本功能是通过一个SIP操作完成的。SIP操作基于类似HTTP的请求/响应事务模型,每个操作的调用过程体现为一个所谓事务 –包含一个SIP请求和一个或多个相应的SIP响应。其中SIP请求消息中的方法(Method)指示出调用的操作。下表是在RFC 3261中定义的方法及其对应的SIP操作。方法MethodSIP操作INVITE会话邀请ACK确认会话邀请CANCEL取消会话邀请BYE结束会话REGISTER注册OPTIONS查询服务器能力SIP是一个基于文本(text-based)的协议,使用 UTF-8字符集。SIP消息与HTTP/1.1非常类似,同样可以包含消息体(message body),通常是会话描述(sessiondescriptions),也可能是其他内容。SIP 消息有两类:从客户机到服务器的请求消息(request),从服务器到客户机的响应消息(response)。除了第一行分别是请求行(Request-Line)和状态行(Status-Line)以外,SIP请求消息和SIP响应消息的剩下部分的组成基本类似,包括消息头域(messageheader)和消息体(message body)两部分(如下图所示)。4.1 SIP请求消息根据请求行中的方法(method)的不同,SIP请求消息有很多种,分别完成各种操作的调用,实现各种功能,下面进行简单的介绍。INVITE/reINVITE:INVITE发起会话邀请。reINVITE(在一个已存在的对话中发送的INVITE称为reINVITE)修改已建立会话的参数。ACK:完成会话建立的3次握手 [INVITE-200-ACK],仅仅用于INVITEBYE :结束会话。CANCEL:取消正在建立中会话(INVITE已发送,但尚未收到最终响应(final response))。UPDATE:更新会话参数。它被建议用于替代 re-INVITE,与re-INVITE不同在于:它可以在初始INVITE未完成时发送,能用于在早对话(early dialog)中更新会话参数。上面的4个请求用于会话建立与管理。REGISTER:登记UA当前的联系地址(contact)OPTIONS:查询服务器或对端UA的能力,具体包括支持的方法(method),扩展(extensions)、编解码(codecs)等。PRACK:临时响应(Provisional Response)确认。用于确认收到了临时响应,例如 “183 SessionProgress”,以支持临时响应的可靠传送。它不能应用于“100 Trying ”,只有101~199临时响应需要可靠传送。如果没有收到 PRACK,响应消息将被重传。 NOTIFY:事件通知,具体的事件包括、业务状态的改变(MWI,...),用户状态的改变等等。SUBSCRIBE:订阅/取消(Expires=0)事件通知。PUBLISH:发布事件状态。PUBLISH 与 REGISTER的相似之处在于:允许用户在另一个实体(状态管理实体/registrar)中创建、修改和移除自己的状态。对PUBLISH请求的寻址与对于SUBSCRIBE 请求的寻址是一样的,PUBLISH 请求的Request-URI中填入的是用户希望发布其事件状态的资源地址。上面的3个请求构成SIP事件发布-订阅-通知机制INFO:用于传送 mid-call 信令信息,同一时刻只能有一个 INFO 事务存在。通常用于携带 PSTN 信令消息(作为MIME 附件),例如,ISDN UUI (用户到用户信息)。MESSAGE:针对即时消息 (IM)的扩展,用于传送即时消息。MESSAGE请求通过MIME附件中携带内容。MESSAGE请求自身不发起 SIP 对话,在正常的用法中,每个即时消息都是单独存在的,非常类似 pager 消息。MESSAGE请求可以在其他SIP请求发起的对话上下文中发送。REFER:指示接收者 (Request-URI所标识的) 应该使用请求中提供的信息联系第三方。典型应用:CallTransfer features 。Allowed outside an established dialogue。4.2 SIP响应消息状态码描述例子1xxInformational请求收到,处理中180 Ringing181 Call is Being Forwarded2xxSuccess操作已成功完成200 OK3xxRedirection请求被重定向300 Multiple Choices302 Moved Temporarily4xxClient Error请求包含错误的文法,或者无法在本服务器上完成401 Unauthorized408 Request Timeout5xxServer Error请求有效,但服务器无法完成503 Service Unavailable505 Version Not Supported6xxGlobal Failure请求在任何服务器上都无法完成600 Busy Everywhere603 Decline4.3 SIP消息头域根据请求行中的方法(method)的不同,SIP请求消息有很多种,分别完成各种操作的调用,实现各种功能,下面进行简单的介绍。Call-ID:用于唯一标识一个特定的会话或注册消息。应该具有随机性,保证全球唯一。例子:Call-ID:31415926535@uunet.comFrom:源端SIP URL,标识请求发送方;UAC本地标签。例子:From: sip:+1-314-342-7360 @gateway.wcom.com; tag=1234567To:目标SIP URL,标识请求接受方;UAS本地标签。例子:To: sip:10109000@operator.mci.com; tag=314Via:用于记录请求经由的路径例子:Via: SIP/2.0/TCP uunet.comMax-Forwards:消息最大转发次数。服务每次转发消息时将此域值减1,当变成0时,服务器发送 483响应(TooMany Hops response)。例子:Max-Forwards: 10Cseq:请求序列号,用于区分同一个会话中的不同请求。例如:CSeq: 1 INVITECSeq: 4325 BYECSeq: 1 REGISTER上面6个头域是所有SIP消息中的必需的头域。Contact 另一个SIP URL用于直接消息路由。例如:Contact: W. Riker, Acting Captain riker@starfleet.govRecord-Route 需要自己处在后继消息的路径上时,proxy将自己的地址加插在请求消息中例子:Record Route: sip.mci.comRoute 确定消息的选路例子:Route: orinoco.brooks.netContent-Length:消息体中的 Octet 数例子:Content-Length: 285Content-Type:消息体内容类型例子:Content-Type: application/sdp5、详细的例子 (摘自IETF RFC 3261)实际的例子可以帮助大家进一步地认识和理解前面的内容。这里的两个例子分别是关于SIP的两个最基本的功能:注册和会话建立。每个例子中给出了消息交互过程,以及必要的消息内容细节。出于简明性的考虑,这里给出的消息的内容忽略了消息体及相应的头域(Content-Length和 Content-Type)。另外,还有一些头域比如Allow和 Supported 通常也会出现,但这里并未给出。5.1 注册Bob在开机时注册。消息流如下图所示。注意为了简化流程,这里没有给出在注册时通常所必需的鉴权过程。消息细节:F1 REGISTER Bob ->RegistrarREGISTER sip:registrar.biloxi.comSIP/2.0Via: SIP/2.0/UDPbobspc.biloxi.com:5060;branch=z9hG4bKnashds7Max-Forwards: 70To: BobFrom: Bob;tag=456248Call-ID: 843817637684230@998sdasdh09CSeq: 1826 REGISTERContact:Expires: 7200Content-Length: 0这次注册的有效期为2个小时(7200秒)注册服务器返回 200 OK 响应。F2 200 OK Registrar -> BobSIP/2.0 200 OKVia: SIP/2.0/UDPbobspc.biloxi.com:5060;branch=z9hG4bKnashds7;received=192.0.2.4To: Bob;tag=2493k59kdFrom: Bob;tag=456248Call-ID: 843817637684230@998sdasdh09CSeq: 1826 REGISTERContact: Expires: 7200Content-Length: 05.2 会话建立与拆除会话建立是SIP的最基本的功能。消息流如下图所示。消息内容:(注意这里并未给出会话媒体参数SDP的细节)F1 INVITE Alice -> atlanta.com proxyINVITE sip:bob@biloxi.com SIP/2.0Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8Max-Forwards: 70To: Bob From: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContact:Content-Type: application/sdpContent-Length: 142(Alice的 SDP 未显示)F2 100 Trying atlanta.com proxy ->AliceSIP/2.0 100 TryingVia: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob From: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContent-Length: 0F3 INVITE atlanta.com proxy -> biloxi.comproxyINVITE sip:bob@biloxi.com SIP/2.0Via: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1Max-Forwards: 69To: Bob From: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContact:Content-Type: application/sdpContent-Length: 142(Alice的 SDP 未显示)F4 100 Trying biloxi.com proxy -> atlanta.comproxySIP/2.0 100 TryingVia: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob From: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContent-Length: 0F5 INVITE biloxi.com proxy -> BobINVITE sip:bob@192.0.2.4 SIP/2.0Via: SIP/2.0/UDPserver10.biloxi.com;branch=z9hG4bK4b43c2ff8.1Via: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1Max-Forwards: 68To: Bob From: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContact:Content-Type: application/sdpContent-Length: 142(Alice的 SDP 未显示)F6 180 Ringing Bob -> biloxi.com proxySIP/2.0 180 RingingVia: SIP/2.0/UDPserver10.biloxi.com;branch=z9hG4bK4b43c2ff8.1;received=192.0.2.3Via: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710Contact: CSeq: 314159 INVITEContent-Length: 0F7 180 Ringing biloxi.com proxy -> atlanta.comproxySIP/2.0 180 RingingVia: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710Contact: CSeq: 314159 INVITEContent-Length: 0F8 180 Ringing atlanta.com proxy ->AliceSIP/2.0 180 RingingVia: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710Contact: CSeq: 314159 INVITEContent-Length: 0F9 200 OK Bob -> biloxi.com proxySIP/2.0 200 OKVia: SIP/2.0/UDPserver10.biloxi.com;branch=z9hG4bK4b43c2ff8.1;received=192.0.2.3Via: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContact: Content-Type: application/sdpContent-Length: 131(Bob的 SDP 未显示)F10 200 OK biloxi.com proxy -> atlanta.comproxySIP/2.0 200 OKVia: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContact: Content-Type: application/sdpContent-Length: 131(Bob的 SDP 未显示)F11 200 OK atlanta.com proxy -> AliceSIP/2.0 200 OKVia: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContact: Content-Type: application/sdpContent-Length: 131(Bob的 SDP 未显示)F12 ACK Alice -> BobACK sip:bob@192.0.2.4 SIP/2.0Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds9Max-Forwards: 70To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 ACKContent-Length: 0现在Alice和Bob之间的媒体会话被建立。Bob首先挂机。注意Bob的SIP 话机维护自己的 CSeq 编号空间,在这里是从231开始。因为是Bob 发送的请求,To 和From 头域的URIs和tags参数被掉换。F13 BYE Bob -> AliceBYE sip:alice@pc33.atlanta.com SIP/2.0Via: SIP/2.0/UDP 192.0.2.4;branch=z9hG4bKnashds10Max-Forwards: 70From: Bob;tag=a6c85cfTo: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 231 BYEContent-Length: 0F14 200 OK Alice -> BobSIP/2.0 200 OKVia: SIP/2.0/UDP 192.0.2.4;branch=z9hG4bKnashds10From: Bob;tag=a6c85cfTo: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 231 BYEContent-Length: 0
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值