SIP
對談發起協定是VoIP
技術中最常用的協定之一。它是一種應用層協定
,與其它應用層協定協同工作,通過Internet控制多媒體通訊對談
。
SIP
採用SDP(對談描述協定)
的幫助,它描述了用於通過IP
網路傳送語音和視訊的對談和RTP(實時傳輸協定)
。
SIP
可用於雙方(單播)或多方(多播)對談。
其它SIP應用包括檔案傳輸,即時通訊、視訊會議、網路遊戲、以及串流媒體分發
。
使用者代理
註冊伺服器
重定向伺服器
位置伺服器
使用者代理是SIP
網路中最智慧的裝置或網路原件。它可以是軟電話、手機或筆記型電腦。
使用者代理在邏輯上分為兩部分:
使用者代理使用者端(UAC)
:傳送請求並接收響應的實體。
使用者代理伺服器(UAS)
:接收請求並行送響應的實體。
SIP基於客戶機 - 伺服器
架構,其中呼叫者的電話充當發起呼叫的使用者端,被叫方的電話充當響應呼叫的伺服器。即:一部電話既可以做使用者端,也可以做伺服器端。
網路元素接收來自使用者代理的請求並將其轉發給另外一個使用者。
作用類似路由
在URI
的幫助下進行轉發
位於兩個使用者代理之間
代理伺服器的兩種型別
無狀態代理:只是轉發收到的訊息,不儲存任何呼叫或交易的資訊。
有狀態代理:可以跟蹤收到每個請求與響應,在有需要的時候,將來可以使用,對方沒有響應,可以重新傳送請求。
註冊伺服器接受使用者代理的註冊請求。幫助使用者在網路中進行身份認證。將URI和使用者的位置儲存在資料庫中,以幫助同一域內的其它SIP伺服器。
裝置註冊流程圖:
註冊流程描述:
裝置向伺服器傳送 Register請求;
伺服器向裝置傳送響應401,並在響應的訊息頭 WWW_Authenticate欄位中給出適合裝置的認證體制和引數;
裝置重新向伺服器傳送 Register請求,在請求的 Authorization欄位給出信任書, 包含認證資訊;
伺服器對請求進行驗證,如果檢查出 裝置身份合法,向裝置傳送成功響應 200 OK,如果身份不合法則傳送拒絕服務應答。
重定向伺服器接收請求,並在註冊器建立的位置資料庫中查詢請求的預期收件人。使用資料庫獲取位置資訊,並以3xx(重定向響應)
響應給使用者。
位置伺服器提供有關呼叫者可能的位置到重定向伺服器或代理伺服器的資訊。
呼叫流程圖
說明:
傳送到代理伺服器的INVITE請求負責啟動對談。
代理伺服器傳送100 嘗試立即響應呼叫者(lijiatu
)以停止INVITE請求的重新傳送。
代理伺服器在位置伺服器中搜尋nuonuo
的地址。獲取地址後,進一步轉發INVITE請求。
此後,nuonuo
手機生成的180 振鈴(臨時響應)返回給lijiatu
。
nuonuo
拿起手機後一個200 OK響應很快產生。
一旦200 OK到達lijiatu
,nuonuo
從lijiatu
收到一個ACK。
同時,對談建立,RTP封包(對談)從兩端開始流動。
對談結束後,任何參與者(lijiatu
,nuonuo
)都可以傳送一個BYE請求來終止對談。
BYE直接從lijiatu
到nuonuo
繞過代理伺服器。
最後,nuonuo
傳送200 OK響應來確認BYE,對談終止。
在上述基本呼叫流程中,可以使用三個事務(標記為1,2,3)。
完整的呼叫(從INVITE到200 OK)稱為對話Dialog。
SIP訊息有兩種型別 - 請求與響應
請求的開始行包含定義請求的方法及定義要傳送請求的URI
同樣,響應的開始行包含響應程式碼
方法可以被認為是SIP請求,它們請求由另一使用者代理或伺服器採取的特定動作。
方法分為兩種型別 : 核心方法 與 擴充套件方法
用於啟動與使用者代理的對談。
成功的Invite 請求在兩個使用者代理之間建立對話。
在已經建立的對話方塊中傳送Invite 被稱為 re-invite,re-invite用於更改對談特性或重新整理對話方塊的狀態。
可以在郵件正文中包含主叫方的媒體資訊。
範例:
INVITE sips:[email protected] SIP/2.0
Via: SIP/2.0/TLS client.ANC.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.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請求通常路由端到端,繞過代理伺服器。
REGISTER請求執行使用者代理的註冊。
它在正在註冊的使用者的To頭中攜帶AOR(記錄地址)
。
CANCEL用於終止未建立的對談。
CANCEL是逐跳請求,即它通過使用者代理之間的元素,並接收下一個有狀態元素生成的響應。
ACK用於確認對INVITE方法的最終響應。
OPTIONS方法用於向用戶代理或代理伺服器詢問其功能並行現其當前的可用性。
使用者代理使用Subscribe建立訂閱,以獲取有關特定事件的通知。
它包含一個Expires頭欄位,指示訂閱的持續時間。期限過後,訂閱將自動終止。
訂閱在使用者代理之間建立一個對話。
使用者可以使用Expires值0(零)傳送另一個SUBSCRIBE方法來取消訂閱。
使用者代理使用NOTIFY來獲取特定事件的發生。通常,當訂戶和通知程式之間存在訂閱時,NOTIFY將在對話方塊內觸發。
NOTIFY包含指示事件的事件頭欄位和指示訂閱的當前狀態的subscriptionstate
頭欄位。
始終在訂閱的開始和結束時傳送NOTIFY。
PUBLISH被使用者代理用於向伺服器傳送事件狀態資訊。
當有多個來源的事件資訊時,PUBLISH是非常有用的。
PUBLISH請求類似於NOTIFY,除了它不在對話方塊中傳送。
PUBLISH請求必須包含Expires頭欄位和Min-Expires頭欄位。
REFER由使用者代理用於參照另一個使用者代理來存取對話方塊的URI。
REFER必須包含Refer-To標題。這是REFER的強制標題。
REFER可以在對話方塊內部或外部傳送。
A 202 Accepted將觸發REFER請求,指示其他使用者代理已經接受參照。
INFO由使用者代理使用,以向其已經建立媒體對談的另一使用者代理傳送呼叫信令資訊。
這是一個端到端的請求。
代理將始終轉發INFO請求。
如果對談未建立,則UPDATE用於修改對談的狀態。使用者可以使用UPDATE更改編解碼器。
如果對談建立,則使用重新邀請來更改/更新對談。
PRACK用於確認接收到可靠的臨時響應轉移(1XX)。
一般來說,PRACK在接收到包含RSeq可靠序列號
和supported:100rel
頭的臨時響應時由使用者端生成。
PRACK在race頭部中包含(RSeq + CSeq)
值。
PRACK方法適用於所有臨時響應,除了100嘗試響應,這是永遠不可靠的運輸。
PRACK可能包含訊息體; 它可以用於提供/答覆交換。
它用於使用SIP傳送即時訊息。IM
通常由參與文字對談的參與者實時交換的短訊息。
MESSAGE可以在對話方塊內或對話方塊外傳送。
MESSAGE的內容作為MIME附件在郵件正文中載入。
一個200 OK被正常接收響應,以指示該訊息已在其目的地被遞送。
SIP響應是由使用者代理伺服器(UAS)
或SIP伺服器生成的用於回覆使用者端生成的請求的訊息。這可能是一個正式的確認,以防止UAC
轉發請求。
響應可能包含UAC
所需的一些額外的資訊頭欄位。
SIP有六個響應。
從HTTP中借用1xx
到5xx
,在SIP中引入了6xx
。
1xx
被視為臨時響應,其餘的是最終響應。
S.No. | 功能和說明 |
---|---|
1 | |
2 | |
3 | |
4 | |
五 | |
6 |
報頭是SIP訊息的組成部分,其傳達有關訊息的資訊。它被構造為頭序列欄位序列。
SIP頭欄位在大多數情況下遵循與HTTP頭欄位相同的規則。檔頭欄位定義為標題:欄位,其中標題用於表示標題欄位名稱,欄位是包含資訊的標記集。每個欄位由一個欄位名,後跟冒號(「:」)和欄位值(即欄位名稱:欄位值)組成。