您好,欢迎访问三七文档
SIP(SessionInitiationProtocol)基础培训Jade2016/11目录概述SIP消息SIP流程RTP协议DTMFSIP会话启动协议SIP(SessionInitiationProtocol)是一个在IP网络上进行多媒体通信的应用层控制协议,它被用来创建、修改、和终结一个或多个参加者参加的会话进程。SIP协议可用于发起会话,也可以用于邀请成员加入已经用其它方式建立的会话。基于文本编解码采用事务机制,每一个请求触发Server的操作方法,请求和响应构成一个事务,事务间彼此独立独立于底层传输协议:SIP协议承载在IP网,网络层协议为IP,传输层协议可用TCP或UDP,推荐首选UDP。UDPDHCPDNSRSVPRTCPRTPSIPHTTPTCPSigcompIP4/IPv6媒体编码SDP接入网(GPRS,UMTS,WLAN,...)SIP在协议栈中的位置SIP标准SIP核心标准–RFC3261SessionInitiationProtocolSIP扩展标准–RFC2976TheSIPinfomethod–RFC3263LocatingSIPServers–RFC3265SIP-SpecificEventNotification–RFC3311UPDATEMethod–RFC3326TheReasonHeaderField–RFC3372SIPforTelephones(SIP-T):ContextandArchitectures–RFC3398ISUPtoSIPMapping–RFC3428SIPExtensionforInstantMessaging–RFC3262ReliablityofProvisionalResponseinSIPSIP参考标准–RFC2327SessionDescriptionProtocol–RFC3264OfferAnswerModelwithSDPSIP应用组网SGSoftSwitchTMGPSTN/PLMNInternetWMCASStorageServerSMSWPSPGW3rdPartyASMGCPPhoneSIPPhonePacketcorenetworkMRSISUPSIPH.323MGCPSIPH.323INAPCAPTCP/IPTCP/IPH.248MGCPSIPPARLAYAPIM3UASCTPH.248MGCPINAPSIPINAPSCPSMSSCETraditionalINRTP媒体流ENUMServerENUMMobilePhonePSTNPhoneUniPhoneH.323PhoneSIP逻辑实体UAS:用户代理服务端UAC:用户代理客户端,UAC和UAS是一个逻辑功能,发起请求的一方为UAC,处理请求的一方为UAS。根据此刻正在处理的消息,SIP设备实体不停在UAC和UAS间转换,即UAC/UAS角色在事物中存在。可以将UAC理解为初始化请求的一段代码,并且在事务中遵循UAC的规则。如果它接下来收到一个请求,那么在那个事务中,它就是作为UAS来处理请求;UAS同理。代理服务器:代理服务器接收SIP请求并将其路由至其他代理服务器或最终用户重定向服务器:重定向服务器收到请求时,可以通过应答将路由信息推送到客户端,客户端收到应答可以重新向指定的服务器发起请求注册服务器:用来接受UAC的注册请求,登记用户的联系方式信息,如果存在定位服务器,把信息写入定位服务器以上为逻辑实体,物理实现上,注册服务器和代理服务器可以为同一物理设备,甚至所有服务器可以为同一物理设备。目录概述SIP消息SIP流程RTP协议DTMFSIP消息概述SIP是一个使用UTF-8字符集的文本协议,协议定义了两类消息格式:请求消息和应答消息消息格式定义(类似HTTP):从消息格式中可以看出,请求消息和应答消息的start-line不同,请求消息start-line为Request-Line,应答消息start-line为Status-LineRequest-Line定义如下:–Request-Line=MethodSPRequest-URISPSIP-VersionCRLFStatus-Line定义如下:–Status-Line=SIP-VersionSPStatus-CodeSPReason-PhraseCRLFmessage-header由一些头域(headerfield)组成,包含哪些头域取决于具体的消息和Methodmessage-body:由头域中的Content-type组成,一般为sessiondescription(SDP)说明:SP为空格,CRLF为回车换行SIP消息概述实例请求消息格式应答消息格式Request-Line定义1Request-Line=MethodSPRequest-URISPSIP-VersionCRLFRFC3261定义了6种Method,可理解为request请求的子消息类型:–REGISTER:用于向注册服务器联系人地址–INVITE:用于发起会话请求,邀请某个用户加入会话,发出invite的一方可以通过messagebody携带SD,指明本次会话的媒体类型及参数–ACK:对INVITE的最终响应,该消息仅和INVITE配套使用–CANCEL:取消尚未完成的invite请求–BYE:结束会话–OPTIONS:查询服务器能力RFC3262扩展定义了PRACK方法:对于临时应答(除100外的1xx类应答)的响应,保证临时应答端到端的可靠性RFC2976扩展定义了INFO方法RFC3428扩展定义了MESSAGE方法RFC3311扩展定义了UPDATE方法RFC3265扩展定义了NOFIFY方法RFC3892扩展定义了REFER方法支持哪些method可以通过头域中的Allow指示Request-Line定义2Request-Line=MethodSPRequest-URISPSIP-VersionCRLFRequest-URI代表请求涉及的用户或者服务的地址格式:sip:user:password@host:port;uri-parameters?headersuser:用户地址标识,可以是标准的电话号码/文本形式的用户名password:可选,不推荐用户密码明文传输host:代表提供SIP服务的地址标识,可以是域名或者IP地址port:和host配对,指明提供SIP服务的TCP/UDP端口号uri-parameters:uri参数,格式类似HTTP,采用name=alue格式,具体参数含义参考协议headers:请求的头域,类似http,采用hname=halue&hname2=hvalue格式,不常用。MethodRequestURISIPversionStatus-Line定义status-line=SIP-VERSIONSPSTATUS-CODESPReason-PhraseCRLFSTATUS-CODE由3位数字组成,代表请求处理的结果,Reason-Phrase为code对应的文本解释。STATUS-CODE可以理解为响应报文的子消息类型,第一个数字代表大类,后2个数字代表具体应答子类型1xx类应答:临时应答,代表请求已经收到,正在处理这个请求2xx类应答:最终应答,代表请求已经处理成功3xx类应答:重定向类,需要将该请求转发到其他服务器上处理4xx类应答:客户端错误,请求消息的格式服务器无法接受,或者服务器不能处理5xx类应答:服务器错误,请求合法,但是服务器无法处理6xx类应答:请求不能被任何服务器处理典型的STATUS-CODE100:正在尝试-和Q.931CALLPROCEEDING类似,可能会被代理服务器、或者呼叫信令路径上的其他中间SIP服务器返回180:正在振铃-和Q.931ALERTING类似。表示虚拟或者真实的电话正在振铃200:请求成功执行(OK)300:在对请求中的地址进行解析时出现多个选择。它们会被返回,呼叫者可以从列表中挑出一个来重定向呼叫。401:在进行这项请求之前,用户需要授权403:禁止请求——不要再次尝试407:在行进之前,首先用户代理授权501:因为没有实现该服务,服务器不能供给该请603:被叫用户拒绝该呼叫以上为常用的status-code,更多code参考RFC3261协议头域定义头域格式:field-name:field-value*(;parameter-name=parameter-value)头域有多种,本文只描述常用的头域,其他参考协议。常用头域:FromToCall-IDCseqViaContactProxy-AuthenticateProxy-AuthorizationAuthorization头域定义一From代表请求的发起者,和SIPURI类似,多一个tag参数,是一个随机数,作为一个标志使用To指明请求的接收者Call-ID唯一区别一个特定的邀请或者一个特定客户端的所有注册项Cseq请求中的Cseq头域包含了一个单个的数字序列号和请求的方法。Cseq头域是为了在会话中对事务进行排序的,提供事务的唯一标志,并且区分请求和请求的重发Contact会话参与者的联系方式头域定义二Via用来描述请求当前经历的路径的,并且标志了应答所应当经过的路径。请求每经过一次转发,都会将本次转发实体的地址记录到via头域中,应答每经过一次转发,都会将本转发实体的地址从via头域中删除,并且Via头域的branchID参数提供了事务的标志,并且用于proxy来检查循环路由Proxy-AuthenticateProxy-Authorization用于用户到代理服务器的认证,代理服务器收到请求时,如果要求UAC认证,会返回一个status-code为407的应答,该应答中携带Proxy-Authenticate头域,要求UAC重新发起请求,同时携带Proxy-Authorization来代理服务器进行认证。具体参考RFC2617HTTPauthentication:BasicandDigestAccessAuthentication,SIP使用的是RFC2617基于MD5算法的Digest认证。Authorization用于用户到用户的认证,比如注册服务器收到请求时,如果要求UAC认证,会返回一个status-code为401的一个应答,该应答中携带头域,要求UAC重新发起请求,同时携带Authorization来注册服务器进行认证。具体参考RFC2617message-body定义Message-body由头域中的Content-type决定,在SIP中,一般为基于RFC2327SDP的会话描述(SessionDescription),会话双方通过交换会话描述信息协商会话的媒体类型及相关参数,具体规范参考RFC3264offer/answermodelwithsdp会话双方经过offer/answer协商会话描述信息后,可以开始通过RTP交换语音流会话过程中,可以通过re-Invite修改SDP会话媒体方向属性,以支持呼叫保持此处只指出VOIP媒体类型的关键信息,具体细节进一步参考RFC2327SDP协议本端IP媒体类型端口协议媒体属性:RTP协议对应的语音压缩算法媒体方向属性:sendrecv:收发双向sendonly:本端只发不收,用于呼叫保持recvonly:本端只收不发,用于呼叫保持SIPrequest消息SIP/协议版本响应消息头Call-id:值via:值消息头参数行To:值Contact:值From:值Content-Length:值Max-Forward:值WhiteSpaceSDPContent-Ty
本文标题:SIP基础培训
链接地址:https://www.777doc.com/doc-960407 .html