1. 程式人生 > >【SIP基礎】SIP協議訊息-掌握SIP的核心方法

【SIP基礎】SIP協議訊息-掌握SIP的核心方法

SIP訊息有兩種型別:請求和響應。

  • 一個請求的開啟行包含定義,其中該請求是要被髮送的方法,它定義請求,以及請求URI。

  • 同樣響應的開啟行包含一個響應程式碼。

請求方法

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

有一些命令稱作方法,使SIP訊息可行。

  • METHODS 可被視為SIP請求,因為它們要求將要採取的另一個使用者代理或伺服器的特定動作。

  • METHODS 被區分為兩種型別:

    • 核心方法
    • 擴充套件方法

核心方法(Core Methods)

有六個核心的方法如以下所討論。

INVITE

INVITE被用於發起會話使用使用者代理。換言之,一個INVITE方法用於建立使用者代理之間的媒體會話。

這裡寫圖片描述

  • INVITE可以包含在郵件正文中主叫者的媒體資訊。

  • 會話被認為是如果INVITE已經獲得了成功響應(2xx)上建立或ACK已傳送。

  • 一個成功的INVITE請求建立這一直持續到BYE傳送到終止會話的兩個使用者代理之間的對話。

  • 一個傳送的INVITE內已建立的對話被稱為一個re-INVITE請求。

  • re-INVITE請求用於改變在會話特性或重新整理一個對話的狀態。

INVITE例項

下面的程式碼演示了INVITE如何被使用。

INVITE sips:[email protected] SIP/2.0
Via: SIP/2.0/TLS client.vvsip.com:5061; branch = z9hG4bK74bf9
Max-Forwards: 70
From: Alice <sips:[email protected]> ;tag = 1234567
To: Bob <sips:[email protected]>
Call-ID: [email protected]
CSeq: 1 INVITE
Contact: <sips:[email protected]
> 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.vvsip.com s = Session SDP c = IN IP4 client.vvsip.com t = 3034423619 0 m = audio 49170 RTP/AVP 0 a = rtpmap:0 PCMU/8000

BYE

BYE用於終止已建立的會話的方法。這是可以通過主叫方或被叫方結束會話被髮送SIP請求。

  • 它不能由代理伺服器傳送。
  • BYE請求通常路線端到端,繞過代理伺服器。
  • BYE不能被髮送到一個等待INVITE或未確定會話。

REGISTER

REGISTER請求執行的使用者代理的註冊。這個請求是由使用者代理髮送到註冊伺服器。

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

  • 它所攜帶的AOR(記錄地址)在為正在註冊的使用者的頭。

  • REGISTER請求中包含的時間段(3600秒)。

  • 一個使用者代理可以代表其他使用者傳送代理註冊請求。這就是所謂的第三方註冊。在這裡,從標籤中包含方提交的註冊代表確定To頭部分的URI。

CANCEL

CANCEL用於終止未建立會話。使用者代理使用此請求取消更早啟動暫停呼叫的嘗試。

  • 它可以通過一個使用者代理或代理伺服器來發送。

  • CANCEL是一個逐跳轉發請求,也就是說,它通過使用者代理之間的元件和接收由下一狀態元素所產生的反應。

Hop By Hop.JPG

ACK

ACK用於確認最後的響應的INVITE方法。ACK總是在INVITE的方向。 ACK可能包含的SDP主體(媒體特性),如果它不在INVITE可用。

SDP AckSDP.JPG 
Acknowledgement.JPG 
- ACK可能不被用於修改一個已經發送的初始INVITE的媒體描述。

  • 有狀態代理接收ACK必須確定是否將ACK應下游轉發到另一個代理或使用者代理。

  • 對於2xx應答,ACK是端到端的,但對於所有其他最終響應,它可以在逐跳轉發基礎上參與狀態代理時。

OPTION

OPTIONS方法用於查詢的使用者代理或圍繞其功能的代理伺服器,並發現其當前的可用性。於請求的響應列出了使用者代理或伺服器的功能。代理從未產生OPTIONS請求。

擴充套件方法(Extension Methods)

Subscribe

Subscribe所使用的使用者代理商建立了訂閱獲取通知的有關特定事件的目的。

  • 它有一個時間週期,在Expires頭欄位,指示存在一個訂閱的所需的持續時間。

  • 在指定的時間段過後,訂閱將自動終止。

  • 成功訂閱建立使用者代理之間的對話。

  • 訂閱可以通過傳送到期時間之前對話方塊中的另一個訂閱重新整理。

  • 伺服器接受訂閱返回一個200 OK。

  • 使用者可以通過傳送另一個使用訂閱方法退訂過期值為0(零)。

Example Subscribe.JPG

NOTIFY

NOTIFY是用來由使用者代理傳達的特定事件的發生。NOTIFY總是在對話中傳送當用戶與通知之間存在訂閱。

  • 200 OK響應被接收為每個NOTIFY以指示它已收到。

  • NOTIFY請求包含指示,指示訂閱的當前狀態的包和訂閱的狀態報頭欄位的Event報頭欄位。

  • NOTIFY總是在訂閱開始和訂閱終止傳送。

PUBLISH

PUBLISH用於由使用者代理髮送的事件的狀態資訊,以已知作為一個事件狀態合成器的伺服器。

Publish.JPG

  • Publish當有事件資訊的多種來源主要是有用的。

  • PUBLISH請求類似於一個NOTIFY,不同之處在於它不是在對話方塊傳送。

  • 一個PUBLISH請求必須包含一個Expires頭欄位和Min-Expires頭欄位域。

REFER

REFER用於由一個使用者代理來指另一個使用者代理訪問URI的對話方塊。

  • REFER必須包含一個Refer-To頭。這是參考一個強制性的頭。

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

  • 202 Accepted 將引發REFER請求這表明其他使用者代理已經接受了參考。

INFO

INFO所使用的使用者代理髮送呼叫信令資訊,與它建立了一個媒體會話其他使用者代理。這是一個終端到終端的請求,並且從不生成由代理。代理會一直轉發資訊請求。

UPDATE

UPDATE用於修改會話的狀態不改變對話的狀態。更新用於如果會話沒有建立,並且使用者想要改變編解碼器。

Update.JPG 
如果會話建立後,再邀請來改變/更新會話。

PRACK

PRACK用於確認收到臨時響應(1XX)可靠傳輸。

  • PRACK通過一個使用者代理客戶端時產生的臨時的響應已經接收到含有RSEQ可靠序列號和一個 supported:100rel 頭。

  • PRACK包含架頭(RSEQ+ Cseq)值。

  • PRACK可能包含郵件正文;它可以被用於提供/應答交換。

MESSAGE

它是用來發送即時訊息或使用SIP IM。一個IM通常由簡訊息交換實時由從事文字會話參與者。

Message.JPG

  • 訊息可以在對話中或在對話外發送。

  • 訊息的內容在郵件正文中攜帶的MIME附件。

  • 200 OK響應被正常接收,以指示該訊息已被傳送在它的目的地。