【轉】【協議學習】SIP基本場景分析

一、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 消息報告給代理服務器;spa

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

Ø 註銷流程:

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請求。

二、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/

相關文章
相關標籤/搜索