1. 程式人生 > >SIP基本應用場景

SIP基本應用場景

1、SIP業務基本知識

1.1 業務介紹

會話初始協議(Session Initiation Protocol)是一種信令協議,用於初始、管理和終止網路中的語音和視訊會話,具體地說就是用來生成、修改和終結一個或多個參與者之間的會話。SIP的業務模式是一個點對點協議,其中有兩個要素——SIP使用者代理和SIP網路伺服器。使用者代理是呼叫的終端系統元素,而SIP伺服器是處理與多個呼叫相關聯信令的網路裝置。使用者代理本身具有一客戶機元素(使用者代理客戶機UAC)和一伺服器元素(使用者代理伺服器UAS)。客戶機元素初始呼叫而伺服器元素應答呼叫。這允許點到點的呼叫通過客戶機-伺服器協議來完成。下圖是SIP業務的網路結構和各個參與者的關係。

wps_clip_image-377

SIP業務的核心特點集中在SIP的設計目標之一是提供類似公用交換電話網(PSTN)中呼叫處理功能的擴充套件集。在這個擴充套件集中,實現類似日常電話的操作:撥號,振鈴,回鈴音或者忙音,只是實現方式和術語有所不同。SIP也實現了許多信令系統7(SS7)中更高階的呼叫處理功能,儘管這兩個協議相差很遠。SS7是一個高度集中處理的協議,其特點表現為高複雜度的中心網路結構和無智慧的啞終端(傳統的電話機)。SIP則是一個點對點協議,所以它只需要一個相對簡單的(因此也高度可擴充套件的)核心網路,而將處理工作下放給連線在網路邊緣的智慧端點(裝有硬體或軟體的終端裝置)。SIP的許多功能在端點中實現,這與傳統的SS7將其在網路核心裝置實現的作法大異其趣。而協議的其他特點還有它是一個文字協議,所以易於調測,結構靈活;而且它是一箇中性的底層傳輸協議,可用TCP或UDP(推薦UDP);同時呼叫和媒體資訊同時傳送:媒體資訊的傳送由SDP傳送

SIP是網際網路工程任務組(IETF)多媒體資料和控制體系結構的一個組成部分,因此它與IETF的許多其他協議都有聯絡,例如RTP(實時傳輸協議)和SDP協議。SIP與許多其它的協議協同工作,僅僅涉及通訊會話的信令部分(control message)。SIP報文內容傳送會話描述協議(SDP),SDP協議描述了會話所使用流媒體細節,如:使用哪個IP埠,採用哪種編解碼器等等。SIP的一個典型用途是:SIP“會話”傳輸一些簡單的經過封包的實時傳輸協議流。RTP本身才是語音或視訊的載體。

1.2 業務過程和協議流程

Ø 註冊流程:

wps_clip_image-1045

(1)使用者首次試呼時,終端代理A 向代理伺服器傳送REGISTER 註冊請求;

(2)代理伺服器通過後端認證/計費中心獲知使用者資訊不在資料庫中,便向終端代理回送401Unauthorized 質詢資訊,其中包含安全認證所需的令牌;

(3)終端代理提示使用者輸入其標識和密碼後,根據安全認證令牌將其加密後,再次用REGISTER 訊息報告給代理伺服器;

(4)代理伺服器將REGISTER 訊息中的使用者資訊解密,通過認證/計費中心驗證其合法後,將該使用者資訊登記到資料庫中,並向終端代理A 返回成功響應訊息200 OK。

Ø 登出流程:

 

wps_clip_image-1311

(1)終端向代理伺服器傳送register訊息登出,其頭中expire欄位設定為0。

(2)代理伺服器在收到後送回200OK響應,並將資料庫中的使用者有關訊息登出。

Ø 基本呼叫建立過程:

wps_clip_image-1406

(1)使用者摘機發起一路呼叫,終端代理A向該區域的代理伺服器發起Invite請求;

(2)代理伺服器通過認證/計費中心確認使用者認證已通過後,檢查請求訊息中的Via頭域中是否已包含其地址。若已包含,說明發生環回,返回指示錯誤的應答;若沒有問題,代理伺服器在請求訊息的Via頭域插入自身地址,並向Invite訊息的To域所指示的被叫終端代理B傳送Invite請求。

(3)代理伺服器向終端代理A傳送呼叫處理中的應答資訊:100Trying。

(4)終端代理B向代理伺服器送呼叫處理中的應答資訊:100Trying。

(5)終端代理B指示被叫使用者振鈴,使用者振鈴後向代理伺服器傳送180Ringing振鈴資訊。

(6)代理伺服器向終端代理A轉發被叫使用者振鈴資訊。

(7)被叫使用者摘機,終端代理B向代理伺服器返回表示連線成功的應答(200OK)

(8)代理伺服器向終端代理A轉發該成功指示(200OK)

(9)終端代理A收到資訊後,向代理伺服器發ACK資訊進行確認

(10)代理伺服器將ACK確認訊息轉發給終端代理B。

(11)主被叫使用者之間建立通訊連線,開始通話。

Ø 正常呼叫釋放過程:

wps_clip_image-1897

(1) 正常呼叫

(2) 使用者通話結束後,被叫使用者掛機,終端代理B向代理伺服器傳送Bye訊息。

(3) 代理伺服器轉發Bye訊息至終端代理A,同時向認證、計費中心傳送使用者通話的詳細資訊,請求計費。

(4) 主叫使用者掛機後,終端代理A向代理伺服器傳送確認結束通話響應資訊200OK。

(5) 代理伺服器轉發響應資訊200OK。

Ø 會話更改流程:

wps_clip_image-2048

(1)使用者代理服務端和代理客戶端正常通話。

(2)使用者代理服務端向用戶代理客戶端傳送Invite資訊,帶有新的SDP協商資訊。

(3)使用者處理客戶端回覆200OK,並將協商後的SDP資訊帶回。

(4)使用者代理服務端傳送ACK給使用者代理客戶端進行確認。

Ø 被叫忙呼叫釋放:
wps_clip_image-2186

(1)使用者摘機發起一路呼叫,終端代理A向該區域代理伺服器發起Invite請求;

(2)代理伺服器向被叫終端代理B傳送Invite請求。

(3)代理伺服器向終端代理A傳送呼叫處理中的應答資訊:100Trying。

(4)終端代理B向代理伺服器送呼叫處理中的應答資訊:100Trying。

(5)呼叫請求送到被叫終端代理B後,被叫忙,終端代理B向代理伺服器送486被叫忙響應。

(6)代理伺服器向終端代理A轉發該響應訊息。

(7)終端代理A向代理伺服器回送ACK確認訊息。

(8)代理伺服器向終端代理B送ACK確認資訊。

Ø 被叫無應答流程一:

wps_clip_image-2458

(1)使用者摘機發起一路呼叫,終端代理A向該區域代理伺服器發起Invite請求;

(2)代理伺服器向被叫終端代理B傳送Invite請求。

(3)代理伺服器向終端代理A傳送呼叫處理中的應答資訊:100Trying。

(4)終端代理B向代理伺服器送呼叫處理中的應答資訊:100Trying。

(5)被叫使用者振鈴,終端代理B向代理伺服器送180Ring響應。

(6)代理伺服器向終端代理A轉發該響應資訊。

(7)被叫久振鈴無應答,終端代理A判斷超時後向代理伺服器送Cancel訊息放棄該呼叫。

(8)代理伺服器收到Cancel訊息後,向終端代理A回送200OK響應。

(9)代理伺服器將Cancel訊息轉發給終端代理B。

(10)終端代理B向代理伺服器回送200OK響應。

(11)終端代理B向代理伺服器送487請求已撤銷的響應資訊。

(12)代理伺服器收到後回送ACK確認。

(13)代理伺服器向終端代理A送487請求已撤銷訊息。

(14)終端代理A向代理伺服器回送ACK確認。

注:以上步驟中的(10)到(12)無嚴格順序關係。

Ø 被叫無應答流程二:

wps_clip_image-2935

(1)使用者摘機發起一路呼叫,終端代理A向該區域代理伺服器發起Invite請求;

(2)代理伺服器向被叫終端代理B傳送Invite請求。

(3)代理伺服器向終端代理A傳送呼叫處理中的應答資訊:100Trying。

(4)終端代理B向代理伺服器送呼叫處理中的應答資訊:100Trying。

(5)被叫使用者振鈴,終端代理B向代理伺服器送180Ring響應。

(6)代理伺服器向終端代理A轉發該響應資訊。

(7)被叫久振鈴無應答,終端代理B判斷超時後向代理伺服器送408Requesttimeout訊息放棄該呼叫。

(8)代理伺服器收到408Requesttimeout訊息後,轉發該訊息給終端代理A。

(9)代理伺服器回送ACK確認給終端代理B。

(10)終端代理A向代理伺服器回送ACK確認。

注:以上步驟中的(9)到(10)無嚴格順序關係。

Ø 遇忙呼叫前轉:

wps_clip_image-3326

(1)使用者摘機發起一路呼叫,終端代理A向該區域代理伺服器發起Invite請求;

(2)代理伺服器向被叫終端代理B傳送Invite請求。

(3)代理伺服器向終端代理A傳送呼叫處理中的應答資訊:100Trying。

(4)終端代理B向代理伺服器送呼叫處理中的應答資訊:100Trying。

(5)終端代理B忙線中,B向代理伺服器傳送486Busy Here響應。

(6)代理伺服器向終端代理B傳送ACK確認訊息。

(7)代理伺服器對此呼叫進行前轉,向代理伺服器C傳送Invite請求訊息。

(8)代理終端C收到後指示使用者振鈴,同時向代理伺服器傳送180Ringing響應。

(9)代理伺服器向A轉發收到的180Ringing響應。

(10)被叫使用者C摘機接聽電話,終端代理C向代理伺服器返回表示連線成功的應答(200OK)

(11)代理伺服器向終端代理A轉發該成功指示(200OK)

(12)終端代理A收到資訊後,向代理伺服器發ACK資訊進行確認

(13)代理伺服器將ACK確認訊息轉發給終端代理B。

建立通訊連線,開始通話。

(14)主叫使用者掛機,終端代理A向代理伺服器傳送Bye訊息,請求掛機。

(15)代理伺服器轉發Bye訊息至終端代理C,指示C掛機。

(16)終端代理C向代理伺服器傳送確認結束通話響應資訊200OK。

(17)代理伺服器轉發響應資訊200OK至A。

Ø 無應答呼叫前轉流程:

wps_clip_image-3923

(1)使用者A摘機發起一路呼叫,終端代理A向該區域代理伺服器發起Invite請求;

(2)代理伺服器向被叫終端代理B傳送Invite請求。

(3)代理伺服器向終端代理A傳送呼叫處理中的應答資訊:100Trying。

(4)終端代理B向代理伺服器送呼叫處理中的應答資訊:100Trying。

(5)被叫使用者振鈴,終端代理B向代理伺服器送180Ring響應。

(6)代理伺服器向終端代理A轉發該響應資訊。

(7)被叫久振鈴無應答,代理伺服器判斷超時後向代理終端B送Cancel訊息放棄該呼叫。

(8)代理終端B收到Cancel訊息後,向代理伺服器回送200OK響應。

(9)終端代理B向代理伺服器送487請求已撤銷的響應資訊。

(10)代理伺服器向終端代理B回送200OK響應。

(11)代理伺服器對此呼叫進行前轉,向代理伺服器C傳送Invite請求訊息。

(12)代理終端C收到後指示使用者振鈴,同時向代理伺服器傳送180Ringing響應。

(13)代理伺服器向A轉發收到的180Ringing響應。

(14)被叫使用者C摘機接聽電話,終端代理C向代理伺服器返回表示連線成功的應答(200OK)

(15)代理伺服器向終端代理A轉發該成功指示(200OK)

(16)終端代理A收到資訊後,向代理伺服器發ACK資訊進行確認

(17)代理伺服器將ACK確認訊息轉發給終端代理C。

建立通訊連線,開始通話。

(18)主叫使用者掛機,終端代理A向代理伺服器傳送Bye訊息,請求掛機。

(19)代理伺服器轉發Bye訊息至終端代理C,指示C掛機。

(20)終端代理C向代理伺服器傳送確認結束通話響應資訊200OK。

(21)代理伺服器轉發響應資訊200OK至A。

Ø 呼叫保持:

wps_clip_image-4651

(1)使用者摘機發起一路呼叫,終端代理A向該區域的代理伺服器發起Invite請求;

(2)代理伺服器通過認證/計費中心確認使用者認證已通過後,檢查請求訊息中的Via頭域中是否已包含其地址。若已包含,說明發生環回,返回指示錯誤的應答;若沒有問題,代理伺服器在請求訊息的Via頭域插入自身地址,並向Invite訊息的To域所指示的被叫終端代理B傳送Invite請求。

(3)代理伺服器向終端代理A傳送呼叫處理中的應答資訊:100Trying。

(4)終端代理B向代理伺服器送呼叫處理中的應答資訊:100Trying。

(5)終端代理B指示被叫使用者振鈴,使用者振鈴後向代理伺服器傳送180Ringing振鈴資訊。

(6)代理伺服器向終端代理A轉發被叫使用者振鈴資訊。

(7)被叫使用者摘機,終端代理B向代理伺服器返回表示連線成功的應答(200OK)

(8)代理伺服器向終端代理A轉發該成功指示(200OK)

(9)終端代理A收到資訊後,向代理伺服器發ACK資訊進行確認

(10)代理伺服器將ACK確認訊息轉發給終端代理B。

(11)主被叫使用者之間建立通訊連線,開始通話。

(12)代理終端B向代理伺服器傳送Reinvite訊息,SDP的c域等於0,0,0,0。

(13)代理伺服器轉發此資訊給代理終端A。

(14)代理終端A收到Reinvite後迴應200OK響應。表示接受會話更改,同事根據協商結果修改會話方式。

(15)代理伺服器轉發200OK給代理終端B。

(16)代理終端B收到訊息後向代理伺服器傳送ACK訊息進行確認。

(17)代理伺服器將ACK確認訊息轉發到代理終端A。

Ø 呼叫等待:

wps_clip_image-5343

(1)AB正常通話。

(2)在AB通話的階段,使用者C向A發起呼叫,終端代理C傳送Invite訊息給代理伺服器。

(3)代理伺服器向終端C回送100Trying響應,表示呼叫已在處理中。

(4)代理伺服器把Invite訊息轉發給A。

(5)使用者A振鈴,並且終端A向代理伺服器傳送180Ring響應。

(6)代理伺服器向終端C轉發該響應資訊。

(7)使用者A按下呼叫保持鍵,代理終端A向代理伺服器傳送Invite訊息,請求與代理終端C呼叫保持。

(8)代理伺服器轉發此訊息給終端代理B。

(9)代理伺服器向終端A回送100Trying響應,表示呼叫已在處理中。

(10)終端B收到呼叫保持請求後,傳送200OK給代理伺服器,表示接受呼叫保持。

(11)代理伺服器轉發200OK響應給終端代理A。

(12)代理終端A收到訊息後向代理伺服器傳送ACK訊息進行確認。

(13)代理伺服器將ACK確認訊息轉發到代理終端B。

(14)終端代理A傳送200OK給代理伺服器,表示接受C的呼叫。

(15)代理伺服器轉發200OK給終端代理C。

(16)終端代理C向代理伺服器回送ACK確認。

(17)代理伺服器向代理終端A轉發收到的ACK確認。

A、C之間開始通話。

(18)使用者A掛機,終端代理A向代理伺服器傳送Bye請求訊息。

(19)代理伺服器轉發Bye訊息給終端代理B。

(20)終端代理C傳送200OK給代理伺服器,表示接受請求。

(21)代理伺服器轉發200OK響應給終端代理A。

(22)終端代理C重新發送Invite請求給代理伺服器,請求和終端代理B恢復通話。

(23)代理伺服器向代理終端B轉發收到的Invite請求。

2、SIP通訊過程報文抓取例項分析

l 實驗環境:Linux2.6+Asterisk1.4(開源IPPBX)

l 實驗地點:北京郵電大學資訊與通訊工程學院創新實驗室

l SIP代理伺服器IP:59.64.135.22  SIP電話號碼:825002(59.64.135.22)

l SIP代理終端IP:59.64.135.67

l 軟終端:X-lite

l 抓包分析工具:WireShark

注:由於過程太多,以下僅僅抓取“成功註冊”,“呼叫--通話” ,“結束通話”“登出”四種情況做典型包的分析。

Ø 註冊流程:

wps_clip_image-6298

以上是REGISTER包。

我們可以看到在註冊的時候,終端會向代理伺服器59.64.135.22傳送REGISTER請求註冊。

wps_clip_image-6365

以上是REGISTEROK包。伺服器返回200 OK,表示註冊成功。

Ø 基本呼叫建立過程:

wps_clip_image-6413

以上是INVITE包。我們可以看到在發起呼叫初期,終端向825002發出Invite的呼叫請求。

wps_clip_image-6465

以上是Trying包,說明終端825003正在試著連通伺服器,進一步轉接到825002.

由於設定了自動接聽,所以此次通話沒有振鈴的包。

wps_clip_image-6538

這是ACK包,代表確認訊號。

Ø 正常呼叫釋放過程:

wps_clip_image-6566

以上是BYE包。這是825002結束通話後伺服器向825003傳送的釋放呼叫訊號。

Ø 登出流程:

wps_clip_image-6615

以上是825003登出的包,我們注意到expires=0這說明是登出。

3.總結

SIP協議憑藉其簡單、易於擴充套件、便於實現等諸多優點越來越得到業界的青睞,它正逐步成為NGN(下一代網路)和3G多媒體子系統域中的重要協議,並且市場上出現越來越多的支援SIP的客戶端軟體和智慧多媒體終端,以及用SIP協議實現的伺服器和軟交換裝置。

作者:gnuhpc 
出處:http://www.cnblogs.com/gnuhpc/