SIP協議之場景分析

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



1、SIP業務基本知識

1.1 業務介紹

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

wps_clip_p_w_picpath-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_p_w_picpath-1045

(1)用戶首次試呼時,終端代理A 向代理服務器發送REGISTER 註冊請求;

(2)代理服務器通過後端認證/計費中心獲知用戶信息不在數據庫中,便向終端代理回送401Unauthorized 質詢信息,其中包含安全認證所需的令牌;

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

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

註銷流程:

wps_clip_p_w_picpath-1311

(1)終端向代理服務器發送register消息註銷,其頭中expire字段設置爲0。

(2)代理服務器在收到後送回200OK響應,並將數據庫中的用戶有關消息註銷。

基本呼叫建立過程:

wps_clip_p_w_picpath-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_p_w_picpath-1897

(1) 正常呼叫

(2) 用戶通話結束後,被叫用戶掛機,終端代理B向代理服務器發送Bye消息。

(3) 代理服務器轉發Bye消息至終端代理A,同時向認證、計費中心發送用戶通話的詳細信息,請求計費。

(4) 主叫用戶掛機後,終端代理A向代理服務器發送確認掛斷響應信息200OK。

(5) 代理服務器轉發響應信息200OK。

會話更改流程:

wps_clip_p_w_picpath-2048

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

(2)用戶代理服務端向用戶代理客戶端發送Invite信息,帶有新的SDP協商信息。

(3)用戶處理客戶端回覆200OK,並將協商後的SDP信息帶回。

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

被叫忙呼叫釋放:

wps_clip_p_w_picpath-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_p_w_picpath-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_p_w_picpath-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_p_w_picpath-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_p_w_picpath-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_p_w_picpath-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_p_w_picpath-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_p_w_picpath-6298

以上是REGISTER包。

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

wps_clip_p_w_picpath-6365

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

基本呼叫建立過程:

wps_clip_p_w_picpath-6413

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

wps_clip_p_w_picpath-6465

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

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

wps_clip_p_w_picpath-6538

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

正常呼叫釋放過程:

wps_clip_p_w_picpath-6566

以上是BYE包。這是825002掛斷後服務器向825003發送的釋放呼叫信號。

註銷流程:

wps_clip_p_w_picpath-6615

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

3.總結

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

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章