首頁(yè)>>>技術(shù)>>>VoIP

P2P-SIP輕松實(shí)現(xiàn)多媒體會(huì)話

深圳市國(guó)人通信有限公司 胡明春 2006/12/08

  SIP協(xié)議憑借其簡(jiǎn)單、易于擴(kuò)展、便于實(shí)現(xiàn)等諸多優(yōu)點(diǎn)越來(lái)越得到業(yè)界的青睞,它正逐步成為NGN(下一代網(wǎng)絡(luò))和3G多媒體子系統(tǒng)域中的重要協(xié)議,本文針對(duì)SIP服務(wù)在部署中出現(xiàn)的“單點(diǎn)失效”和“性能瓶頸”等問(wèn)題給出了詳細(xì)的解決方案。

  針對(duì)SIP服務(wù)在部署中出現(xiàn)的“單點(diǎn)失效”和“性能瓶頸”問(wèn)題,提出了基于P2P技術(shù)的SIP服務(wù)網(wǎng)絡(luò)的結(jié)構(gòu)。這種結(jié)構(gòu)利用現(xiàn)有SIP設(shè)施,只做部分升級(jí)就能提供非常優(yōu)越的性能。文中給出了實(shí)現(xiàn)方案并重點(diǎn)分析了P2P-SIP網(wǎng)絡(luò)處理注冊(cè)和呼叫的流程。并介紹了P2P技術(shù)、Chord協(xié)議和互聯(lián)網(wǎng)工程任務(wù)組IETF在P2P-SIP方面的研究進(jìn)展。

SIP服務(wù)現(xiàn)狀

  SIP (Session Initiation Protocol,會(huì)話初始化協(xié)議)是在Internet節(jié)點(diǎn)間建立多媒體會(huì)話的控制信令,由IETF制定。SIP協(xié)議簡(jiǎn)單、可擴(kuò)展性強(qiáng),被很多互聯(lián)網(wǎng)電話業(yè)務(wù)采用,成為VoIP的兩大協(xié)議之一。VoIP是下一代互聯(lián)網(wǎng)(NGN)的重要組成部分,因?yàn)榭梢蕴峁└S富的業(yè)務(wù)和更低廉的通話費(fèi)用,最近幾年發(fā)展迅猛。據(jù)iResearch 整理的資料顯示,2004年全球VoIP 服務(wù)市場(chǎng)規(guī)模已經(jīng)達(dá)到35 億美元,在未來(lái)兩年仍將呈現(xiàn)高速增長(zhǎng)的趨勢(shì),預(yù)計(jì)2008年市場(chǎng)規(guī)模將達(dá)到210 億美元。

  在用戶高速增長(zhǎng)的同時(shí),現(xiàn)有的SIP服務(wù)器也普遍反映出一些不足:“單點(diǎn)失效”和“性能瓶頸”問(wèn)題。SIP按域劃分用戶(比如ccw.com.cn就是一個(gè)域,而www.ccw.com.cn就是該域內(nèi)提供網(wǎng)頁(yè)瀏覽的一臺(tái)www服務(wù)器),每個(gè)域有一臺(tái)SIP服務(wù)器,用戶連上本域的服務(wù)器。如果用戶所在域的服務(wù)器宕機(jī),用戶就不能使用SIP服務(wù)。這就是所謂的“單點(diǎn)失效”問(wèn)題。當(dāng)某個(gè)域內(nèi)的用戶數(shù)目龐大時(shí),單臺(tái)服務(wù)器就會(huì)性能不足。如果使用多臺(tái)服務(wù)器,為維護(hù)服務(wù)器之間的一致性又會(huì)增加配置的復(fù)雜性和增大性能損耗,性能提升十分有限。這就是所謂的“性能瓶頸”問(wèn)題。

  Skype使用P2P(Point to Point,點(diǎn)對(duì)點(diǎn))機(jī)制解決了這兩個(gè)問(wèn)題。Skype網(wǎng)絡(luò)把節(jié)點(diǎn)分為超級(jí)和普通兩種。超級(jí)節(jié)點(diǎn)通過(guò)P2P機(jī)制互聯(lián),為普通節(jié)點(diǎn)提供注冊(cè)服務(wù)。當(dāng)超級(jí)節(jié)點(diǎn)失效時(shí),它所管理的普通節(jié)點(diǎn)會(huì)注冊(cè)到其他超級(jí)節(jié)點(diǎn)上,避免了“單點(diǎn)失效”。當(dāng)網(wǎng)絡(luò)處理能力不夠時(shí),部分普通節(jié)點(diǎn)會(huì)轉(zhuǎn)換成超級(jí)節(jié)點(diǎn)以增大網(wǎng)絡(luò)容量,打破了“性能瓶頸”?窟@種結(jié)構(gòu),Skype做到了全球注冊(cè)用戶超過(guò)1億,同時(shí)在線人數(shù)突破700萬(wàn)?上kype使用私有協(xié)議,無(wú)法接入市場(chǎng)上大量的VoIP設(shè)備。

  Skype的成功,使得IETF開(kāi)始借鑒P2P的機(jī)制來(lái)提升SIP。威廉瑪麗學(xué)院的David A. Brayn就提出了擴(kuò)展SIP的Register請(qǐng)求,將其用做P2P的信令。P2P的優(yōu)點(diǎn)是沒(méi)有中心服務(wù)器,節(jié)點(diǎn)間分擔(dān)負(fù)載。沒(méi)有中心服務(wù)器,就不會(huì)“單點(diǎn)失效”;節(jié)點(diǎn)間分擔(dān)負(fù)載,增加節(jié)點(diǎn)就能迅速增大系統(tǒng)容量。而且在P2P中,增加節(jié)點(diǎn)的操作幾乎是“零配置”的。

P2P-SIP網(wǎng)絡(luò)的結(jié)構(gòu)

  在IETF的設(shè)想中,每個(gè)SIP節(jié)點(diǎn)同時(shí)也是P2P節(jié)點(diǎn)。節(jié)點(diǎn)間地位平等,沒(méi)有普通節(jié)點(diǎn)和超級(jí)節(jié)點(diǎn)的差別。這種設(shè)計(jì)要求現(xiàn)有SIP設(shè)備做重大改動(dòng),而且無(wú)法將SIP服務(wù)做商業(yè)化運(yùn)營(yíng)。而本文的設(shè)計(jì)充分考慮到SIP服務(wù)的商業(yè)化和電信級(jí)運(yùn)營(yíng),不需要改動(dòng)現(xiàn)有VoIP終端設(shè)備,只對(duì)現(xiàn)有SIP服務(wù)器的軟件做改動(dòng),而且改動(dòng)很小。為區(qū)別于傳統(tǒng)的SIP服務(wù)器,本文把P2P化的SIP服務(wù)器叫做P2P-SIP Node,簡(jiǎn)稱PN。具體的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。



  在P2P-SIP網(wǎng)絡(luò)中,原來(lái)管理一個(gè)域的單臺(tái)服務(wù)器變成多臺(tái)PN,PN之間通過(guò)P2P機(jī)制互聯(lián),彼此分擔(dān)負(fù)載。PN可以承擔(dān)原來(lái)服務(wù)中壓力最大的部分,比如注冊(cè)、代理和計(jì)費(fèi)。用戶連接到任一PN,都可以有效使用服務(wù)。部分PN下線或故障不會(huì)影響到P2P-SIP網(wǎng)絡(luò)的正常運(yùn)行。要擴(kuò)大P2P-SIP網(wǎng)絡(luò)的容量,加入新的PN就可以了。

  PN在地理上散布各處,邏輯上根據(jù)選用的P2P機(jī)制的不同可以是環(huán)形的(Chord協(xié)議)、矩陣的(CAN協(xié)議)、網(wǎng)狀的(Pastry協(xié)議和Tapestry協(xié)議);镜腜N至少包括注冊(cè)和代理兩種功能。為進(jìn)行商業(yè)運(yùn)營(yíng),可以部署全局認(rèn)證服務(wù)器、全局賬務(wù)服務(wù)器和網(wǎng)管服務(wù)器等等,用于管理全部的用戶和所有的PN。

  新的服務(wù)比如語(yǔ)音和視頻會(huì)議、語(yǔ)音郵箱、PSTN落地(即呼叫座機(jī)和手機(jī))、自動(dòng)和人工語(yǔ)音應(yīng)答可以部署在PN上,也可以作為單臺(tái)服務(wù)器或服務(wù)器網(wǎng)絡(luò)的形式接入P2P-SIP網(wǎng)絡(luò)。

P2P-SIP網(wǎng)絡(luò)的實(shí)現(xiàn)

1. PN的結(jié)構(gòu)

  PN分為兩層。上面是SIP層,處理標(biāo)準(zhǔn)的SIP信令;下面是P2P層,使用特定的機(jī)制(本文的設(shè)計(jì)選用Chord協(xié)議)互聯(lián)各個(gè)PN的P2P層并維持它們之間的聯(lián)系。P2P層提供給SIP層的應(yīng)用程序編程接口(API)只有函數(shù)find_responsible_pn(user),該函數(shù)返回負(fù)責(zé)管理該user的PN的IP地址和端口。由于P2P-SIP網(wǎng)絡(luò)是動(dòng)態(tài)的,所以負(fù)責(zé)管理某個(gè)用戶的PN在不同時(shí)段可能是不同的。

  首先講一講Chord基礎(chǔ)知識(shí),Chord是結(jié)構(gòu)化的overlay。所謂overlay,是指P2P系統(tǒng)在物理連接的基礎(chǔ)上構(gòu)建的邏輯網(wǎng)絡(luò)。而結(jié)構(gòu)化的overlay,是指在overlay中,特定的資源由特定的節(jié)點(diǎn)管理;當(dāng)查詢?cè)撡Y源時(shí),根據(jù)某種路由規(guī)則,找到管理該資源的特定節(jié)點(diǎn)。Chord使用SHA-1哈希算法,哈希值為m個(gè)比特。共有2m個(gè)可能值分布在圓周上,稱做Chord環(huán),如圖2所示。



  圖中N表示節(jié)點(diǎn),N后的數(shù)字是該節(jié)點(diǎn)的哈希值,一般通過(guò)哈希節(jié)點(diǎn)的IP地址得到。K表示資源,K后的數(shù)字是該資源的哈希值。Chord用在SIP中時(shí),K應(yīng)該是SIP URI,例如sip:humingchunno1@163.com。在Chord中,每個(gè)節(jié)點(diǎn)都負(fù)責(zé)管理一段哈?臻g——順時(shí)針?lè)较蛏现耙粋(gè)節(jié)點(diǎn)到自己的范圍,哈希值落在該空間中的資源K的信息由本節(jié)點(diǎn)保存。例如節(jié)點(diǎn)N32就負(fù)責(zé)管理資源K24和K30的信息(圖2中指向N32的實(shí)線箭頭所示)。

  當(dāng)某個(gè)節(jié)點(diǎn)比如N8要詢問(wèn)資源K30的信息時(shí),N8首先要找到負(fù)責(zé)管理K30的節(jié)點(diǎn)N32。最簡(jiǎn)單的做法是N8詢問(wèn)順時(shí)針?lè)较蛏献约汉竺娴哪莻(gè)節(jié)點(diǎn),稱做N8的successor,即N14。如果N14不負(fù)責(zé)K30,則N14詢問(wèn)自己的successor,即N21。該操作反復(fù)進(jìn)行,直至找到負(fù)責(zé)K30的節(jié)點(diǎn)N32為止。

  這種查詢機(jī)制只要求節(jié)點(diǎn)知道順時(shí)針?lè)较蛏献约汉竺婺莻(gè)節(jié)點(diǎn)的位置(自己的successor),查詢效率低,花費(fèi)的平均時(shí)間是函數(shù)O(N/2)的值,N是Chord環(huán)的實(shí)際節(jié)點(diǎn)數(shù)。為提高查詢效率,Chord中每個(gè)節(jié)點(diǎn)除了記錄successor和predecessor(順時(shí)針?lè)较蛏献约呵懊娴哪莻(gè)節(jié)點(diǎn))外,還要記錄m個(gè)其他節(jié)點(diǎn)。這m個(gè)節(jié)點(diǎn)由successor(n+2i-1)確定,其中n是本節(jié)點(diǎn)的哈希值,i是1到m間的整數(shù)。m個(gè)節(jié)點(diǎn)的集合就是finger表(圖2中給出N8的finger表)。這種方式下查詢資源花費(fèi)的平均時(shí)間為O(logN)。

  新節(jié)點(diǎn),例如圖2中的N26,要加入Chord環(huán)時(shí),先詢問(wèn)自己知道的Chord中任一節(jié)點(diǎn),假定為N8。N8通過(guò)查詢,發(fā)現(xiàn)N26的successor是N32,告知N26。N26得知后把successor設(shè)為N32,并通告N32自己的存在。N32得知后把predecessor設(shè)為N26,并把K24交由N26管理。N26則完成加入。

  Chord中每個(gè)節(jié)點(diǎn)都要周期性地更新自己的successor、predecessor和finger表,以保證快速正確的查詢。理論的計(jì)算和實(shí)際的模擬顯示,Chord的容錯(cuò)性很強(qiáng),當(dāng)網(wǎng)絡(luò)中50%的節(jié)點(diǎn)故障時(shí),查詢失敗的機(jī)率也只有1.3%。

2. P2P-SIP網(wǎng)絡(luò)的形成和維護(hù)

  在PN的配置文件中應(yīng)該有一個(gè)配置項(xiàng),其值是“IP地址:端口”或“域名:端口”的形式。存在多個(gè)值時(shí),之間用空格分開(kāi)。其值也可以為空,表示本PN是P2P-SIP網(wǎng)絡(luò)的第一個(gè)節(jié)點(diǎn)。值格式錯(cuò)誤時(shí),忽略該值。

  PN啟動(dòng)時(shí),如果發(fā)現(xiàn)配置項(xiàng)的值為空,PN的Chord層就新建一個(gè)Chord環(huán)。如果配置項(xiàng)存在一個(gè)或多個(gè)值,Chord層就依次向這些值發(fā)請(qǐng)求直至收到成功應(yīng)答。如果最終沒(méi)有收到成功應(yīng)答,就提示錯(cuò)誤或者新建一個(gè)Chord環(huán)。PN進(jìn)入P2P-SIP網(wǎng)絡(luò)后,即PN的Chord層加入到Chord環(huán)中,需要從其successor處拷貝一份用戶注冊(cè)信息。

  PN正常退出P2P-SIP網(wǎng)絡(luò)時(shí),需要將自己管理的用戶注冊(cè)信息發(fā)給自己的successor。非正常退出時(shí),P2P-SIP網(wǎng)絡(luò)會(huì)暫時(shí)丟失部分用戶的注冊(cè)信息。為保證注冊(cè)過(guò)的用戶始終可達(dá),可以讓PN周期性地將它管理的用戶注冊(cè)信息通告自己的successor,甚至successor的successor。

  P2P-SIP網(wǎng)絡(luò)的維護(hù)是PN的Chord層來(lái)做的。每個(gè)PN的Chord層都周期性地更新自己的successor、predecessor和finger表,從而及時(shí)地了解網(wǎng)絡(luò)的變化。

3. 請(qǐng)求處理過(guò)程

  按照RFC3261的規(guī)定,SIP服務(wù)器(主要指代理服務(wù)器)處理請(qǐng)求時(shí)與請(qǐng)求的方法無(wú)關(guān)。我們將SIP服務(wù)器改造成PN時(shí)增加的步驟也應(yīng)該是與方法無(wú)關(guān)的。下面我們通過(guò)詳細(xì)描述用戶的注冊(cè)和呼叫,來(lái)展示P2P-SIP網(wǎng)絡(luò)中PN處理請(qǐng)求的過(guò)程,并表明增加的步驟與方法無(wú)關(guān)。

用戶注冊(cè)過(guò)程

  對(duì)用戶而言,注冊(cè)到P2P-SIP網(wǎng)絡(luò)的過(guò)程和注冊(cè)到SIP網(wǎng)絡(luò)的過(guò)程是相同的。只是在P2P-SIP網(wǎng)絡(luò)中,PN收到注冊(cè)請(qǐng)求時(shí),并不立即記錄該條注冊(cè)信息,而是先調(diào)用函數(shù)find_responsible_pn(user)。如果返回的地址是PN自己,這才記錄下用戶注冊(cè)信息;如果返回的地址是其他PN,則PN會(huì)把注冊(cè)請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的PN。最終,注冊(cè)請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到負(fù)責(zé)處理它的PN處,處理后產(chǎn)生的應(yīng)答按原路返回。

  考慮到減輕PN轉(zhuǎn)發(fā)請(qǐng)求和記錄事務(wù)狀態(tài)的負(fù)擔(dān),PN收到不該自己負(fù)責(zé)的注冊(cè)請(qǐng)求時(shí),可以返回301 Moved Permanently應(yīng)答。而把調(diào)用find_responsible_pn(user)得到的地址放在應(yīng)答的Contact頭域中,具體的注冊(cè)過(guò)程如圖3所示。

用戶呼叫過(guò)程

  對(duì)用戶而言,在P2P-SIP網(wǎng)絡(luò)中發(fā)起呼叫與在SIP網(wǎng)絡(luò)中發(fā)起呼叫相比沒(méi)什么不同。構(gòu)造標(biāo)準(zhǔn)的INVITE請(qǐng)求,發(fā)給自己連接的PN(SIP服務(wù)器),然后等待應(yīng)答。

  在P2P-SIP網(wǎng)絡(luò)中,PN收到INVITE請(qǐng)求,進(jìn)行必要處理后,取出請(qǐng)求中To頭域里的SIP URI(表示呼叫哪個(gè)用戶),調(diào)用find_responsible_pn(user)。如果返回值是PN自己,說(shuō)明PN負(fù)責(zé)管理To頭域所標(biāo)識(shí)的用戶,PN具有該用戶的注冊(cè)信息,之后的處理按SIP標(biāo)準(zhǔn)流程; 如果不是,則PN將INVITE請(qǐng)求轉(zhuǎn)發(fā)給find_responsible_pn(user)返回的“IP地址:端口”,具體的呼叫過(guò)程如圖4所示。


  按照本文所述的設(shè)計(jì)和實(shí)現(xiàn)方案,對(duì)原有的SIP軟交換平臺(tái)進(jìn)行改造,在PN上實(shí)現(xiàn)了注冊(cè)、呼叫和計(jì)費(fèi)功能。原來(lái)的語(yǔ)音郵箱和自動(dòng)應(yīng)答功能作為單臺(tái)媒體服務(wù)器接入P2P-SIP網(wǎng)絡(luò),在P2P-SIP網(wǎng)絡(luò)內(nèi)提供全局的用戶認(rèn)證、撥號(hào)策略、賬務(wù)系統(tǒng)和網(wǎng)管服務(wù)。

  基本的測(cè)試顯示,5臺(tái)處理能力為72萬(wàn)次/小時(shí)BHCA(中文叫忙時(shí)試呼次數(shù),是電信領(lǐng)域用來(lái)衡量服務(wù)器處理能力的重要指標(biāo),注冊(cè)用戶數(shù)在電信領(lǐng)域指的就是座機(jī)的數(shù)目)的普通PC機(jī)組成P2P-SIP網(wǎng)絡(luò)后其BHCA可以達(dá)到288萬(wàn)次/小時(shí),支持的注冊(cè)用戶數(shù)達(dá)48萬(wàn)。

鏈接:SIP協(xié)議介紹

  會(huì)話發(fā)起協(xié)議SIP(Session Initiation Protocol)是IETF制定的多媒體通信系統(tǒng)框架協(xié)議之一,它是一個(gè)基于文本的應(yīng)用層控制協(xié)議,獨(dú)立于底層協(xié)議,用于建立、修改和終止IP網(wǎng)上的雙方或多方多媒體會(huì)話。SIP協(xié)議借鑒了HTTP、SMTP等協(xié)議,支持代理、重定向、登記定位用戶等功能。支持用戶移動(dòng),與RTP/RTCP、SDP、 RTSP、DNS等協(xié)議配合。支持Voice、Video、Data、Email、Presence、IM、Chat、Game等。

  正如其名字所隱含的,SIP用于發(fā)起會(huì)話,它能控制多個(gè)參與者參加的多媒體會(huì)話的建立和終結(jié),并能動(dòng)態(tài)調(diào)整和修改會(huì)話屬性,如會(huì)話帶寬要求、傳輸?shù)拿襟w類型(語(yǔ)音、視頻和數(shù)據(jù)等)、媒體的編解碼格式、對(duì)組播和單播的支持等。

  SIP協(xié)議憑借其簡(jiǎn)單、易于擴(kuò)展、便于實(shí)現(xiàn)等諸多優(yōu)點(diǎn)越來(lái)越得到業(yè)界的青睞,它正逐步成為NGN(下一代網(wǎng)絡(luò))和3G多媒體子系統(tǒng)域中的重要協(xié)議,并且市場(chǎng)上出現(xiàn)越來(lái)越多的支持SIP的客戶端軟件和智能多媒體終端,以及用SIP協(xié)議實(shí)現(xiàn)的服務(wù)器和軟交換設(shè)備!

計(jì)算機(jī)世界網(wǎng)(www.ccw.com.cn)



相關(guān)鏈接:
統(tǒng)一通信市場(chǎng)烽煙起 思科與微軟關(guān)系日漸微妙 2006-12-08
打破ISP限制 實(shí)現(xiàn)企業(yè)內(nèi)VoIP通訊 2006-12-08
華為3Com:教企業(yè)從TDM過(guò)渡到IP電話網(wǎng) 2006-12-08
了解Asterisk軟電話工具 2006-12-08
了解IP專用分組交換機(jī) 2006-12-07

分類信息: