- 會話發起協議教程
- SIP - 首頁
- SIP - 簡介
- SIP - 網路元素
- SIP - 基本呼叫流程
- SIP - 訊息
- SIP - 響應碼
- SIP - 頭部
- SIP - 會話描述協議
- SIP - 提供/應答模型
- SIP - 移動性
- SIP - 分支
- SIP - 代理和路由
- SIP 到 PSTN
- SIP - 編解碼器
- SIP - 回撥使用者代理 (B2BUA)
- SIP 有用資源
- SIP - 快速指南
- SIP - 有用資源
- SIP - 討論
SIP - 訊息
SIP 訊息分為兩種:請求和響應。
請求的首行包含一個定義請求的方法和一個定義請求傳送位置的請求URI。
類似地,響應的首行包含一個響應程式碼。
請求方法
SIP 請求是用於建立通訊的程式碼。為了補充它們,有SIP 響應,它們通常指示請求成功還是失敗。
這些被稱為方法的 SIP 請求使 SIP 訊息能夠工作。
方法可以被視為 SIP 請求,因為它們請求另一個使用者代理或伺服器採取特定操作。
方法分為兩種型別:
核心方法
擴充套件方法
核心方法
如下所述,共有六種核心方法。
INVITE
INVITE 用於與使用者代理發起會話。換句話說,INVITE 方法用於在使用者代理之間建立媒體會話。
INVITE 可以包含訊息正文中呼叫者的媒體資訊。
如果 INVITE 收到成功響應 (2xx) 或已傳送 ACK,則會話被認為已建立。
成功的 INVITE 請求在兩個使用者代理之間建立一個對話,該對話持續到傳送 BYE 以終止會話為止。
在已建立的對話中傳送的 INVITE 稱為重新邀請 (re-INVITE)。
重新邀請用於更改會話特性或重新整理對話狀態。
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 請求執行使用者代理的註冊。此請求由使用者代理傳送到註冊伺服器。
REGISTER 請求可能會被轉發或代理,直到到達指定域的權威註冊伺服器。
它在正在註冊使用者的To頭部中攜帶 AOR(記錄地址)。
REGISTER 請求包含時間段 (3600 秒)。
一個使用者代理可以代表另一個使用者代理傳送 REGISTER 請求。這被稱為第三方註冊。這裡,From標籤包含代表To頭部中標識的方提交註冊方的 URI。
CANCEL
CANCEL 用於終止未建立的會話。使用者代理使用此請求來取消之前發起的待處理呼叫嘗試。
它可以由使用者代理或代理伺服器傳送。
CANCEL 是一個逐跳請求,即它透過使用者代理之間的元素,並接收下一個有狀態元素生成的響應。
ACK
ACK 用於確認對 INVITE 方法的最終響應。ACK 始終與 INVITE 同方向。如果 INVITE 中沒有 SDP 主體(媒體特性),則 ACK 可能包含 SDP 主體。
ACK 不能用於修改已在初始 INVITE 中傳送的媒體描述。
接收 ACK 的有狀態代理必須確定是否應將 ACK 向下遊轉發到另一個代理或使用者代理。
對於 2xx 響應,ACK 是端到端的,但對於所有其他最終響應,當涉及有狀態代理時,它基於逐跳工作。
OPTIONS
OPTIONS 方法用於查詢使用者代理或代理伺服器的功能並發現其當前可用性。對請求的響應列出了使用者代理或伺服器的功能。代理永遠不會生成 OPTIONS 請求。
擴充套件方法
訂閱
使用者代理使用 SUBSCRIBE 來建立訂閱,以獲取有關特定事件的通知。
它包含一個Expires頭部欄位,指示訂閱的持續時間。
時間段過去後,訂閱將自動終止。
訂閱在使用者代理之間建立對話。
您可以在過期時間之前,透過在對話中傳送另一個 SUBSCRIBE 來再次訂閱。
使用者將收到來自使用者的 200 OK 訂閱。
使用者可以透過傳送另一個 Expires 值為 0(零)的 SUBSCRIBE 方法來取消訂閱。
NOTIFY
NOTIFY 用於使用者代理獲取特定事件的發生。通常,當訂閱者和通知者之間存在訂閱時,NOTIFY 將在對話中觸發。
如果通知者收到每個 NOTIFY,則會獲得 200 OK 響應。
NOTIFY 包含一個Event頭部欄位,指示事件,以及一個subscriptionstate頭部欄位,指示訂閱的當前狀態。
NOTIFY 始終在訂閱開始和終止時傳送。
PUBLISH
PUBLISH 用於使用者代理將事件狀態資訊傳送到伺服器。
當存在多個事件資訊源時,PUBLISH 最有用。
PUBLISH 請求類似於 NOTIFY,不同之處在於它不是在對話中傳送的。
PUBLISH 請求必須包含Expires頭部欄位和Min-Expires頭部欄位。
REFER
REFER 用於使用者代理將另一個使用者代理引用到訪問對話的 URI。
REFER 必須包含Refer-To頭部。這是 REFER 的必填頭部。
REFER 可以在對話內或對話外發送。
202 已接受將觸發 REFER 請求,這表示另一個使用者代理已接受引用。
INFO
INFO 用於使用者代理向與其建立了媒體會話的另一個使用者代理傳送呼叫信令資訊。
這是一個端到端請求。
代理將始終轉發 INFO 請求。
UPDATE
如果會話未建立,UPDATE 用於修改會話的狀態。使用者可以使用 UPDATE 更改編解碼器。
如果會話已建立,則使用重新邀請來更改/更新會話。
PRACK
PRACK 用於確認臨時響應 (1XX) 的可靠傳輸。
通常,當客戶端收到包含RSeq可靠序列號和supported:100rel頭部的臨時響應時,客戶端會生成 PRACK。
PRACK 在rack頭部中包含 (RSeq + CSeq) 值。
PRACK 方法適用於所有臨時響應,但 100 Trying 響應除外,該響應永遠不會可靠地傳輸。
PRACK 可以包含訊息正文;它可用於提供/應答交換。
MESSAGE
它用於使用 SIP 傳送即時訊息。IM 通常由參與文字對話的參與者即時交換的簡短訊息組成。
MESSAGE 可以在對話內或對話外發送。
MESSAGE 的內容作為MIME附件包含在訊息正文中。
通常會收到200 OK響應以指示訊息已交付到其目的地。