天天看點

SIP業務基本知識

1、SIP業務基本知識

1.1 業務介紹

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

SIP業務基本知識

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 業務過程和協定流程

Ø 注冊流程:

SIP業務基本知識

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

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

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

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

Ø 登出流程:

SIP業務基本知識

(1)終端向代理伺服器發送register消息登出,其頭中expire字段設定為0。

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

Ø 基本呼叫建立過程:

SIP業務基本知識

(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)主被叫使用者之間建立通信連接配接,開始通話。

Ø 正常呼叫釋放過程:

SIP業務基本知識

(1) 正常呼叫

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

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

(4) 主叫使用者挂機後,終端代理A向代理伺服器發送确認挂斷響應資訊200OK。

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

Ø 會話更改流程:

SIP業務基本知識

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

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

(3)使用者處理用戶端回複200OK,并将協商後的SDP資訊帶回。

(4)使用者代理服務端發送ACK給使用者代理用戶端進行确認。

Ø 被叫忙呼叫釋放:

SIP業務基本知識

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

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

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

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

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

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

Ø 被叫無應答流程一:

SIP業務基本知識

(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)無嚴格順序關系。

Ø 被叫無應答流程二:

SIP業務基本知識

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

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

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

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

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

Ø 遇忙呼叫前轉:

SIP業務基本知識

(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。

Ø 無應答呼叫前轉流程:

SIP業務基本知識

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

(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。

Ø 呼叫保持:

SIP業務基本知識

(12)代理終端B向代理伺服器發送Reinvite消息,SDP的c域等于0,0,0,0。

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

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

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

(16)代理終端B收到消息後向代理伺服器發送ACK消息進行确認。

(17)代理伺服器将ACK确認消息轉發到代理終端A。

Ø 呼叫等待:

SIP業務基本知識

(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

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

SIP業務基本知識

以上是REGISTER包。

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

SIP業務基本知識

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

SIP業務基本知識

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

SIP業務基本知識

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

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

SIP業務基本知識

這是ACK包,代表确認信号。

SIP業務基本知識

以上是BYE包。這是825002挂斷後伺服器向825003發送的釋放呼叫信号。

SIP業務基本知識

3.總結

上一篇: Nginx
下一篇: nginx

繼續閱讀