莊偉胤 唐余亮
【摘要】 Session Initiation Protocol(SIP)是下一代網(wǎng)絡(luò)的核心控制協(xié)議,用于在IP數(shù)據(jù)網(wǎng)絡(luò)上建立、改變和結(jié)束多媒體會話。SIP服務(wù)器作為下一代網(wǎng)絡(luò)的核心設(shè)備,它的實現(xiàn)就顯得尤為重要。一種方法是代理服務(wù)器Proxy,它只在SIP交互時保存狀態(tài),而不是在整個呼叫中維護狀態(tài),這限制了代理服務(wù)器更大范圍的應(yīng)用。另一種方法是背對背的用戶代理(B2BUA,Back-to-Back User Agent)服務(wù)器,它在整個呼叫過程中都維護狀態(tài)。文章從SIP協(xié)議的基本原理出發(fā),利用reSIProcate協(xié)議棧實現(xiàn)SIP B2BUA服務(wù)器并對其做了壓力測試。
【關(guān)鍵詞】 RFC 3261 SIP B2BUA
一、SIP協(xié)議
SIP是2001年推出的IETF標準(RFC 3261),用于在IP數(shù)據(jù)網(wǎng)絡(luò)上建立、改變和結(jié)束多媒體會話。SIP系統(tǒng)采用C/S模型,定義了服務(wù)器和用戶代理。SIP系統(tǒng)的端系統(tǒng)稱為用戶代理(User Agent,UA),包含用戶代理客戶端(User Agent Client,UAC)和用戶代理服務(wù)器(User Agent Server,UAS)。UAC負責呼叫的發(fā)出,而UAS負責呼叫的接收。
典型的基于Proxy的呼叫過程為:主叫方向被叫方發(fā)出INVITE請求消息,開始建立會話。Proxy接收到這條消息時會回復(fù)一條100 Trying告訴主叫方消息正在處理,然后INVITE消息經(jīng)過Proxy路由轉(zhuǎn)發(fā)到被叫方,被叫方回復(fù)100 Trying 和180 Ringing響鈴,被叫方接聽回復(fù)200 OK,主叫方回復(fù)ACK,會話建立。要結(jié)束會話時,其中一方發(fā)送BYE消息,另外一方回復(fù)200 OK。
二、B2BUA服務(wù)器介紹
按照RFC 3261中的定義,B2BUA是一個邏輯實體,它就像UAS一樣接收和處理請求。為了決定該如何應(yīng)答一個請求,B2BUA又像UAC一樣工作,并且發(fā)出請求。但是它不像Proxy,它維持對話狀態(tài),并且參與已經(jīng)建立的對話中的每一個請求。
B2BUA系統(tǒng)主要由三個邏輯單元組成,兩個UA和一個會話控制邏輯單元;邏輯單元之間通過事件進行交互,每一個UA代表著一個狀態(tài)機,它從終端接收消息,并根據(jù)接收到消息的類型和當前UA的狀態(tài)觸發(fā)相應(yīng)事件。而會話控制邏輯單元充當橋梁,它根據(jù)自己當前的狀態(tài)和每個UA之間的狀態(tài),在UA之間傳遞相應(yīng)事件。因此,本文使用B2BUA實現(xiàn)SIP服務(wù)器。
三、B2BUA服務(wù)器設(shè)計框架
B2BUA服務(wù)器總體設(shè)計的框架如圖1所示,設(shè)計結(jié)構(gòu)從上到下分為事務(wù)用戶層、事務(wù)層、傳輸層。傳輸層定義服務(wù)器如何接收請求和發(fā)送應(yīng)答。事務(wù)層處理應(yīng)用層的重發(fā)、匹配請求的應(yīng)答以及應(yīng)用層的超時。在事務(wù)層之上是事務(wù)用戶,每次它發(fā)送一個請求就創(chuàng)建一個客戶事務(wù)實例并且和請求一起發(fā)送。事務(wù)用戶可以創(chuàng)建事務(wù)也可以取消事務(wù)。
服務(wù)器架構(gòu)中的數(shù)據(jù)庫存儲本地的用戶信息;WebThread對數(shù)據(jù)庫進行配置,包括添加刪除用戶等;事務(wù)層中的TransactionConTroller負責與事務(wù)用戶層進行交互,TransportSeletor負責跟傳輸層的交互;事務(wù)用戶層中的Register處理用戶注冊消息,B2B模塊則是B2BUA服務(wù)器設(shè)計的核心,它負責處理會話的消息,包括會話的建立會話的拆除等。因此,它的合理設(shè)計對服務(wù)器的性能有很大的影響,所以B2B模塊采用多線程的設(shè)計模式,包含兩個線程,一個是MyDUMThread,一個是B2BCallThread。這兩個線程的同步并發(fā)處理實現(xiàn)了服務(wù)器優(yōu)越的性能。
四、服務(wù)器性能測試
SIPp是一個測試SIP協(xié)議性能的工具軟件。它是一個GPL的開放源碼軟件。首先,SIPp包含了一些基本的用戶代理工作流程(UAC和UAS),并可使用INVITE和BYE建立和釋放多個呼叫。統(tǒng)計服務(wù)器性能數(shù)據(jù),包括:呼叫速率、信號來回的延遲,以及消息統(tǒng)計等。另外,SIPp實現(xiàn)對許多實際的SIP設(shè)備的自動測試,如對SIP代理服務(wù)器、B2BUA服務(wù)器等設(shè)備的測試,檢測所開發(fā)設(shè)備是否達到設(shè)計要求,幫助開發(fā)人員及時發(fā)現(xiàn)設(shè)計中存在的問題。
SIP B2BUA的測試環(huán)境如圖2所示。服務(wù)器的PC機硬件配置是:Intel(R) Xeon(R) CPU E3-1240 v2 @ 3.4 GHz、 2.0 GB的內(nèi)存物理地址擴展、Broadcon NetXtreme Gigabit Ethernet網(wǎng)卡。操作系統(tǒng)采用Ubuntu 12.04。UAC與UAS處理消息的機制是:UAC給服務(wù)器發(fā)送INVITE,然后會等待服務(wù)器回復(fù)的180 Ringing和200 OK,當收到200 OK之后,UAC給服務(wù)器發(fā)送ACK,此時UAC啟動2000ms定時器,模擬RTP傳輸。2000ms之后,UAC給服務(wù)器發(fā)BYE。當收到服務(wù)器回復(fù)200 OK,表明一個完整的會話呼叫建立和終止過程就此結(jié)束。而UAS是首先等待服務(wù)器發(fā)過來的INVITE消息,當接收到INVITE消息時,給服務(wù)器回復(fù)180 Ringing,再回復(fù)200 OK。然后繼續(xù)等待服務(wù)器發(fā)過來的ACK及BYE消息,收到BYE后給服務(wù)器回復(fù)200 OK,這樣UAS一個完整的呼叫過程建立和結(jié)束會話也結(jié)束了。最后測得服務(wù)器的最大負載是110cps,也就是說服務(wù)器可以處理的最大能力是終端每秒鐘110個INVITE消息請求。
五、結(jié)論
文章從SIP的基本原理出發(fā),說明Proxy只是事務(wù)有狀態(tài)的,因此它不具備很多B2BUA服務(wù)器的特性,這對實現(xiàn)服務(wù)器增值業(yè)務(wù)功能非常不利?;谶@個原因,文章詳細闡述了B2BUA服務(wù)器的設(shè)計,并對服務(wù)器做了測試,證明實現(xiàn)了服務(wù)器優(yōu)越的性能。
參 考 文 獻
[1] J.Rosenberg,H.Schulzrinne,G.Canarillo etal,SIP:session Initiation Protocol,RFC 3261,December,2002
[2] 黃永鋒,李建慶等. 下一代網(wǎng)絡(luò)核心控制協(xié)議-SIP及其應(yīng)用[M]. 人民郵電出版社. 2009
[3] Trac.SIP B2BUA[EB/OL].[2012-3-20]. http://www.b2bua.org/wiki/B2BUADocumentation