P2P-SIP輕松實(shí)現多媒體會(huì )話(huà)
深圳市國人通信有限公司 胡明春 2006/12/08
SIP協(xié)議憑借其簡(jiǎn)單、易于擴展、便于實(shí)現等諸多優(yōu)點(diǎn)越來(lái)越得到業(yè)界的青睞,它正逐步成為NGN(下一代網(wǎng)絡(luò ))和3G多媒體子系統域中的重要協(xié)議,本文針對SIP服務(wù)在部署中出現的“單點(diǎn)失效”和“性能瓶頸”等問(wèn)題給出了詳細的解決方案。
針對SIP服務(wù)在部署中出現的“單點(diǎn)失效”和“性能瓶頸”問(wèn)題,提出了基于P2P技術(shù)的SIP服務(wù)網(wǎng)絡(luò )的結構。這種結構利用現有SIP設施,只做部分升級就能提供非常優(yōu)越的性能。文中給出了實(shí)現方案并重點(diǎn)分析了P2P-SIP網(wǎng)絡(luò )處理注冊和呼叫的流程。并介紹了P2P技術(shù)、Chord協(xié)議和互聯(lián)網(wǎng)工程任務(wù)組IETF在P2P-SIP方面的研究進(jìn)展。
SIP服務(wù)現狀
SIP (Session Initiation Protocol,會(huì )話(huà)初始化協(xié)議)是在Internet節點(diǎn)間建立多媒體會(huì )話(huà)的控制信令,由IETF制定。SIP協(xié)議簡(jiǎn)單、可擴展性強,被很多互聯(lián)網(wǎng)電話(huà)業(yè)務(wù)采用,成為VoIP的兩大協(xié)議之一。VoIP是下一代互聯(lián)網(wǎng)(NGN)的重要組成部分,因為可以提供更豐富的業(yè)務(wù)和更低廉的通話(huà)費用,最近幾年發(fā)展迅猛。據iResearch 整理的資料顯示,2004年全球VoIP 服務(wù)市場(chǎng)規模已經(jīng)達到35 億美元,在未來(lái)兩年仍將呈現高速增長(cháng)的趨勢,預計2008年市場(chǎng)規模將達到210 億美元。
在用戶(hù)高速增長(cháng)的同時(shí),現有的SIP服務(wù)器也普遍反映出一些不足:“單點(diǎn)失效”和“性能瓶頸”問(wèn)題。SIP按域劃分用戶(hù)(比如ccw.com.cn就是一個(gè)域,而www.ccw.com.cn就是該域內提供網(wǎng)頁(yè)瀏覽的一臺www服務(wù)器),每個(gè)域有一臺SIP服務(wù)器,用戶(hù)連上本域的服務(wù)器。如果用戶(hù)所在域的服務(wù)器宕機,用戶(hù)就不能使用SIP服務(wù)。這就是所謂的“單點(diǎn)失效”問(wèn)題。當某個(gè)域內的用戶(hù)數目龐大時(shí),單臺服務(wù)器就會(huì )性能不足。如果使用多臺服務(wù)器,為維護服務(wù)器之間的一致性又會(huì )增加配置的復雜性和增大性能損耗,性能提升十分有限。這就是所謂的“性能瓶頸”問(wèn)題。
Skype使用P2P(Point to Point,點(diǎn)對點(diǎn))機制解決了這兩個(gè)問(wèn)題。Skype網(wǎng)絡(luò )把節點(diǎn)分為超級和普通兩種。超級節點(diǎn)通過(guò)P2P機制互聯(lián),為普通節點(diǎn)提供注冊服務(wù)。當超級節點(diǎn)失效時(shí),它所管理的普通節點(diǎn)會(huì )注冊到其他超級節點(diǎn)上,避免了“單點(diǎn)失效”。當網(wǎng)絡(luò )處理能力不夠時(shí),部分普通節點(diǎn)會(huì )轉換成超級節點(diǎn)以增大網(wǎng)絡(luò )容量,打破了“性能瓶頸”。靠這種結構,Skype做到了全球注冊用戶(hù)超過(guò)1億,同時(shí)在線(xiàn)人數突破700萬(wàn)。可惜Skype使用私有協(xié)議,無(wú)法接入市場(chǎng)上大量的VoIP設備。
Skype的成功,使得IETF開(kāi)始借鑒P2P的機制來(lái)提升SIP。威廉瑪麗學(xué)院的David A. Brayn就提出了擴展SIP的Register請求,將其用做P2P的信令。P2P的優(yōu)點(diǎn)是沒(méi)有中心服務(wù)器,節點(diǎn)間分擔負載。沒(méi)有中心服務(wù)器,就不會(huì )“單點(diǎn)失效”;節點(diǎn)間分擔負載,增加節點(diǎn)就能迅速增大系統容量。而且在P2P中,增加節點(diǎn)的操作幾乎是“零配置”的。
P2P-SIP網(wǎng)絡(luò )的結構
在IETF的設想中,每個(gè)SIP節點(diǎn)同時(shí)也是P2P節點(diǎn)。節點(diǎn)間地位平等,沒(méi)有普通節點(diǎn)和超級節點(diǎn)的差別。這種設計要求現有SIP設備做重大改動(dòng),而且無(wú)法將SIP服務(wù)做商業(yè)化運營(yíng)。而本文的設計充分考慮到SIP服務(wù)的商業(yè)化和電信級運營(yíng),不需要改動(dòng)現有VoIP終端設備,只對現有SIP服務(wù)器的軟件做改動(dòng),而且改動(dòng)很小。為區別于傳統的SIP服務(wù)器,本文把P2P化的SIP服務(wù)器叫做P2P-SIP Node,簡(jiǎn)稱(chēng)PN。具體的網(wǎng)絡(luò )結構如圖1所示。

在P2P-SIP網(wǎng)絡(luò )中,原來(lái)管理一個(gè)域的單臺服務(wù)器變成多臺PN,PN之間通過(guò)P2P機制互聯(lián),彼此分擔負載。PN可以承擔原來(lái)服務(wù)中壓力最大的部分,比如注冊、代理和計費。用戶(hù)連接到任一PN,都可以有效使用服務(wù)。部分PN下線(xiàn)或故障不會(huì )影響到P2P-SIP網(wǎng)絡(luò )的正常運行。要擴大P2P-SIP網(wǎng)絡(luò )的容量,加入新的PN就可以了。
PN在地理上散布各處,邏輯上根據選用的P2P機制的不同可以是環(huán)形的(Chord協(xié)議)、矩陣的(CAN協(xié)議)、網(wǎng)狀的(Pastry協(xié)議和Tapestry協(xié)議)。基本的PN至少包括注冊和代理兩種功能。為進(jìn)行商業(yè)運營(yíng),可以部署全局認證服務(wù)器、全局賬務(wù)服務(wù)器和網(wǎng)管服務(wù)器等等,用于管理全部的用戶(hù)和所有的PN。
新的服務(wù)比如語(yǔ)音和視頻會(huì )議、語(yǔ)音郵箱、PSTN落地(即呼叫座機和手機)、自動(dòng)和人工語(yǔ)音應答可以部署在PN上,也可以作為單臺服務(wù)器或服務(wù)器網(wǎng)絡(luò )的形式接入P2P-SIP網(wǎng)絡(luò )。
P2P-SIP網(wǎng)絡(luò )的實(shí)現
1. PN的結構
PN分為兩層。上面是SIP層,處理標準的SIP信令;下面是P2P層,使用特定的機制(本文的設計選用Chord協(xié)議)互聯(lián)各個(gè)PN的P2P層并維持它們之間的聯(lián)系。P2P層提供給SIP層的應用程序編程接口(API)只有函數find_responsible_pn(user),該函數返回負責管理該user的PN的IP地址和端口。由于P2P-SIP網(wǎng)絡(luò )是動(dòng)態(tài)的,所以負責管理某個(gè)用戶(hù)的PN在不同時(shí)段可能是不同的。
首先講一講Chord基礎知識,Chord是結構化的overlay。所謂overlay,是指P2P系統在物理連接的基礎上構建的邏輯網(wǎng)絡(luò )。而結構化的overlay,是指在overlay中,特定的資源由特定的節點(diǎn)管理;當查詢(xún)該資源時(shí),根據某種路由規則,找到管理該資源的特定節點(diǎn)。Chord使用SHA-1哈希算法,哈希值為m個(gè)比特。共有2m個(gè)可能值分布在圓周上,稱(chēng)做Chord環(huán),如圖2所示。

圖中N表示節點(diǎn),N后的數字是該節點(diǎn)的哈希值,一般通過(guò)哈希節點(diǎn)的IP地址得到。K表示資源,K后的數字是該資源的哈希值。Chord用在SIP中時(shí),K應該是SIP URI,例如sip:humingchunno1@163.com。在Chord中,每個(gè)節點(diǎn)都負責管理一段哈希空間——順時(shí)針?lè )较蛏现耙粋(gè)節點(diǎn)到自己的范圍,哈希值落在該空間中的資源K的信息由本節點(diǎn)保存。例如節點(diǎn)N32就負責管理資源K24和K30的信息(圖2中指向N32的實(shí)線(xiàn)箭頭所示)。
當某個(gè)節點(diǎn)比如N8要詢(xún)問(wèn)資源K30的信息時(shí),N8首先要找到負責管理K30的節點(diǎn)N32。最簡(jiǎn)單的做法是N8詢(xún)問(wèn)順時(shí)針?lè )较蛏献约汉竺娴哪莻(gè)節點(diǎn),稱(chēng)做N8的successor,即N14。如果N14不負責K30,則N14詢(xún)問(wèn)自己的successor,即N21。該操作反復進(jìn)行,直至找到負責K30的節點(diǎn)N32為止。
這種查詢(xún)機制只要求節點(diǎn)知道順時(shí)針?lè )较蛏献约汉竺婺莻(gè)節點(diǎn)的位置(自己的successor),查詢(xún)效率低,花費的平均時(shí)間是函數O(N/2)的值,N是Chord環(huán)的實(shí)際節點(diǎn)數。為提高查詢(xún)效率,Chord中每個(gè)節點(diǎn)除了記錄successor和predecessor(順時(shí)針?lè )较蛏献约呵懊娴哪莻(gè)節點(diǎn))外,還要記錄m個(gè)其他節點(diǎn)。這m個(gè)節點(diǎn)由successor(n+2i-1)確定,其中n是本節點(diǎn)的哈希值,i是1到m間的整數。m個(gè)節點(diǎn)的集合就是finger表(圖2中給出N8的finger表)。這種方式下查詢(xún)資源花費的平均時(shí)間為O(logN)。
新節點(diǎn),例如圖2中的N26,要加入Chord環(huán)時(shí),先詢(xún)問(wèn)自己知道的Chord中任一節點(diǎn),假定為N8。N8通過(guò)查詢(xún),發(fā)現N26的successor是N32,告知N26。N26得知后把successor設為N32,并通告N32自己的存在。N32得知后把predecessor設為N26,并把K24交由N26管理。N26則完成加入。
Chord中每個(gè)節點(diǎn)都要周期性地更新自己的successor、predecessor和finger表,以保證快速正確的查詢(xún)。理論的計算和實(shí)際的模擬顯示,Chord的容錯性很強,當網(wǎng)絡(luò )中50%的節點(diǎn)故障時(shí),查詢(xún)失敗的機率也只有1.3%。
2. P2P-SIP網(wǎng)絡(luò )的形成和維護
在PN的配置文件中應該有一個(gè)配置項,其值是“IP地址:端口”或“域名:端口”的形式。存在多個(gè)值時(shí),之間用空格分開(kāi)。其值也可以為空,表示本PN是P2P-SIP網(wǎng)絡(luò )的第一個(gè)節點(diǎn)。值格式錯誤時(shí),忽略該值。
PN啟動(dòng)時(shí),如果發(fā)現配置項的值為空,PN的Chord層就新建一個(gè)Chord環(huán)。如果配置項存在一個(gè)或多個(gè)值,Chord層就依次向這些值發(fā)請求直至收到成功應答。如果最終沒(méi)有收到成功應答,就提示錯誤或者新建一個(gè)Chord環(huán)。PN進(jìn)入P2P-SIP網(wǎng)絡(luò )后,即PN的Chord層加入到Chord環(huán)中,需要從其successor處拷貝一份用戶(hù)注冊信息。
PN正常退出P2P-SIP網(wǎng)絡(luò )時(shí),需要將自己管理的用戶(hù)注冊信息發(fā)給自己的successor。非正常退出時(shí),P2P-SIP網(wǎng)絡(luò )會(huì )暫時(shí)丟失部分用戶(hù)的注冊信息。為保證注冊過(guò)的用戶(hù)始終可達,可以讓PN周期性地將它管理的用戶(hù)注冊信息通告自己的successor,甚至successor的successor。
P2P-SIP網(wǎng)絡(luò )的維護是PN的Chord層來(lái)做的。每個(gè)PN的Chord層都周期性地更新自己的successor、predecessor和finger表,從而及時(shí)地了解網(wǎng)絡(luò )的變化。
3. 請求處理過(guò)程
按照RFC3261的規定,SIP服務(wù)器(主要指代理服務(wù)器)處理請求時(shí)與請求的方法無(wú)關(guān)。我們將SIP服務(wù)器改造成PN時(shí)增加的步驟也應該是與方法無(wú)關(guān)的。下面我們通過(guò)詳細描述用戶(hù)的注冊和呼叫,來(lái)展示P2P-SIP網(wǎng)絡(luò )中PN處理請求的過(guò)程,并表明增加的步驟與方法無(wú)關(guān)。
用戶(hù)注冊過(guò)程
對用戶(hù)而言,注冊到P2P-SIP網(wǎng)絡(luò )的過(guò)程和注冊到SIP網(wǎng)絡(luò )的過(guò)程是相同的。只是在P2P-SIP網(wǎng)絡(luò )中,PN收到注冊請求時(shí),并不立即記錄該條注冊信息,而是先調用函數find_responsible_pn(user)。如果返回的地址是PN自己,這才記錄下用戶(hù)注冊信息;如果返回的地址是其他PN,則PN會(huì )把注冊請求轉發(fā)給相應的PN。最終,注冊請求會(huì )被轉發(fā)到負責處理它的PN處,處理后產(chǎn)生的應答按原路返回。
考慮到減輕PN轉發(fā)請求和記錄事務(wù)狀態(tài)的負擔,PN收到不該自己負責的注冊請求時(shí),可以返回301 Moved Permanently應答。而把調用find_responsible_pn(user)得到的地址放在應答的Contact頭域中,具體的注冊過(guò)程如圖3所示。
- 第1步:終端發(fā)注冊請求
IP地址為192.168.13.63的SIP終端準備好REGISTER請求,發(fā)給P2P-SIP網(wǎng)絡(luò )中任一PN(比如Key為69的PN。在P2P-SIP中,Key值是通過(guò)哈希節點(diǎn)的IP地址和端口得到的)。如圖3中M1所示。

SIP終端可以通過(guò)多種方式獲得PN的IP地址和端口。比如用戶(hù)手動(dòng)指定,或者使用終端默認的PN,或者使用終端上次進(jìn)入P2P-SIP網(wǎng)絡(luò )時(shí)更新的PN列表。
- 第2步:PN轉發(fā)請求
Key值為69的PN收到REGISTER請求后,取得請求中To頭域里的SIP URI——表示注冊的信息屬于哪個(gè)用戶(hù),調用find_responsible_pn(user)。返回值應該是“IP地址∶端口”字符串的形式。將返回值同本機“IP地址∶端口”作比較,如果相同,說(shuō)明本機負責處理該請求,之后的處理流程遵循SIP標準;如果不同,就轉發(fā)REGISTER請求到該“IP地址∶端口”。
在本例中,SIP URI是michael@powercn.com,假定其哈希值是17,PN的Chord層會(huì )查找到負責處理該請求的PN Key值是32,find_responsible_pn(user)返回該PN的“IP地址∶端口”——192.168.13.110:5060。PN的SIP層比較該值發(fā)現不是自己,就將注冊請求轉發(fā)到該“IP地址∶端口”,如圖3中M2所示。
- 第3步:PN接受注冊,返回應答
Key值為32的PN收到REGISTER請求后,取得請求中To頭域里的SIP URI(michael@powercn.com),調用find_responsible_pn(user)。返回值是192.168.13.110:5060,比較后發(fā)現是自己,說(shuō)明自己負責管理該用戶(hù),負責處理該用戶(hù)的注冊請求。之后的處理流程遵循SIP標準。假定注冊成功,PN返回200 OK應答。如圖3中M3所示。應答的返回遵循SIP標準,根據Via頭域按原路返回,不需要查找路徑,不會(huì )使用Chord層的操作。
- 第4步:SIP終端收到應答,完成注冊
Key值為69的PN收到來(lái)自192.168.13.110的應答,按照SIP標準處理,把應答發(fā)給192.168.13.63:5060。如圖3中M4所示。SIP終端收到200 OK應答,完成注冊。
用戶(hù)呼叫過(guò)程
對用戶(hù)而言,在P2P-SIP網(wǎng)絡(luò )中發(fā)起呼叫與在SIP網(wǎng)絡(luò )中發(fā)起呼叫相比沒(méi)什么不同。構造標準的INVITE請求,發(fā)給自己連接的PN(SIP服務(wù)器),然后等待應答。
在P2P-SIP網(wǎng)絡(luò )中,PN收到INVITE請求,進(jìn)行必要處理后,取出請求中To頭域里的SIP URI(表示呼叫哪個(gè)用戶(hù)),調用find_responsible_pn(user)。如果返回值是PN自己,說(shuō)明PN負責管理To頭域所標識的用戶(hù),PN具有該用戶(hù)的注冊信息,之后的處理按SIP標準流程;
如果不是,則PN將INVITE請求轉發(fā)給find_responsible_pn(user)返回的“IP地址:端口”,具體的呼叫過(guò)程如圖4所示。

- 第1步:主叫發(fā)起呼叫
IP地址為192.168.13.26的用戶(hù)alice@powercn.com要呼叫用戶(hù)michael@powercn.com。alice可以把請求發(fā)給P2P-SIP網(wǎng)絡(luò )中任一PN。考慮到要在P2P-SIP網(wǎng)絡(luò )上提供增值業(yè)務(wù)(比如計費),alice把INVITE請求發(fā)給管理它的PN更合適一點(diǎn),在本例中是IP為192.168.13.203,Key值為0的PN。如圖4中M1所示。
- 第2步:PN轉發(fā)請求到PN
Key值為0的PN收到INVITE請求后,取得請求中To頭域里的SIP URI(michael@powercn.com),調用find_responsible_pn(user)。返回值是192.168.13.110:5060。比較后發(fā)現不是自己,將請求轉發(fā)給192.168.13.110:5060。如圖4中M2所示。
- 第3步:PN轉發(fā)請求到被叫
IP地址為192.168.13.110的PN收到該請求,進(jìn)行相同的處理。發(fā)現返回值是自己,說(shuō)明PN管理該用戶(hù),擁有該用戶(hù)的注冊請求。之后的處理流程遵循SIP標準,即在本地取得用戶(hù)michael的當前地址,然后轉發(fā)請求到該地址。如圖4中M3所示。
- 第4步:被叫接受呼叫,返回應答
用戶(hù)michael所在的SIP終端收到該請求,按照SIP標準進(jìn)行處理。假定michael接受呼叫請求,則返回200 OK應答。如圖4中M4所示。
- 第5步:應答沿原路返回
應答的返回遵循SIP標準,根據Via頭域按原路返回,不需要查找路徑,不會(huì )使用Chord層的操作。如圖4中M5、M6所示。
- 第6步:主叫收到應答,發(fā)出確認,建立呼叫
用戶(hù)alice所在的SIP終端收到200 OK應答,用ACK請求進(jìn)行確認。ACK請求不經(jīng)過(guò)P2P-SIP網(wǎng)絡(luò ),直接發(fā)給用戶(hù)michael所在的SIP終端。如圖4中M7所示。用戶(hù)michael所在的SIP終端收到ACK確認請求,呼叫建立。結束通話(huà)時(shí),michael和alice直接交換SIP信令,不經(jīng)過(guò)P2P-SIP網(wǎng)絡(luò )。
按照本文所述的設計和實(shí)現方案,對原有的SIP軟交換平臺進(jìn)行改造,在PN上實(shí)現了注冊、呼叫和計費功能。原來(lái)的語(yǔ)音郵箱和自動(dòng)應答功能作為單臺媒體服務(wù)器接入P2P-SIP網(wǎng)絡(luò ),在P2P-SIP網(wǎng)絡(luò )內提供全局的用戶(hù)認證、撥號策略、賬務(wù)系統和網(wǎng)管服務(wù)。
基本的測試顯示,5臺處理能力為72萬(wàn)次/小時(shí)BHCA(中文叫忙時(shí)試呼次數,是電信領(lǐng)域用來(lái)衡量服務(wù)器處理能力的重要指標,注冊用戶(hù)數在電信領(lǐng)域指的就是座機的數目)的普通PC機組成P2P-SIP網(wǎng)絡(luò )后其BHCA可以達到288萬(wàn)次/小時(shí),支持的注冊用戶(hù)數達48萬(wàn)。
鏈接:SIP協(xié)議介紹
會(huì )話(huà)發(fā)起協(xié)議SIP(Session Initiation Protocol)是IETF制定的多媒體通信系統框架協(xié)議之一,它是一個(gè)基于文本的應用層控制協(xié)議,獨立于底層協(xié)議,用于建立、修改和終止IP網(wǎng)上的雙方或多方多媒體會(huì )話(huà)。SIP協(xié)議借鑒了HTTP、SMTP等協(xié)議,支持代理、重定向、登記定位用戶(hù)等功能。支持用戶(hù)移動(dòng),與RTP/RTCP、SDP、 RTSP、DNS等協(xié)議配合。支持Voice、Video、Data、Email、Presence、IM、Chat、Game等。
正如其名字所隱含的,SIP用于發(fā)起會(huì )話(huà),它能控制多個(gè)參與者參加的多媒體會(huì )話(huà)的建立和終結,并能動(dòng)態(tài)調整和修改會(huì )話(huà)屬性,如會(huì )話(huà)帶寬要求、傳輸的媒體類(lèi)型(語(yǔ)音、視頻和數據等)、媒體的編解碼格式、對組播和單播的支持等。
SIP協(xié)議憑借其簡(jiǎn)單、易于擴展、便于實(shí)現等諸多優(yōu)點(diǎn)越來(lái)越得到業(yè)界的青睞,它正逐步成為NGN(下一代網(wǎng)絡(luò ))和3G多媒體子系統域中的重要協(xié)議,并且市場(chǎng)上出現越來(lái)越多的支持SIP的客戶(hù)端軟件和智能多媒體終端,以及用SIP協(xié)議實(shí)現的服務(wù)器和軟交換設備。
計算機世界網(wǎng)(www.ccw.com.cn)
相關(guān)鏈接:
亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩
定州市|
扎兰屯市|
普定县|
天等县|
伊通|
揭西县|
琼中|
通河县|
枣庄市|
泸西县|
壶关县|
阳新县|
稻城县|
申扎县|
壶关县|
酒泉市|
峨山|
泽普县|
花莲县|
和静县|
揭东县|
阳泉市|
澜沧|
河池市|
阜宁县|
房山区|
新龙县|
扶余县|
甘德县|
金堂县|
平潭县|
岗巴县|
天台县|
双桥区|
鸡泽县|
鲁山县|
喀什市|
涿鹿县|
江都市|
七台河市|
东莞市|
http://444
http://444
http://444
http://444
http://444
http://444