SIP消息有兩種類型:請(qǐng)求和響應(yīng)。
一個(gè)請(qǐng)求的打開行包含定義,其中該請(qǐng)求是要被發(fā)送的方法,它定義請(qǐng)求,以及請(qǐng)求URI。
同樣響應(yīng)的打開行包含一個(gè)響應(yīng)代碼。
SIP請(qǐng)求是用于建立通信的代碼。為了補(bǔ)充它們,SIP響應(yīng)其通常指示請(qǐng)求是成功還是失敗。
有一些命令稱作方法,使SIP消息可行。
METHODS 可被視為SIP請(qǐng)求,因?yàn)樗鼈円髮⒁扇〉牧硪粋€(gè)用戶代理或服務(wù)器的特定動(dòng)作。
METHODS 被區(qū)分為兩種類型:
有六個(gè)核心的方法如以下所討論。
INVITE被用于發(fā)起會(huì)話使用用戶代理。換言之,一個(gè)INVITE方法用于建立用戶代理之間的媒體會(huì)話。
INVITE可以包含在郵件正文中主叫者的媒體信息。
會(huì)話被認(rèn)為是如果INVITE已經(jīng)獲得了成功響應(yīng)(2xx)上建立或ACK已發(fā)送。
一個(gè)成功的INVITE請(qǐng)求建立這一直持續(xù)到BYE發(fā)送到終止會(huì)話的兩個(gè)用戶代理之間的對(duì)話。
一個(gè)發(fā)送的INVITE內(nèi)已建立的對(duì)話被稱為一個(gè)re-INVITE請(qǐng)求。
re-INVITE請(qǐng)求用于改變?cè)跁?huì)話特性或刷新一個(gè)對(duì)話的狀態(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@atlanta.com> ;tag = 1234567 To: Bob <sips:Bob@TMC.com> Call-ID: 12345601@ANC.com 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ì)話的方法。這是可以通過主叫方或被叫方結(jié)束會(huì)話被發(fā)送SIP請(qǐng)求。
REGISTER請(qǐng)求執(zhí)行的用戶代理的注冊(cè)。這個(gè)請(qǐng)求是由用戶代理發(fā)送到注冊(cè)服務(wù)器。
REGISTER請(qǐng)求可以被轉(zhuǎn)發(fā)或代理,直到它到達(dá)指定域的權(quán)威注冊(cè)機(jī)構(gòu)。
它所攜帶的AOR(記錄地址)在為正在注冊(cè)的用戶的頭。
REGISTER請(qǐng)求中包含的時(shí)間段(3600秒)。
一個(gè)用戶代理可以代表其他用戶發(fā)送代理注冊(cè)請(qǐng)求。這就是所謂的第三方注冊(cè)。在這里,從標(biāo)簽中包含方提交的注冊(cè)代表確定To頭部分的URI。
CANCEL用于終止未建立會(huì)話。用戶代理使用此請(qǐng)求取消更早啟動(dòng)暫停呼叫的嘗試。
它可以通過一個(gè)用戶代理或代理服務(wù)器來發(fā)送。
CANCEL是一個(gè)逐跳轉(zhuǎn)發(fā)請(qǐng)求,也就是說,它通過用戶代理之間的元件和接收由下一狀態(tài)元素所產(chǎn)生的反應(yīng)。
ACK用于確認(rèn)最后的響應(yīng)的INVITE方法。ACK總是在INVITE的方向。 ACK可能包含的SDP主體(媒體特性),如果它不在INVITE可用。
ACK可能不被用于修改一個(gè)已經(jīng)發(fā)送的初始INVITE的媒體描述。
有狀態(tài)代理接收ACK必須確定是否將ACK應(yīng)下游轉(zhuǎn)發(fā)到另一個(gè)代理或用戶代理。
對(duì)于2xx應(yīng)答,ACK是端到端的,但對(duì)于所有其他最終響應(yīng),它可以在逐跳轉(zhuǎn)發(fā)基礎(chǔ)上參與狀態(tài)代理時(shí)。
OPTIONS方法用于查詢的用戶代理或圍繞其功能的代理服務(wù)器,并發(fā)現(xiàn)其當(dāng)前的可用性。于請(qǐng)求的響應(yīng)列出了用戶代理或服務(wù)器的功能。代理從未產(chǎn)生OPTIONS請(qǐng)求。
訂閱所使用的用戶代理商建立了訂閱獲取通知的有關(guān)特定事件的目的。
它有一個(gè)時(shí)間周期,在Expires頭字段,指示存在一個(gè)訂閱的所需的持續(xù)時(shí)間。
在指定的時(shí)間段過后,訂閱將自動(dòng)終止。
成功訂閱建立用戶代理之間的對(duì)話。
訂閱可以通過發(fā)送到期時(shí)間之前對(duì)話框中的另一個(gè)訂閱刷新。
服務(wù)器接受訂閱返回一個(gè)200 OK。
用戶可以通過發(fā)送另一個(gè)使用訂閱方法退訂過期值為0(零)。
NOTIFY是用來由用戶代理傳達(dá)的特定事件的發(fā)生。NOTIFY總是在對(duì)話中發(fā)送當(dāng)用戶與通知之間存在訂閱。
200 OK響應(yīng)被接收為每個(gè)NOTIFY以指示它已收到。
NOTIFY請(qǐng)求包含指示,指示訂閱的當(dāng)前狀態(tài)的包和訂閱的狀態(tài)報(bào)頭字段的Event報(bào)頭字段。
NOTIFY總是在訂閱開始和訂閱終止發(fā)送。
PUBLISH用于由用戶代理發(fā)送的事件的狀態(tài)信息,以已知作為一個(gè)事件狀態(tài)合成器的服務(wù)器。
Publish當(dāng)有事件信息的多種來源主要是有用的。
PUBLISH請(qǐng)求類似于一個(gè)NOTIFY,不同之處在于它不是在對(duì)話框發(fā)送。
一個(gè)PUBLISH請(qǐng)求必須包含一個(gè)Expires頭字段和Min-Expires頭字段域。
REFER用于由一個(gè)用戶代理來指另一個(gè)用戶代理訪問URI的對(duì)話框。
REFER必須包含一個(gè)Refer-To頭。這是參考一個(gè)強(qiáng)制性的頭。
REFER可以在內(nèi)部或在對(duì)話外發(fā)送。
202 Accepted 將引發(fā)REFER請(qǐng)求這表明其他用戶代理已經(jīng)接受了參考。
INFO所使用的用戶代理發(fā)送呼叫信令信息,與它建立了一個(gè)媒體會(huì)話其他用戶代理。這是一個(gè)終端到終端的請(qǐng)求,并且從不生成由代理。代理會(huì)一直轉(zhuǎn)發(fā)信息請(qǐng)求。
UPDATE用于修改會(huì)話的狀態(tài)不改變對(duì)話的狀態(tài)。更新用于如果會(huì)話沒有建立,并且用戶想要改變編解碼器。
如果會(huì)話建立后,再邀請(qǐng)來改變/更新會(huì)話。
PRACK用于確認(rèn)收到臨時(shí)響應(yīng)(1XX)可靠傳輸。
PRACK通過一個(gè)用戶代理客戶端時(shí)產(chǎn)生的臨時(shí)的響應(yīng)已經(jīng)接收到含有RSEQ可靠序列號(hào)和一個(gè) supported:100rel 頭。
PRACK包含架頭(RSEQ+ Cseq)值。
PRACK可能包含郵件正文;它可以被用于提供/應(yīng)答交換。
它是用來發(fā)送即時(shí)消息或使用SIP IM。一個(gè)IM通常由短信息交換實(shí)時(shí)由從事文本會(huì)話參與者。
消息可以在對(duì)話中或在對(duì)話外發(fā)送。
消息的內(nèi)容在郵件正文中攜帶的MIME附件。
200 OK響應(yīng)被正常接收,以指示該消息已被傳送在它的目的地。