论坛网站怎么推广,模板网站会员,二级网站建设费用,利用公共dns做网站解析SIP协议是一个用于建立#xff0c;更改和终止多媒体会话的应用层控制协议#xff0c;大量借鉴了成熟的HTTP协议#xff08;文本格式编码#xff0c;Request消息中的method等#xff09;#xff0c;采用基于文本的UTF-8编码方式#xff0c;可以承载与UDP或者TCP协议之上(… SIP协议是一个用于建立更改和终止多媒体会话的应用层控制协议大量借鉴了成熟的HTTP协议文本格式编码Request消息中的method等采用基于文本的UTF-8编码方式可以承载与UDP或者TCP协议之上(首选UDP)。和Diameter协议类似SIP也是有一个基础协议和很多扩展协议基础协议在RFC3261中定义本文主要概括SIP基础协议的要点。 1. 基本概念 · SessionSession简单的说就是一次通话从摘机拨号开始到最终的挂机之间所有的SIP消息都属于一个Session它们具有相同的Call-Id。 · Dialog基于Peer-to-Peer描述了两端的User Agents在一段时间内的关联。Dialog用Dialog Id来表示Dialog Id是由三部分组成的Call-Idfrom中的tagto中的tag。只有对Invite消息响应的的2xx 和 101-199 消息才能建立一个Dialog。100 Trying相应无法建立Dialog因为100 Trying中的To属性没有tag值。 · Transaction一个Transction是有一个Request消息和一个或者多个临时或者最终应答消息构成的。如果对Invite的应答是200 OK则接下来的ACK消息认为是另一个transaction。 2. SIP网络实体 · UA(User Agent)和用户直接交互的SIP设备可以是硬件的SIP电话也可以是电脑上具有SIP电话功能的软件等发送SIP Request消息的UA即UAC(User Agent Client), 接受SIP Request消息的UA即UAS(User Agent Server), 一个UA通常既是UAC又是UAS。 · Proxy Server进行消息转发负责把消息转发给最终用户或者另一个Proxy Server。 · Redirect Server和Diameter的Redirect Server类似不进行消息转发而是给消息发送方回复一个或者多个地址建议发送方把消息发往这些地址。Redirect Server返回的地址并不一定就是最终用户的地址也有可能是另一个Proxy Server的地址。 · Registrars: 因为SIP需要支持用户的移动性所以当用户改变位置后需要对新位置的终端进行注册Registrars接受SIP用户注册从而得知可以从何处找打当前用户。Registrars通常位于SIP Server(Proxy Server 或者Redirect Server)中。 · Location Server不是SIP实体之所以说它不是SIP实体是因为Location Server上面不必运行SIP协议栈SIP Server和 Location Server之间的通信方式也不是用SIP(比如用LDAP)。Location Server的作用是保存SIP用户位置数据(IP 或者Hostname)比如当一个SIP用户向SIP Server注册之后SIP Server将该SIP用户位置信息上传到Location Server中当SIP Server收到需要发送给该SIP用户的消息时SIP Server再向Location Server询问该用户位置信息(IP 或者Hostname)。 3. SIP消息分类 SIP消息分为如下两类: · 请求消息UAC发给UAS的消息包括INVITE、ACK、BYE、CANCEL、OPTION和REGISTER消息。 · 响应消息UAS回应给UAC的消息包括1xx、2xx、3xx、4xx、5xx、6xx响应消息每类消息的具体含义如下表 1xx 进展相应 临时相应 2xx 成功 最终相应 3xx 重定向错误 最终相应 4xx 客户端错误 最终相应 5xx 服务端错误 最终相应 6xx 全局错误 最终相应 4. SIP消息格式 SIP由于是采用文本格式编码所以消息格式很简单是由Message Header加可选的Message body构成Message Header 从第二行开始每一行都由“Tag :Valued”格式组成每一行描述一个属性。 头部的属性有很多基本协议中定义了一部分扩展协议也定义了相应的头部属性。如果消息中携带了Message body则Message Header和Message body之间用一个空行分割开来Message body通常有“Content-Type”和“Content-Length”属性来对Message body进行解释例如 Content-Type: application/sdp Content-Length: 212 SIP消息也可以携带多个Message body比如可以带上SDP信息和主叫方的照片这样被叫就能看到主叫方的头像了。 SIP消息在经过Proxy的时候Proxy只关心Message Header而不会检查Message body所以说Message body对Proxy是透明的。 5. SDP(Session Description Protocol) 在SIP的Message body中最常见的就是SDP这里概述一下SDP。Session Description Protocol (SDP) 在RFC 2327中被定义SDP中携带了一些必要信息以供用户可以加入一个多媒体会话比如IP地址端口号会话的日期时间等这有点儿类似电视台的节目单有了节目单我们就可以在指定的时间切换到指定的频道收看到预期的节目。SDP是单独定义的和SIP没有必然的联系SDP信息可以通过各种途径传输比如EmailWebpage等SIP只是众多传输SDP方式中的一种而已。 1) SDP语法 SDP也是用文本格式描述的一个SDP Description可以包含很多行每一行的格式如下 Type Value Type只用一个字母来表示一个SDP Description通常有一个Session-level和多个Media-level信息组成Session-level信息用来描述整个Session每个Media-level信息用来描述一个特定的媒体流。Session-level总以”v0”开头Media-level总已”mmedia type port number transport protocol media formats”开头,。下面是一个SDP Description的例子该例子中包含了三个Media-level信息 v0 oBob 2890844526 2890842807 IN IP4 131.160.1.112 sSIP seminar iA Seminar on the Session Initiation Protocol uhttp://www.cs.columbia.edu/sip ebobuniversity.edu cIN IP4 224.2.17.12/127 t2873397496 2873404696 arecvonly maudio 49170 RTP/AVP 0 artpmap:0 PCMU/8000 mvideo 51372 RTP/AVP 31 artpmap:31 H261/90000 mvideo 53000 RTP/AVP 32 artpmap:32 MPV/90000 该例中o描述该session的发起者是Bob以及他的IP地址s描述该session的名字i描述了该session的一般信息u说明可以从这个URL中获取和该session相关的更多信息e描述了该session联系人的email。C和t描述了什么时间从哪里可以接收到该Session的multicast。m描述了一个媒体流的端口号传输协议媒体格式等信息。a可以用来对SDP进行扩展比如双方如果协商音频的音量可以用下面的SDP描述 maudio 49170 RTP/AVP 0 avolume:8 前提是双方都需要理解volume的含义如果对方不理解volume也不会出错只是将其忽略。 2) SDP描述中常见属性 v Protocol version b Bandwidth information o Owner of the session and session identifier z Time zone adjustments s Name of the session k Encryption key i Information about the session a Attribute lines u URL containing a description of the session t Time when the session is active e E-mail address to obtain information about the session r Times when the session will be repeated p Phone number to obtain information about the session m Media line c Connection information i Information about a media line 6. SIP呼叫流程实例分析 下图是一个完整的SIP呼叫消息流示意图这里重点关注SIP消息流下一篇文中将给出一个稍微复杂的例子那个例子中将重点关注SIP消息的路由和SIP常见头部字段的含义。 Laura要与Bob通话Laura拨打Bob的的Public URIsip:Bob.Johnsoncompany.com给Bob一个Invite消息在Invite消息中携带了SDP表明Laura期望在UDP端口20002上收到包含PCM voice编码的RTP数据包。Proxy收到这个Invite消息后转发给Bob同时给Laura回送一个100 Trying消息(Trying消息是Hop-to-Hop的不会被转发)。Bob收到Invite消息后开始振铃返回180 Ringing消息给LauraLaura侧会听到回铃音。 INVITE sip:Bob.Johnsoncompany.com SIP/2.0 Via: SIP/2.0/UDP workstation1000.university.com:5060 From: Laura Brown sip:Laura.Brownuniversity.com To: Bob Johnson sip:Bob.Johnsoncompany.com Call-ID: 12345678workstation1000.university.com CSeq: 1 INVITE Contact: Laura Brown sip:Lauraworkstation1000.university.com Content-Type: application/sdp Content-Length: 154 v0 oLaura 2891234526 2891234526 IN IP4 workstation1000.university.com sLet us talk for a while cIN IP4 138.85.27.10 t0 0 maudio 20002 RTP/AVP 0 当Bob摘机后一个200 OK的最终应答消息会被返回给Laura消息中携带了一个SDP表明Bob可以在UDP端口41000上接受数据包。Laura收到200 OK后给Bob发送一个ACK消息确认已经收到200 OK。此时双方进入通话。 SIP/2.0 200 OK Via: SIP/2.0/UDP 131.160.1.110 Via: SIP/2.0/UDP workstation1000.university.com:5060 From: Laura Brown sip:Laura.Brownuniversity.com To: Bob Johnson sip:Bob.Johnsoncompany.com;tag314159 Call-ID: 12345678workstation1000.university.com CSeq: 1 INVITE Contact: Bob Johnson sip:Bob131.160.1.112 Content-Type: application/sdp Content-Length: 154 v0 oBob 2891234321 2891234321 IN IP4 131.160.1.112 sLet us talk for a while cIN IP4 131.160.1.112 t0 0 maudio 41000 RTP/AVP 0 当通话结束时Bob发送一个Bye消息给LauraLaura随后回应200 OK给Bob至此通话结束。 参考资料 1. “RFC 3261”- Section 4Section 12Section 17Section 24 2. “SIP Demystified”- Chapter 4 Chapter 5