SIP消息有兩種類型 - 請求和響應(yīng)。
請求的開始行包含定義請求的方法,以及定義請求發(fā)送位置的Request-URI。
類似地,響應(yīng)的開始行包含響應(yīng)代碼。
SIP請求是用于建立通信的代碼。為了補充它們,存在 SIP響應(yīng),其通常指示請求是成功還是失敗。
這些稱為方法的SIP請求使得SIP消息可行。
方法可以被認為是SIP請求,因為它們請求由另一個用戶代理或服務(wù)器采取的特定動作。
方法分為兩種類型 -
核心方法
擴展方法
下面討論六種核心方法。
INVITE用于發(fā)起與用戶代理的會話。換句話說,INVITE方法用于在用戶代理之間建立媒體會話。
INVITE可以在消息正文中包含呼叫者的媒體信息。
如果INVITE已經(jīng)接收到成功響應(yīng)(2xx)或者已經(jīng)發(fā)送了ACK,則認為會話被建立。
成功的INVITE請求在兩個用戶代理之間建立對話,其繼續(xù),直到發(fā)送BYE以終止會話。
在已建立的對話中發(fā)送的INVITE被稱為 re-INVITE 。
Re-INVITE用于更改會話特征或刷新對話框的狀態(tài)。
以下代碼顯示如何使用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是用于終止已建立的會話的方法。 這是一個SIP請求,可以由主叫方或被叫方發(fā)送以結(jié)束會話。
它不能由代理服務(wù)器發(fā)送。
BYE請求通常繞過代理服務(wù)器端到端路由。
BYE不能發(fā)送到掛起的INVITE或未建立的會話。
REGISTER請求執(zhí)行用戶代理的注冊。此請求由用戶代理發(fā)送到注冊服務(wù)器。
REGISTER請求可以被轉(zhuǎn)發(fā)或代理,直到它到達指定域的權(quán)威注冊器。
它在正在注冊的用戶的 To 頭中攜帶AOR(記錄地址)。
REGISTER請求包含時間段(3600秒)。
一個用戶代理可以代表另一個用戶代理發(fā)送REGISTER請求。 這稱為第三方注冊。 這里, From 標簽包含代表 To 標頭中標識的一方提交注冊的一方的URI。
CANCEL用于終止未建立的會話。用戶代理使用此請求取消之前發(fā)起的待處理呼叫嘗試。
它可以由用戶代理或代理服務(wù)器發(fā)送。
CANCEL是逐跳請求,即,它通過用戶代理之間的元素并接收由下一個有狀態(tài)元素產(chǎn)生的響應(yīng)。
ACK用于確認對INVITE方法的最終響應(yīng)。ACK總是向著INVITE的方向。如果在INVITE中不可用,ACK可以包含SDP主體(媒體特性)。
ACK可以不被用于修改已經(jīng)在初始INVITE中發(fā)送的媒體描述。
接收ACK的狀態(tài)代理必須確定ACK是否應(yīng)當向下游轉(zhuǎn)發(fā)到另一個代理或用戶代理。
對于2xx響應(yīng),ACK是端到端的,但是對于所有其他最終響應(yīng),當涉及狀態(tài)代理時,其工作在逐跳基礎(chǔ)上。
OPTIONS方法用于向用戶代理或代理服務(wù)器查詢其功能,并發(fā)現(xiàn)其當前可用性。 對請求的響應(yīng)列出了用戶代理或服務(wù)器的功能。 代理永遠不會生成OPTIONS請求。
用戶代理使用SUBSCRIBE來建立訂閱,以獲得關(guān)于特定事件的通知。
它包含一個 Expires 頭字段,用于指示訂閱的持續(xù)時間。
在該時間段過去之后,訂閱將自動終止。
訂閱在用戶代理之間建立對話。
您可以在到期時間之前在對話框中發(fā)送另一個SUBSCRIBE再次重新訂閱。
將收到來自用戶的訂閱的200 OK。
用戶可以通過發(fā)送另一個SUBSCRIBE方法取消訂閱,Expires值為0(零)。
NOTIFY用于由用戶代理獲取特定事件的發(fā)生。通常,當訂閱者和通知者之間存在訂閱時,NOTIFY將在對話框中觸發(fā)。
每個NOTIFY將得到200 OK響應(yīng),如果它被通知器接收。
NOTIFY包含指示事件的 Event 頭字段和指示訂閱當前狀態(tài)的 subscriptionstate 頭字段。
NOTIFY總是在訂閱的開始和終止時發(fā)送。
PUBLISH由用戶代理用于向服務(wù)器發(fā)送事件狀態(tài)信息。
當有多個事件信息來源時,PUBLISH是最有用的。
PUBLISH請求類似于NOTIFY,除了它不是在對話框中發(fā)送。
PUBLISH請求必須包含 Expires 頭字段和 Min-Expires 頭字段。
REFER由用戶代理使用來引用另一個用戶代理來訪問對話框的URI。
REFER必須包含 Refer-To 標題。 這是REFER的必需標題。
REFER可以在對話框內(nèi)部或外部發(fā)送。
A 202已接受將觸發(fā)REFER請求,其指示其他用戶代理已接受引用。
INFO由用戶代理用來向與其建立媒體會話的另一用戶代理發(fā)送呼叫信令信息。
這是一個端到端的請求。
代理將始終轉(zhuǎn)發(fā)INFO請求。
如果會話未建立,UPDATE用于修改會話的狀態(tài)。 用戶可以使用UPDATE更改編解碼器。
如果建立了會話,則使用重新邀請來改變/更新會話。
PRACK用于確認接收到臨時響應(yīng)(1XX)的可靠傳輸。
通常,當客戶端接收到包含 RSeq 可靠序列號和支持的:100rel 頭部的臨時響應(yīng)時,PRACK就會生成。
PRACK在 rack 標題中包含(RSeq&amp; plus; CSeq)值。
PRACK方法適用于所有臨時響應(yīng),除了100 Trying響應(yīng),其從未可靠地傳送。
PRACK可以包含消息體; 它可以用于提供/應(yīng)答交換。
它用于使用SIP發(fā)送即時消息。IM通常包括從事文本會話的參與者實時交換的短消息。
MESSAGE可以在對話框內(nèi)或?qū)υ捒蛲獍l(fā)送。
MESSAGE的內(nèi)容作為 MIME 附件在郵件正文中傳送。
通常接收到 200 OK 響應(yīng)以指示消息已在其目的地傳送。
更多建議: