【轉】SIP協議 會話發起協議


 轉自:https://www.cnblogs.com/gardenofhu/p/7299963.html

會話發起協議(SIP)是VoIP技術中最常用的協議之一。它是一種應用層協議,與其他應用層協議協同工作,通過Internet控制多媒體通信會話。

SIP - 概述

以下是有關SIP的幾點注意事項 -

  • SIP是用於通過因特網協議創建,修改和終止多媒體會話的信令協議。會話只不過是兩個端點之間的簡單調用。端點可以是智能電話,筆記本電腦或可以通過因特網接收和發送多媒體內容的任何設備。

  • SIP是由IETF(Internet Engineering Task Force)標准定義的應用層協議。它在RFC 3261中定義。

  • SIP體現了客戶端 - 服務器體系結構,以及使用HTTP和URL的URL和URI 以及SMTP的文本編碼方案和頭樣式。

  • SIP采用SDP(會話描述協議)的幫助,它描述了用於通過IP網絡傳送語音和視頻的會話和RTP(實時傳輸協議)。

  • SIP可用於雙方(單播)或多方(多播)會話。

  • 其他SIP應用包括文件傳輸,即時通訊,視頻會議,網絡游戲,以及流多媒體分發。

下圖說明了SIP在一般方案中的適用性 -

通常,SIP協議用於兩個或多個端點之間的互聯網電話和多媒體分發。例如,一個人可以使用SIP發起對另一個人的電話呼叫,或者有人可以與許多參與者建立電話會議。

SIP協議的設計非常簡單,配置有限的命令。它也是基於文本的,所以任何人都可以讀取SIP會話中的端點之間傳遞的SIP消息。

有一些實體幫助SIP創建其網絡。在SIP中,每個網元由SIP URI(統一資源標識符)來標識,它像一個地址。以下是網絡元素 -

  • 用戶代理
  • 代理服務器
  • 注冊服務器
  • 重定向服務器
  • 位置服務器

用戶代理

它是SIP網絡的端點和最重要的網絡元素之一。端點可以啟動,修改或終止會話。用戶代理是SIP網絡中最智能的設備或網絡元件。它可以是軟電話,手機或筆記本電腦。

用戶代理在邏輯上分為兩部分 -

  • 用戶代理客戶端(UAC) - 發送請求並接收響應的實體。

  • 用戶代理服務器(UAS) - 接收請求並發送響應的實體。

SIP基於客戶機 - 服務器架構,其中呼叫者的電話充當發起呼叫的客戶端,被叫方的電話充當響應呼叫的服務器。

代理服務器

網絡元素接收來自用戶代理的請求並將其轉發給另一個用戶。

  • 基本上代理服務器的作用就像一個路由器。

  • 它有一些智慧來了解SIP請求,並在URI的幫助下發送它。

  • 代理服務器位於兩個用戶代理之間。

  • 源和目的地之間最多可以有70個代理服務器。

有兩種類型的代理服務器 -

  • 無狀態代理服務器 - 它只是轉發收到的消息。這種類型的服務器不存儲任何呼叫或交易的信息。

  • 有狀態代理服務器 - 這種類型的代理服務器可以跟蹤收到的每個請求和響應,並且如果需要,可以將來使用它。如果對方沒有響應,它可以重新發送請求。

注冊服務器

注冊服務器接受用戶代理的注冊請求。它可以幫助用戶在網絡中進行身份驗證。它將URI和用戶的位置存儲在數據庫中,以幫助同一域內的其他SIP服務器。

看看下面的示例,顯示SIP注冊的過程。

這里呼叫者想要向TMC域注冊。因此,它向TMC的Registrar服務器發送REGISTER請求,並且服務器在授權客戶端時返回200 OK響應。

重定向服務器

重定向服務器接收請求,並在注冊器創建的位置數據庫中查找請求的預期收件人。

重定向服務器使用數據庫獲取位置信息,並以3xx(重定向響應)響應給用戶。我們將在本教程的后面討論響應代碼。

位置服務器

位置服務器提供有關呼叫者可能的位置到重定向和代理服務器的信息。

只有代理服務器或重定向服務器可以聯系位置服務器。

下圖描繪了每個網絡元素在建立會話中所扮演的角色。

SIP - 系統架構

SIP被構造為分層協議,這意味着其行為根據一組相當獨立的處理階段來描述,只有每個階段之間的松散耦合。

  • SIP的最低層是其語法和編碼。其編碼使用增強的Backus-Naur表格語法(BNF)來指定。

  • 第二層是傳輸層。它定義客戶端如何發送請求並接收響應,以及服務器如何接收請求並通過網絡發送響應。所有SIP元素都包含傳輸層。

  • 接下來是事務層。事務是由客戶端事務(使用傳輸層)發送到服務器事務的請求,以及從服務器事務發送回客戶端的對該請求的所有響應。用戶代理客戶端(UAC)完成的任何任務都將使用一系列事務進行。無狀態代理不包含事務層。

  • 事務層上面的稱為事務用戶。除了無狀態代理之外,每個SIP實體都是一個事務用戶。

下圖顯示了SIP會話的基本呼叫流程。

以下是對上述呼叫流程的逐步說明 -

  • 發送到代理服務器的INVITE請求負責啟動會話。

  • 代理服務器發送100 嘗試立即響應呼叫者(Alice)以停止INVITE請求的重新發送。

  • 代理服務器在位置服務器中搜索Bob的地址。獲取地址后,進一步轉發INVITE請求。

  • 此后,Bob手機生成的180 振鈴(臨時響應)返回給愛麗絲。

  • 鮑勃拿起手機后一個200 OK響應很快產生。

  • 一旦200 OK到達Alice,Bob 從Alice 收到一個ACK。

  • 同時,會話建立,RTP數據包(會話)從兩端開始流動。

  • 會話結束后,任何參與者(Alice或Bob)都可以發送一個BYE請求來終止會話。

  • BYE直接從Alice到Bob繞過代理服務器。

  • 最后,Bob發送200 OK響應來確認BYE,會話終止。

  • 在上述基本呼叫流程中,可以使用三個事務(標記為1,2,3)。

完整的呼叫(從INVITE到200 OK)稱為對話Dialog

SIP梯形

代理如何幫助一個用戶與另一個用戶連接?讓我們在下圖的幫助下找出。

 

圖中所示的拓撲結構稱為SIP梯形圖。該過程發生如下 -

  • 當呼叫方發起呼叫時,將向代理服務器發送INVITE消息。代理服務器收到INVITE后,嘗試借助DNS服務器解析受理者的地址。

  • 在獲得下一個路由之后,呼叫者的代理服務器(代理1,也稱為出站代理服務器)將INVITE請求轉發給作為被呼叫者的入站代理服務器(代理服務器2)的被呼叫者的代理服務器。

  • 入站代理服務器聯系位置服務器以獲取用戶注冊的被叫方地址信息。

  • 從位置服務器獲取信息后,將呼叫轉發到其目的地。

  • 一旦用戶代理知道他們的地址,他們可以繞過呼叫,即直接通話。

SIP消息有兩種類型 - 請求響應

  • 請求的開始行包含定義請求的方法,以及定義要發送請求的請求URI。

  • 類似地,響應的開始行包含響應代碼。

請求方式

SIP請求是用於建立通信的代碼。為了補充它們,SIP響應通常指示請求是成功還是失敗。

這些被稱為METHODS的SIP請求使SIP消息可行。

  • 方法可以被認為是SIP請求,因為它們請求由另一用戶代理或服務器采取的特定動作。

  • 方法被分為兩種類型 -

    • 核心方法

    • 擴展方法

核心方法

有六種核心方法,如下所述。

邀請

INVITE用於啟動與用戶代理的會話。換句話說,INVITE方法用於在用戶代理之間建立媒體會話。

  • INVITE可以在郵件正文中包含主叫方的媒體信息。

  • 如果INVITE已經接收到成功響應(2xx)或已經發送ACK,則會話被認為是建立的。

  • 成功的INVITE請求在兩個用戶代理之間建立對話,直到發送BYE才能終止會話。

  • 在已建立的對話框內發送的INVITE被稱為re-INVITE

  • Re-INVITE用於更改會話特性或刷新對話框的狀態。

  • 邀請示例

    以下代碼顯示了INVITE如何使用。

復制代碼
INVITE sips:Bob@TMC.com SIP/2.0 
   Via: SIP/2.0/TLS client.ANC.com:5061;branch = z9hG4bK74bf9 
   Max-Forwards: 70 
   From: Alice<sips:Alice@TTP.com>;tag = 1234567 
   To: Bob<sips:Bob@TMC.com>
   Call-ID: 12345601@192.168.2.1  
   CSeq: 1 INVITE 
   Contact: <sips:Alice@client.ANC.com> 
   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY 
   Supported: replaces 
   Content-Type: application/sdp 
   Content-Length: ...  
   
   v = 0 
   o = Alice 2890844526 2890844526 IN IP4 client.ANC.com 
   s = Session SDP 
   c = IN IP4 client.ANC.com 
   t = 3034423619 0 
   m = audio 49170 RTP/AVP 0 
   a = rtpmap:0 PCMU/8000 
復制代碼

 

BYE

BYE是用於終止既定會話的方法。這是SIP請求,可以由呼叫者或被叫方發送以終止會話。

  • 它不能由代理服務器發送。

  • BYE請求通常路由端到端,繞過代理服務器。

  • BYE不能發送到待處理的INVITE或未建立的會話。

注冊

REGISTER請求執行用戶代理的注冊。該請求由用戶代理發送到注冊服務器。

  • REGISTER請求可以轉發或代理,直到它到達指定域的權威注冊商。

  • 它在正在注冊的用戶的To頭中攜帶AOR(記錄地址)。

  • REGISTER請求包含時間段(3600sec)。

  • 一個用戶代理可以代表另一個用戶代理發送REGISTER請求。這被稱為第三方注冊。這里,From標簽包含代表To標題中標識的方提交注冊的方的URI 。

取消

CANCEL用於終止未建立的會話。用戶代理使用此請求取消之前發起的未決呼叫嘗試。

  • 它可以由用戶代理或代理服務器發送。

  • CANCEL是逐跳請求,即它通過用戶代理之間的元素,並接收下一個有狀態元素生成的響應。

ACK

ACK用於確認對INVITE方法的最終響應。如果INVITE不可用,則ACK始終沿着INVITE.ACK的方向包含SDP主體(媒體特性)。

 

ACK可能不會用於修改已經在初始INVITE中發送的媒體描述。

  • 接收ACK的有狀態代理必須確定ACK應該向下游轉發到另一個代理或用戶代理。

  • 對於2xx響應,ACK是端到端的,但對於所有其他最終響應,它在涉及有狀態代理時基於逐跳的工作。

OPTIONS

OPTIONS方法用於向用戶代理或代理服務器詢問其功能並發現其當前的可用性。對請求的響應列出了用戶代理或服務器的功能。代理從不生成OPTIONS請求。

擴展方法

訂閱

用戶代理使用SUBSCRIBE建​​立訂閱,以獲取有關特定事件的通知。

  • 它包含一個Expires頭字段,指示訂閱的持續時間。

  • 期限過后,訂閱將自動終止。

  • 訂閱在用戶代理之間建立一個對話。

  • 您可以在到期時間之前通過在對話框內發送另一個SUBSCRIBE來重新訂閱。

  • 用戶訂閱將收到200 OK。

  • 用戶可以使用Expires值0(零)發送另一個SUBSCRIBE方法來取消訂閱。

通知

用戶代理使用NOTIFY來獲取特定事件的發生。通常,當訂戶和通知程序之間存在訂閱時,NOTIFY將在對話框內觸發。

  • 如果通知程序接收到,每個NOTIFY將獲得200 OK響應。

  • NOTIFY包含指示事件的事件頭字段和指示訂閱的當前狀態的subscriptionstate頭字段。

  • 始終在訂閱的開始和結束時發送NOTIFY。

發布

PUBLISH被用戶代理用於向服務器發送事件狀態信息。

  • 當有多個來源的事件信息時,PUBLISH是非常有用的。

  • PUBLISH請求類似於NOTIFY,除了它不在對話框中發送。

  • PUBLISH請求必須包含Expires頭字段和Min-Expires頭字段。

參考

REFER由用戶代理用於引用另一個用戶代理來訪問對話框的URI。

  • REFER必須包含Refer-To標題。這是REFER的強制標題。

  • REFER可以在對話框內部或外部發送。

  • 202 Accepted將觸發REFER請求,指示其他用戶代理已經接受引用。

信息

INFO由用戶代理使用,以向其已經建立媒體會話的另一用戶代理發送呼叫信令信息。

  • 這是一個端到端的請求。

  • 代理將始終轉發INFO請求。

UPDATE

如果會話未建立,則UPDATE用於修改會話的狀態。用戶可以使用UPDATE更改編解碼器。

如果會話建立,則使用重新邀請來更改/更新會話。

PRACK

PRACK用於確認接收到可靠的臨時響應轉移(1XX)。

  • 一般來說,PRACK在接收到包含RSeq可靠序列號和supported:100rel 頭的臨時響應時由客戶端生成。

  • PRACK在race頭部中包含(RSeq + CSeq)值。

  • PRACK方法適用於所有臨時響應,除了100嘗試響應,這是永遠不可靠的運輸。

  • PRACK可能包含消息體; 它可以用於提供/答復交換。

信息

它用於使用SIP發送即時消息。IM通常由參與文字會話的參與者實時交換的短消息。

  • MESSAGE可以在對話框內或對話框外發送。

  • MESSAGE的內容作為MIME附件在郵件正文中載入。

  • 一個200 OK被正常接收響應,以指示該消息已在其目的地被遞送。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM