SIP @ 天氣預報 :: 隨意窩 Xuite日誌
  • 關鍵字
    1. 沒有新回應!






  • 如何使用RSS
    Powered by Xuite
  • 感謝參觀
  • 2006-08-07 00:25 SIP
    平均分數:0 顆星    投票人數:0
    我要評分:

    SIP (Session Initaition Protocol)

    1.簡介

     SIP 全名 Session Initaition Protocol。是由IETF所制定在應用層的通訊協定。
    SIP的目的是要可以整合不同的協定(例如:語音、視訊),可以建立、修改、終止多媒體的
    會議或通話。RTP和SDP是SIP最常被使用到的兩個協定。RTP被使用在於即時傳輸,而SDP是
    用來做SIP的session partcipants(這個字中文不知道要翻什麼 哈哈)的描述。SIP的目標是
    希望可以提供跟傳統PSTN(簡單說就是傳統電話的系統)達到一樣的功能應用。而且
    SIP network可以直接跟PSTN做通訊(這個已經做到了)。

    2.SIP 網路元件


       Location        Redirect         Registrar
        server          server
        ------          ------             ------
        |    |               |    |              |    |
        |    |  <-----> |    |  <-----> |    |
        |    |               |    |              |    |
        ------          ------             ------
          |                  |                    |
          |                  |                    |
          |                  |                    |
          |                  |                    |
    ========================================================
                  |                 |
                  |                 |
                  |                 |
     ----      ------          ------                      --------
     |  |------|    |            |    |      -----         |             |
     |  |        |    |            |    |----|     |-----   |PSTN   |
     ----      |    |            |    |      -----          |             |
               ------           ------                       --------
     User      Proxy             Proxy     SIP
     Agent     server            server    Gateway

    1) User Agents
     Internet上面使用SIP協定,而且有協商會議特性的端點裝置,就叫做User Agents
    (UA)。UA通常會是使用者的電腦,也可能是手機、PSTN gateway、PDA、IP Phone等等。
    UA通常還分成兩種,User Agent Client(UAC)和User Agent Server(UAS)。這兩個都是
    邏輯的概念而已,每一個UA都有UAS和UAC。UAC負責接收請求和傳送要求,UAS則是
    負責傳送請求和接收要求。UAC和UAS在不同的情況下,也是有可能角色互換的。
    請看下圖: (純手工製圖 Orz)

                                                                                     Callee A
                                                                                     -----------
                                                                                     | -------   |
                                         Statefull Proxy                   | | UAC | |
                                     ----------------------                  | ---------  |                
                                     |                  -------   |  INVITE | --------  |
        Caller                  |                 | UAC |-|  --------  |-| UAS ||
     -----------                 |                   -------  |                |  ------- |          
     | -------   |  INVITE   | -------                   |                -----------
     | | UAC |-|-----------|-| UAS |                 |               -----------
     | -------   |                  | -------      -------  | INVITE  | -------   |
     | -------   |                  |                 | UAC |-|--------  | | UAS | |
     | | UAS |  |----|          |                  ------- |               | -------    |
     | -------   |       | BYE ---------------------------------| -------    |
     -----------    --------------------------------------------|-| UAC | |
                                                                                   | -------   |
                                                                                   -----------
                                                                                    Calee B

    這是Calee同時向Callee A 和Callee B兩個使用者發出通話的請求,
    傳送請求是UAC,經由proxy來做forwarding到達Callee A 和Callee B
    由UAS來接收要求。當Callee B掛斷電話的時候,Callee B的UAS發出
    結束通話的請求,Caller的UAS接收要求。在這個時候同一個UA所扮演的
    UAS,UAC的立場就完全轉換了。


    2) Proxy Servers

    SIP的架構中還需要proxy來幫忙將Caller的請求送到calee的位置,
    還有認證、跟其他的服務。
    根據router的策略,proxy可以分為兩種。

    i.Stateless Server (無狀態式)

    這種proxy是最簡單的一種message forworder。它會彼此獨立的轉送訊息。
    雖然訊息通常會被安排到交易程序裡面。但是這種proxy不管它,
    他不會去管整個交易程序。

    無狀態式的proxy雖然架構簡單,但是他的loading較輕。處裡的速度比
    Stateful proxy的速度快。缺點就是他只會轉送資料,並沒辦法做一些
    高級動作...


    ii.Stateful Server (狀態式)

    狀態式的proxy比較複雜,當接收到一個請求的時候,proxy會產生一個state,
    一直到這個交易程序結束。由於通話時間有可能很長,所以同個時間有可能有
    很多的state並存。執行的效能就會受到限制。

    因為狀態式proxy會監控整個交易過程。所以也有能力作一些高級動作...
    舉例來說,當你跟情婦出去的時候,老婆打電話來查勤,打到辦公室
    你卻不在,沒接到電話。狀態式proxy可以設定說,響幾聲沒人接的時候,
    自動幫你轉接到手機上,或是車上電話之類的。
    讓你可以從容不迫的接起電話,虎爛說你現在在office很忙。所以電話比較慢接起來。

    現在市面上的SIP proxy多數都是屬於stateful Server。

    3) Registrar


    記錄器,SIP做登錄,認證用的database。可以記錄IP address、port、username...等


    3.SIP Message

    SIP message都是用明文編碼,所以很容易懂。
    它主要分成兩種,一種是從client端送到server端的request
    另一種是從server送到client的response
    傳輸的方式是使用UDP,而message的格式的話分為first line、message head和message body
    message的型態最主要的差異就在first line上面。

    (下面我只介紹 first line和message head,因為message body是另一個協定SDP,內容的量
    已經可以再開一間教室了 = =)


    request的長的像這樣:

          INVITE sip:bob@biloxi.com SIP/2.0
          Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
          Max-Forwards: 70
          To: Bob
          From: Alice ;tag=1928301774
          Call-ID: a84b4c76e66710@pc33.atlanta.com
          CSeq: 314159 INVITE
          Contact:
          Content-Type: application/sdp
          Content-Length: 142


    INVITE sip:bob@biloxi.com SIP/2.0
    是first line 的部份
    INVITE是定義的command其中之一,bob@biloxi.com則是request的URI,其中
    biloxi.com是主機的URI。

    via是用來記錄request的路徑,可以不止一個。
    這欄位可以給目的端送回response用的參考路徑。

    TO是要送到的位置

    From是來的位置,後面的tag參數可以當作識別符號

    Call-ID是會話識別用的,主要是用來識別說訊息是不是同一個通話內容的。有相同的Call-ID的訊息
    就是同一個通話內容。

    CSeq是編號,用來紀錄訊息的次序。這樣才知道訊息的順序,這樣可以分別的出訊息
    是否為重送,是否是重複的訊息。

    contact是參考欄位,用來記錄IP和port,這是讓接收者做進一步的回應或是請求用的。
    (這個遇到NAT有很大的問題....  有時間再寫...)

    回過頭來說command

    這邊我只介紹request常用的command(想要知道更多請參照RFC = =)
    INVITE用來請求建立一個會談

    ACK是確認回應

    BYE是結束通話

    CANCEL是取消通話,跟BYE不一樣哦,這是沒接起電話的。

    REGISTER就是認證


    response長這樣:

            SIP/2.0 200 OK
            Via: SIP/2.0/UDP bobspc.biloxi.com:5060;branch=z9hG4bKnashds7
             ;received=192.0.2.4
            To: Bob ;tag=2493k59kd
            From: Bob ;tag=456248
            Call-ID: 843817637684230@998sdasdh09
            CSeq: 1826 REGISTER
            Contact:
            Expires: 7200
            Content-Length: 0

    除了first line其他都長一樣,就不多講啦
    response都是回應碼,那個200 OK 很明顯就是ok = =
    回應碼有六種型態

    1xx的是指示出目前處理狀態的回應

    2xx指示出請求已經成功的最後回應
    200 OK就是,這邊要注意是最後回應。

    3xx是用來重導訊息給caller的回應

    4xx指示出用戶端錯誤被拒絕的回應
    這邊是說user這邊的訊息錯誤被拒

    5xx指示出server錯誤的回應
    這邊是說server端操作上發生錯誤

    6xx指示出請求訊號無法操作於server上的回應

    4) 會談邀請的流程

    看圖說故事....

    caller                 proxy                   callee
    |      INVITE        |                           |
    |------------------>|                           |
    |   100 Trying     |                          |
    |<------------------|                           |
    |                           |     INVITE        |
    |                           |----------------->|
    |                           |    100 Trying  |
    |                           |<-----------------|
    |                           |    180 Ringing|
    |                           |<------------------|
    |    180 Ringing|                           |
    |<------------------|                           |
    |                           |    200 OK        |
    |                           |<-----------------|
    |    200 OK         |                          |
    |<------------------|                          |
    |                          |                          |
    |      ACK            |                          |
    |-------------------|------------------>|
    |                         |                          |
    |      RTP           |                          |                
    |-------------------|-------------------|
    |                          |                         |

    就一開始你拿起網路電話打給你女友,會發出一個INVITE先到Proxy,Proxy會發出100 Trying
    去找出你女友電話的位置,轉寄到你女友的網路電話,然後網路電話發出100 Trying。
    接下來你女友的電話會響並發出180 Ringing,傳回到你的電話。
    她還會持續發出200ok,告訴你說她那邊準備好了,可以開始通話了,你的電話送出ACK確認
    接下來就是使用RTP通話中。最後誰掛斷電話,則是由誰發出BYE告知結束通話了。

    jojo / Xuite日誌 / 回應(0) / 引用(0) / 好文轉寄
    回應