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