SIP协议介绍

                                                 SIP协议介绍



1、sip简介

  • SIP默认使用UDP 5060端口,但也可以使用TCP 5060

  • SIP使用Server-Client模型

  • SIP的四项基本功能:定位用户,将SIP地址解析为IP地址;协商Session的feature(特征)和capability;在进行呼叫时改变会话参数;负责会话的建立和中断

  • SIP地址形式:sip:1112223344@mycompany.comsip:1112223344@10.1.1.1

  • presence概念。用户可为自己设置offline、busy等状态

2、sip组件

  • User Agent : UA是SIP的基本组件,可分为UAC(User Agent Client)和UAS(User Agent Server)。发起呼叫的为UAC,接收呼叫的为UAS。很多设备都可做UA,如IP电话,pc,路由器等。
  • Proxy Server :proxy server起到call routing(呼叫线路)、authentication(身份验证)、authorization(授权)、address resolution(解决寻址)、loop detection(循环检查)的功能。

UAC(用户代理客户端)发起呼叫时会先把call setup message发给proxy server(代理服务器),如果proxy server知道UAS(用户代理服务器)的位置,会把call setup message转发给UAS(是next hop),否则会找其他的server查询。UAS接收到call setup后会给proxy server响应,proxy server再把这个响应返回给UAC。当呼叫建立之后,proxy server有2种选择。第一、呼叫建立之后还处于UAC和UAS之间的signaling path之间(Record-Route),以监视call change message或call termination message。第二、退出UAC和UAS之间的signaling path不再参与会话。

  • Redirect Server(重定向服务器)

UA、Proxy Server可与Redirect Server通讯,以查找另一个endpoint的位置。这在一个移动网络内尤其有用,Redirect Server可以通知其clients,某一用户是否临时或永久的移动到另一位置。甚至可以通知某一用户移动到了多个位置(例如一个用户同时拥有多部IP电话)如此一来当其他UAC呼叫这样的UAS时,proxy server会先拦住这样的会话,之后让UAS的多部电话同时振铃或依次振铃,这就是“find me”或“follow me”功能。在ccm 4.2中,这个功能是由unity实现的。cisco的router可以做redirect server。

  • Registrar Server(注册服务器)

UA可以向Registrar Server注册自己的位置信息,Registrar Server将位置信息保存在数据库中(也可保存在其他server的数据库中)以回复其他server发来的location request。cisco的路由器和ccm 5.x可做registrar server.

  • Location Server(本地服务器)

负责维护Location Database。

  • Back-to-back user agent (B2BUA)背靠背用户代理

B2BUA同时扮演UAC和UAS的角色。calling UA发起呼叫至B2BUA,此时B2BUA扮演UAS角色,之后B2BUA在以UAC的角色呼叫called UA。这样做的好处是,B2BUA有更细的控制粒度,甚至是改变呼叫请求的内容。ccm5.x可作为B2BUA。

  • Presence Server(状态服务器)

负责维护presence信息,并发送status notification

3、SIP Messages(methods)

      1> REGISTER

           UA client使用此message向server注册以标明自己的

      2> INVITE

           UAC发送此信息用以邀请UAS加入会话(包括一对一通话或conference),其实就是一个call setup message

      3> ACK

           为INVITE回复一个确认信息。

      4> CANCEL

           用来中止一个还没建立(在建立过程当中)的呼叫

      5> OPTIONS

           用来查询server的capability

     6> BYE

           用来中断呼叫

     7> INFO*

           当message body中包含数据时,使用INFO message。

     8> PRACK*

           用于回复一个临时性的请求。

     9> REFER*

           使用这个REFER指向另一个电话,从而完成call transfer.

     10> SUBSCRIBE*

          告诉server一旦发生特定事件时,愿意接收一个通知

      11> NOTIFY*

          用来通知subscriber发生了特定的事件,也可用于传送DTMF

       12> UPDATE*

          在接到初始INVITE的回复时,UAC用UPDATE修改一个呼叫的参数,例如QoS。

     

       *INFO、PRACK、REFER、SUBSCRIBE、NOTIFY、UPDATE这6种message,cisco gatew只被动接收,而不会自动产生

 

4、 SIP Response

             Class of Response                       Status Code                                   Explanation

                                                                       100                                                  Trying

                                                                       180                                                  Ringing

           Informational/provisional                     181                                                  Call Is Being Forwarded

                                                                       182                                                  Queued

                                                                       183                                                  Session Progress

                  Success                                        200                                                 OK

                                                                       300                                                  Multiple Choices

                                                                       301                                                  Moved Permanently

                 Redirection                                    302                                                  Moved Temporarily

                                                                       305                                                  Use Proxy

                                                                       380                                                  Alternative Service

                Client-error                                     400                                                  Bad Request

                                                                       401                                                  Unauthorized

                                                                       402                                                  Payment Required

                                                                       403                                                  Forbidden

                                                                       404                                                  Not Found

                                                                       405                                                 Method Not Allowed

                                                                       406                                                 Not Acceptable

                                                                       407                                                 Proxy Authentication Required

                                                                       408                                                 Request Timeout

                                                                       410                                                 Gone

                                                                       413                                                 Request Entity Too Large

                                                                       414                                                 Request URL Too Large

                                                                       415                                                 Unsupported Media Type

                                                                       416                                                 Unsupported URI Scheme

                                                                       420                                                 Bad Extension

                                                                       421                                                 Extension Required

                                                                       423                                                 Interval Too Brief

                                                                       480                                                 Temporarily Not Available

                                                                       481                                                 Call Leg or Transaction Does Not Exist

                                                                       482                                                 Loop Detected

                                                                       483                                                 Too Many Hops

                                                                       484                                                 Address Incomplete

                                                                       485                                                  Ambiguous

                                                                       486                                                  Busy Here

                                                                       487                                                  Request Terminated

                                                                       488                                                  Not Acceptable Here

                                                                       491                                                  Request Pending

                                                                       493                                                  Undecipherable

                                                                       500                                                  Internal Server Error

                                                                       501                                                  Not Implemented

                                                                       502                                                  Bad Gateway 

                      Server-error                             503                                                   Service Unavailable

                                                                       504                                                  Server Timeout

                                                                      505                                                   SIP Version Not Supported

                                                                      513                                                   Message Too Large

                                                                      600                                                   Busy Everywhere

                                                                      603                                                   Decline

                     Global failure                            604                                                   Does Not Exist Anywhere

                                                                      606                                                   Not Acceptable

 

5、SIP Message Example

      SIP-GW#debug ccsip messages

      Sent:

      INVITE sip:3401@10.6.2.10:5060 SIP/2.0    //这里是UAS的地址

      Via: SIP/2.0/UDP 10.6.3.1:5060;branch=z9hG4bKA1798  //每一跳都会在Via中写上自己的地址

      From: <sip:4105553501@10.6.3.1>;tag=105741C-1D5E   //这里UAC的地址

      To: <sip:3401@10.6.2.10>

      Date: Fri, 06 Jan 2006 05:35:01 GMT

      Call-ID: E937365B-2C0C11D6-802FA93D-4772A3BB@10.6.3.1  //这个呼叫的唯一标识

      Supported: 100rel, timer    //支持的extension

      Min-SE: 1800                //minimum session interva

      Cisco-Guid: 3892269682-738988502-2150410557-1198695355  //唯一标识发起INVITE的UAC

      User-Agent: Cisco-SIPGateway/IOS-12.x

      Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK, COMET, REFER, SUBSCRIBE, NOTIFY, INFO,

     UPDATE, REGISTER //支持的methods

     CSeq: 101 INVITE //call sequence number

     Max-Forwards: 70    //最多有多少个proxy或gateway可以forward这个呼叫

     Remote-Party-ID: <sip:4105553501@10.6.3.1>;party=calling;screen=no;privacy=off

     Timestamp: 1014960901

     Contact: <sip:4105553501@10.6.3.1:5060>

     Expires: 180

     Allow-Events: telephone-event

     Content-Type: application/sdp //包含SDP message

     Content-Length: 202

6、SDP(会话描述协议)

     SIP使用SDP(Session Description Protocol)来协商capability和call feature。

     v=0 //v=版本号

     o=CiscoSystemsSIP-GW-UserAgent 7181 811 IN IP4 10.6.3.1 //o=originator的组织

     s=SIP Call //s=SDP的描述信息

     c=IN IP4 10.6.3.1   //c=originator的IP地址

     t=0 0 //t=time value

     m=audio 18990 RT   //m=originator希望使用的media

     SIP-CME#P/AVP 0 19

     c=IN IP4 10.6.3.1

     a=rtpmap:0 PCMU/8000   //a=media的属性

     a=rtpmap:19 CN/8000

     a=ptime:20

7、Call Flow(译:调用流)

     1> Call Flow Between Two SIP Gateways

         在这个场景里,GW-A扮演UAC的角色,GW-B扮演UAS的角色

         1) 左边的模拟电话摘机,拨叫右边的模拟电话,左边的PBX给GW-A发出call setup message。GW-A向GW-B发起INVITE,其中会包含用于协商capability的SDP,同时GW-A还会向左边的PBX发出call proceeding,告诉它会话正在建立当中。

         2) GW-B将收到的INVITE转换为call setup message发送给右边的PBX.同时向GW-A发送SIP Response 100 Trying。右边PBX与右边的模拟话建立连接后,使用call proceeding通知GW-B,GW-B向GW-A发送SIP Response 180 Ringing(告诉GW-A给左边的模拟电话发送拨通音)

         3) GW-A会将SIP Response翻译为PBX能够看懂的指令并发送给左边PBX

         4) 右边的模拟电话摘机后,PBX发送connect通知GW-B,之后GW-B会给GW-A发送SIP Response 200 OK。GW-A会再将SIP Respose 200 OK翻译为connect发送给左边的PBX。

         5) 最终一条ACK由左边的PBX产生,延GW-A,GW-B发送给右边的PBX。此时通话建立,随后的就是RTP语音流了.

         6) 左边的模拟电话挂机,左边的PBX产生disconnect,GW-A将其转换为Bye发送给GW-B,同时会给左边的PBX发送一条release信息。

         7) 右边的PBX收到GW-B发送的disconnect后,会回复一条release信息,GW-B再向GW-A发送SIP Response 200 OK。至此,通话中断。

     2> Call Flow Using a Proxy Server(Record-Route is disabled)

        UA都可以在Proxy Server和Registrar Server上注册

        1) UAC向Proxy Server发送INVITE,其中会包含SDP信息,URI地址为右边模拟电话的号码。

        2) Proxy Server收到INVITE后将URI地址改写为GW-B的地址,然后发送给GW-B。

        3) GW-B收到INVITE后给PBX发送call setup message,并给UAC回复SIP Response 100 Trying(这个Response由GW-B产生,发送个Proxy Server,再由它转发给UAC,而不是由Proxy Server自己产生Response)

        4) GW-B与PBX建立连接后,PBX通知GW-B,GW-B给UAC发送SIP Response 180 Ringing(这个Response由GW-B产生,发送个Proxy Server,再由它转发给UAC,而不是由Proxy Server自己产生Response)。

       5) UAC摘机后,PBX向GW-B发送connect,GW-B将其转换为SIP Response 200 OK发送给UAC(先发送给Proxy Server,再由Proxy Server转发给UAC)。Proxy没工作在Record-Route下,因此从此刻开始,Proxy Server推出SIP Signaling Path,之后的SIP message直接在UAC和GW-B之间交换.

       6) UAC直接给GW-B回复ACK。通话正式建立,之后开始发送RTP语音流。

       7) UAC挂机后直接给GW-B发送BYE,GW-B回复SIP Response 200 OK。通话中断。

  3、Call Flow Using Multiple Servers

     多数情况下,当UAS不在local domain内才会使用到如Redirect Server、Registrar Server等。Redirect Server会返回UAS或者next-hop server的详细信息。

      1) GW-B向Registrar Server注册模拟电话的E.164号码。

      2) Registar Server向GW-B回复SIP Response 200 OK。

      3) UAC发送INVITE至Proxy-A。

      4) Proxy-A发现called number不在local domain内,即将INVITE转发至Redirect Server。

      5) Redirect Server回复Response 300告诉Proxy-A,如果拨叫右边模拟电话,next-hop server是Proxy-B。

      6) Proxy-A向Proxy-B发送INVITE。

      7) Proxy-B收到INVITE后向自己的Registar Server查询E.164号码。

      8) Registar Server返回next-hop server是GW-B

      9) Proxy-B向GW-B发送INVITE。

 

    

    

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值