【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是一個逐跳轉發請求,也就是說,它通過使用者代理之間的元件和接收由下一狀態元素所產生的反應。
ACK
ACK用於確認最後的響應的INVITE方法。ACK總是在INVITE的方向。 ACK可能包含的SDP主體(媒體特性),如果它不在INVITE可用。
- ACK可能不被用於修改一個已經發送的初始INVITE的媒體描述。
-
有狀態代理接收ACK必須確定是否將ACK應下游轉發到另一個代理或使用者代理。
-
對於2xx應答,ACK是端到端的,但對於所有其他最終響應,它可以在逐跳轉發基礎上參與狀態代理時。
OPTION
OPTIONS方法用於查詢的使用者代理或圍繞其功能的代理伺服器,並發現其當前的可用性。於請求的響應列出了使用者代理或伺服器的功能。代理從未產生OPTIONS請求。
擴充套件方法(Extension Methods)
Subscribe
Subscribe所使用的使用者代理商建立了訂閱獲取通知的有關特定事件的目的。
-
它有一個時間週期,在Expires頭欄位,指示存在一個訂閱的所需的持續時間。
-
在指定的時間段過後,訂閱將自動終止。
-
成功訂閱建立使用者代理之間的對話。
-
訂閱可以通過傳送到期時間之前對話方塊中的另一個訂閱重新整理。
-
伺服器接受訂閱返回一個200 OK。
-
使用者可以通過傳送另一個使用訂閱方法退訂過期值為0(零)。
NOTIFY
NOTIFY是用來由使用者代理傳達的特定事件的發生。NOTIFY總是在對話中傳送當用戶與通知之間存在訂閱。
-
200 OK響應被接收為每個NOTIFY以指示它已收到。
-
NOTIFY請求包含指示,指示訂閱的當前狀態的包和訂閱的狀態報頭欄位的Event報頭欄位。
-
NOTIFY總是在訂閱開始和訂閱終止傳送。
PUBLISH
PUBLISH用於由使用者代理髮送的事件的狀態資訊,以已知作為一個事件狀態合成器的伺服器。
-
Publish當有事件資訊的多種來源主要是有用的。
-
PUBLISH請求類似於一個NOTIFY,不同之處在於它不是在對話方塊傳送。
-
一個PUBLISH請求必須包含一個Expires頭欄位和Min-Expires頭欄位域。
REFER
REFER用於由一個使用者代理來指另一個使用者代理訪問URI的對話方塊。
-
REFER必須包含一個Refer-To頭。這是參考一個強制性的頭。
-
REFER可以在內部或在對話外發送。
-
202 Accepted 將引發REFER請求這表明其他使用者代理已經接受了參考。
INFO
INFO所使用的使用者代理髮送呼叫信令資訊,與它建立了一個媒體會話其他使用者代理。這是一個終端到終端的請求,並且從不生成由代理。代理會一直轉發資訊請求。
UPDATE
UPDATE用於修改會話的狀態不改變對話的狀態。更新用於如果會話沒有建立,並且使用者想要改變編解碼器。
如果會話建立後,再邀請來改變/更新會話。
PRACK
PRACK用於確認收到臨時響應(1XX)可靠傳輸。
-
PRACK通過一個使用者代理客戶端時產生的臨時的響應已經接收到含有RSEQ可靠序列號和一個 supported:100rel 頭。
-
PRACK包含架頭(RSEQ+ Cseq)值。
-
PRACK可能包含郵件正文;它可以被用於提供/應答交換。
MESSAGE
它是用來發送即時訊息或使用SIP IM。一個IM通常由簡訊息交換實時由從事文字會話參與者。
-
訊息可以在對話中或在對話外發送。
-
訊息的內容在郵件正文中攜帶的MIME附件。
-
200 OK響應被正常接收,以指示該訊息已被傳送在它的目的地。