SIP初步

1、什麼是SIPSIP(會話發起協議)屬於IP應用層協議,用於在IP網上爲用戶提供會話應用。會話(Session)指兩方或多方用戶之間的語音、視頻、及其他媒體形式的通信,具體可能是IP電話、會議、即時消息等等。SIP是一個信令協議,它對應於傳統電話網絡中的呼叫信令協議(比如SS7ISUP)。構建一個完整多媒體通信架構還需要結合其他一些協議,必要的有:RTP,用於媒體傳輸;RSVP,用於QOS保證等等。發起方向目的方發送一個SIP請求消息(INVITE),其中包含提議的會話參數的描述,請求在二者之間建立一個會話;目的方返回一個SIP響應消息(200 OK),其中包含接受的會話參數的描述,接受會話建立請求發起方發送一個SIP請求消息(ACK)確認會話的建立。一個修改會話的簡單例子如下圖所示:會話中的任意一方可以發送一個SIP請求消息(reINVITE),其中包含提議的新的會話參數,請求修改二者之間的會話;另一方返回一個SIP響應消息(200 OK),其中包含接受的新的會話參數,接受會話修改請求一個結束會話的簡單的例子如下圖所示:會話中的任意一方可以發送一個SIP請求消息(BYE),請求結束會話;另一方返回一個SIP響應消息(200 OK),接受會話結束請求2.2 用戶位置管理SIP支持用戶(終端)的移動性。SIP要求終端定期向網絡發送註冊請求(REGGISTER),報告自己的當前位置。這樣SIP服務器中始終存儲了用戶(終端)的當前地址。當用戶被呼叫時,SIP服務器能夠將SIP請求發送到用戶的當前地址。3、實體 & 網絡SIP UA(User Agent,用戶代理)是最基本的SIP實體,它通常就是用戶終端。理想情況下,通過SIPUA就可以完成用戶之間會話的建立。(參見第2節 SIP基本功能中的會話發起與管理)。但是爲了支持SIP的移動性,以及其他高級功能,比如運營商對呼叫的控制等等,會話發起及管理的信令過程不能直接在兩個SIPUA之間完成,而是需要經過由若干SIP服務器構成的SIP信令網絡。這些SIP服務器可以分爲兩類:註冊服務器和路由服務器。SIP註冊服務器(registrar)的主要功能是接受SIP UA的註冊請求,維護用戶名-地址映射。路由服務器的主要功能是將SIP消息路由到目標SIP UA。路由服務器有SIP重定向服務器(redirectserver)和SIP代理服務器(proxy)兩種。前者以重定向方式路由SIP請求消息,後者以代理方式路由SIP請求消息。在重定向方式下(如下圖所示),SIP重定向服務器收到了SIP請求消息,查詢到目標SIPUA的當前地址後,通過SIP響應消息(302 Moved temporarily)返回給發起方SIPUA。之後的SIP消息交互與重定向服務器無關,發起方SIP UA直接向目標SIP UA的當前地址發送請求消息。在代理方式下(如下圖所示),SIP代理服務器收到了SIP請求消息,查詢到目標SIPUA的當前地址後,將SIP請求消息轉發到目標SIPUA的當前地址。之後的SIP消息交互都要經過SIP代理服務器。這使得SIP代理服務器可以對會話進行控制,比如結束會話等等。4、SIP操作與SIP消息SIP所提供的功能是通過一些原子性的基本功能(比如註冊(registration),發起會話(Initiation)、會話結束等)組合而成的。每個原子性基本功能是通過一個SIP操作完成的。SIP操作基於類似HTTP的請求/響應事務模型,每個操作的調用過程體現爲一個所謂事務 –包含一個SIP請求和一個或多個相應的SIP響應。其中SIP請求消息中的方法(Method)指示出調用的操作。下表是在RFC 3261中定義的方法及其對應的SIP操作。方法MethodSIP操作INVITE會話邀請ACK確認會話邀請CANCEL取消會話邀請BYE結束會話REGISTER註冊OPTIONS查詢服務器能力SIP是一個基於文本(text-based)的協議,使用 UTF-8字符集。SIP消息與HTTP/1.1非常類似,同樣可以包含消息體(message body),通常是會話描述(sessiondescriptions),也可能是其他內容。SIP 消息有兩類:從客戶機到服務器的請求消息(request),從服務器到客戶機的響應消息(response)。除了第一行分別是請求行(Request-Line)和狀態行(Status-Line)以外,SIP請求消息和SIP響應消息的剩下部分的組成基本類似,包括消息頭域(messageheader)和消息體(message body)兩部分(如下圖所示)。4.1 SIP請求消息根據請求行中的方法(method)的不同,SIP請求消息有很多種,分別完成各種操作的調用,實現各種功能,下面進行簡單的介紹。INVITE/reINVITE:INVITE發起會話邀請。reINVITE(在一個已存在的對話中發送的INVITE稱爲reINVITE)修改已建立會話的參數。ACK:完成會話建立的3次握手 [INVITE-200-ACK],僅僅用於INVITEBYE :結束會話。CANCEL:取消正在建立中會話(INVITE已發送,但尚未收到最終響應(final response))。UPDATE:更新會話參數。它被建議用於替代 re-INVITE,與re-INVITE不同在於:它可以在初始INVITE未完成時發送,能用於在早對話(early dialog)中更新會話參數。上面的4個請求用於會話建立與管理。REGISTER:登記UA當前的聯繫地址(contact)OPTIONS:查詢服務器或對端UA的能力,具體包括支持的方法(method),擴展(extensions)、編解碼(codecs)等。PRACK:臨時響應(Provisional Response)確認。用於確認收到了臨時響應,例如 “183 SessionProgress”,以支持臨時響應的可靠傳送。它不能應用於“100 Trying ”,只有101~199臨時響應需要可靠傳送。如果沒有收到 PRACK,響應消息將被重傳。 NOTIFY:事件通知,具體的事件包括、業務狀態的改變(MWI,...),用戶狀態的改變等等。SUBSCRIBE:訂閱/取消(Expires=0)事件通知。PUBLISH:發佈事件狀態。PUBLISH 與 REGISTER的相似之處在於:允許用戶在另一個實體(狀態管理實體/registrar)中創建、修改和移除自己的狀態。對PUBLISH請求的尋址與對於SUBSCRIBE 請求的尋址是一樣的,PUBLISH 請求的Request-URI中填入的是用戶希望發佈其事件狀態的資源地址。上面的3個請求構成SIP事件發佈-訂閱-通知機制INFO:用於傳送 mid-call 信令信息,同一時刻只能有一個 INFO 事務存在。通常用於攜帶 PSTN 信令消息(作爲MIME 附件),例如,ISDN UUI (用戶到用戶信息)。MESSAGE:針對即時消息 (IM)的擴展,用於傳送即時消息。MESSAGE請求通過MIME附件中攜帶內容。MESSAGE請求自身不發起 SIP 對話,在正常的用法中,每個即時消息都是單獨存在的,非常類似 pager 消息。MESSAGE請求可以在其他SIP請求發起的對話上下文中發送。REFER:指示接收者 (Request-URI所標識的) 應該使用請求中提供的信息聯繫第三方。典型應用:CallTransfer features 。Allowed outside an established dialogue。4.2 SIP響應消息狀態碼描述例子1xxInformational請求收到,處理中180 Ringing181 Call is Being Forwarded2xxSuccess操作已成功完成200 OK3xxRedirection請求被重定向300 Multiple Choices302 Moved Temporarily4xxClient Error請求包含錯誤的文法,或者無法在本服務器上完成401 Unauthorized408 Request Timeout5xxServer Error請求有效,但服務器無法完成503 Service Unavailable505 Version Not Supported6xxGlobal Failure請求在任何服務器上都無法完成600 Busy Everywhere603 Decline4.3 SIP消息頭域根據請求行中的方法(method)的不同,SIP請求消息有很多種,分別完成各種操作的調用,實現各種功能,下面進行簡單的介紹。Call-ID:用於唯一標識一個特定的會話或註冊消息。應該具有隨機性,保證全球唯一。例子:Call-ID:[email protected]:源端SIP URL,標識請求發送方;UAC本地標籤。例子:From: sip:+1-314-342-7360 @gateway.wcom.com; tag=1234567To:目標SIP URL,標識請求接受方;UAS本地標籤。例子:To: sip:[email protected]; tag=314Via:用於記錄請求經由的路徑例子:Via: SIP/2.0/TCP uunet.comMax-Forwards:消息最大轉發次數。服務每次轉發消息時將此域值減1,當變成0時,服務器發送 483響應(TooMany Hops response)。例子:Max-Forwards: 10Cseq:請求序列號,用於區分同一個會話中的不同請求。例如:CSeq: 1 INVITECSeq: 4325 BYECSeq: 1 REGISTER上面6個頭域是所有SIP消息中的必需的頭域。Contact 另一個SIP URL用於直接消息路由。例如:Contact: W. Riker, Acting Captain [email protected] 需要自己處在後繼消息的路徑上時,proxy將自己的地址加插在請求消息中例子:Record Route: sip.mci.comRoute 確定消息的選路例子:Route: orinoco.brooks.netContent-Length:消息體中的 Octet 數例子:Content-Length: 285Content-Type:消息體內容類型例子:Content-Type: application/sdp5、詳細的例子 (摘自IETF RFC 3261)實際的例子可以幫助大家進一步地認識和理解前面的內容。這裏的兩個例子分別是關於SIP的兩個最基本的功能:註冊和會話建立。每個例子中給出了消息交互過程,以及必要的消息內容細節。出於簡明性的考慮,這裏給出的消息的內容忽略了消息體及相應的頭域(Content-Length和 Content-Type)。另外,還有一些頭域比如Allow和 Supported 通常也會出現,但這裏並未給出。5.1 註冊Bob在開機時註冊。消息流如下圖所示。注意爲了簡化流程,這裏沒有給出在註冊時通常所必需的鑑權過程。消息細節:F1 REGISTER Bob ->RegistrarREGISTER sip:registrar.biloxi.comSIP/2.0Via: SIP/2.0/UDPbobspc.biloxi.com:5060;branch=z9hG4bKnashds7Max-Forwards: 70To: BobFrom: Bob;tag=456248Call-ID: 843817637684230@998sdasdh09CSeq: 1826 REGISTERContact:Expires: 7200Content-Length: 0這次註冊的有效期爲2個小時(7200秒)註冊服務器返回 200 OK 響應。F2 200 OK Registrar -> BobSIP/2.0 200 OKVia: SIP/2.0/UDPbobspc.biloxi.com:5060;branch=z9hG4bKnashds7;received=192.0.2.4To: Bob;tag=2493k59kdFrom: Bob;tag=456248Call-ID: 843817637684230@998sdasdh09CSeq: 1826 REGISTERContact: Expires: 7200Content-Length: 05.2 會話建立與拆除會話建立是SIP的最基本的功能。消息流如下圖所示。消息內容:(注意這裏並未給出會話媒體參數SDP的細節)F1 INVITE Alice -> atlanta.com proxyINVITE sip:[email protected] SIP/2.0Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8Max-Forwards: 70To: Bob From: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContact:Content-Type: application/sdpContent-Length: 142(Alice的 SDP 未顯示)F2 100 Trying atlanta.com proxy ->AliceSIP/2.0 100 TryingVia: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob From: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContent-Length: 0F3 INVITE atlanta.com proxy -> biloxi.comproxyINVITE sip:[email protected] SIP/2.0Via: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1Max-Forwards: 69To: Bob From: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContact:Content-Type: application/sdpContent-Length: 142(Alice的 SDP 未顯示)F4 100 Trying biloxi.com proxy -> atlanta.comproxySIP/2.0 100 TryingVia: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob From: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContent-Length: 0F5 INVITE biloxi.com proxy -> BobINVITE sip:[email protected] SIP/2.0Via: SIP/2.0/UDPserver10.biloxi.com;branch=z9hG4bK4b43c2ff8.1Via: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1Max-Forwards: 68To: Bob From: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContact:Content-Type: application/sdpContent-Length: 142(Alice的 SDP 未顯示)F6 180 Ringing Bob -> biloxi.com proxySIP/2.0 180 RingingVia: SIP/2.0/UDPserver10.biloxi.com;branch=z9hG4bK4b43c2ff8.1;received=192.0.2.3Via: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710Contact: CSeq: 314159 INVITEContent-Length: 0F7 180 Ringing biloxi.com proxy -> atlanta.comproxySIP/2.0 180 RingingVia: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710Contact: CSeq: 314159 INVITEContent-Length: 0F8 180 Ringing atlanta.com proxy ->AliceSIP/2.0 180 RingingVia: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710Contact: CSeq: 314159 INVITEContent-Length: 0F9 200 OK Bob -> biloxi.com proxySIP/2.0 200 OKVia: SIP/2.0/UDPserver10.biloxi.com;branch=z9hG4bK4b43c2ff8.1;received=192.0.2.3Via: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContact: Content-Type: application/sdpContent-Length: 131(Bob的 SDP 未顯示)F10 200 OK biloxi.com proxy -> atlanta.comproxySIP/2.0 200 OKVia: SIP/2.0/UDPbigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContact: Content-Type: application/sdpContent-Length: 131(Bob的 SDP 未顯示)F11 200 OK atlanta.com proxy -> AliceSIP/2.0 200 OKVia: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 INVITEContact: Content-Type: application/sdpContent-Length: 131(Bob的 SDP 未顯示)F12 ACK Alice -> BobACK sip:[email protected] SIP/2.0Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds9Max-Forwards: 70To: Bob;tag=a6c85cfFrom: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 314159 ACKContent-Length: 0現在Alice和Bob之間的媒體會話被建立。Bob首先掛機。注意Bob的SIP 話機維護自己的 CSeq 編號空間,在這裏是從231開始。因爲是Bob 發送的請求,To 和From 頭域的URIs和tags參數被掉換。F13 BYE Bob -> AliceBYE sip:[email protected] SIP/2.0Via: SIP/2.0/UDP 192.0.2.4;branch=z9hG4bKnashds10Max-Forwards: 70From: Bob;tag=a6c85cfTo: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 231 BYEContent-Length: 0F14 200 OK Alice -> BobSIP/2.0 200 OKVia: SIP/2.0/UDP 192.0.2.4;branch=z9hG4bKnashds10From: Bob;tag=a6c85cfTo: Alice;tag=1928301774Call-ID: a84b4c76e66710CSeq: 231 BYEContent-Length: 0
發佈了18 篇原創文章 · 獲贊 4 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章