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