摘 要: 在闡述P2P和SIP技術(shù)的基礎(chǔ)上,引出了一種二者融合的新技術(shù)——P2P SIP,,提出了采用P2P SIP技術(shù)系統(tǒng)的體系結(jié)構(gòu),、工作方式,并且對(duì)P2P SIP技術(shù)的安全性問(wèn)題進(jìn)行了分析,。
關(guān)鍵詞: P2P SIP DHT
P2P(peer-to-peer)是一種“人人為我,、我為人人”的開(kāi)放與共享的思想, 也是一種基于對(duì)等的計(jì)算模型和基于對(duì)等的應(yīng)用層重疊網(wǎng)絡(luò)架構(gòu)。由于沒(méi)有中央服務(wù)器并且網(wǎng)絡(luò)是自己管理的這種特殊結(jié)構(gòu),,P2P系統(tǒng)天生就擁有高擴(kuò)展性,、健壯性和高容錯(cuò)性的特點(diǎn)。
傳統(tǒng)的P2P系統(tǒng)大致分為三種:(1)中心化P2P,,索引服務(wù)放在一個(gè)中心服務(wù)器上,,但是參與者之間的數(shù)據(jù)交換是對(duì)等的,例如Napster,;(2)純P2P,,索引服務(wù)存儲(chǔ)在每一個(gè)參與者上,通過(guò)發(fā)起洪泛式的請(qǐng)求來(lái)實(shí)現(xiàn)信息查詢(xún),,效率較低,,例如Gnutella;(3)混合式P2P,,索引服務(wù)放在一些超級(jí)節(jié)點(diǎn)" title="超級(jí)節(jié)點(diǎn)">超級(jí)節(jié)點(diǎn)上,,通過(guò)向超級(jí)節(jié)點(diǎn)發(fā)起請(qǐng)求來(lái)實(shí)現(xiàn)信息查詢(xún),例如Kazza,。
為了進(jìn)一步提高效率,,越來(lái)越多的P2P系統(tǒng)采用分布式散列表(DHT)實(shí)現(xiàn)查詢(xún),這類(lèi)系統(tǒng)也稱(chēng)之為結(jié)構(gòu)化P2P系統(tǒng),。結(jié)構(gòu)化P2P系統(tǒng)(如Chord,、CAN等)把精力主要集中在優(yōu)化P2P的查詢(xún)延遲以及對(duì)節(jié)點(diǎn)加入,、離開(kāi)的維護(hù),從而代替大量發(fā)起請(qǐng)求這種低效率的模式,。
SIP(Session Initiation Protocol)是一個(gè)類(lèi)似于HTTP 和SMTP 的基于文本的信令協(xié)議, 在IP分組網(wǎng)絡(luò)中處理端點(diǎn)之間的多媒體會(huì)話呼叫的建立,、控制和終結(jié)等過(guò)程, 主要被用來(lái)開(kāi)發(fā)和實(shí)現(xiàn)VoIP、語(yǔ)音/視頻會(huì)議,、文本聊天,、即時(shí)消息、交互游戲等業(yè)務(wù)的系統(tǒng)和終端,尤其在VoIP 和IM系統(tǒng)中得到了廣泛的應(yīng)用,。
目前有不少研究機(jī)構(gòu)已經(jīng)嘗試將P2P和SIP的優(yōu)勢(shì)進(jìn)行互補(bǔ)和結(jié)合,。本文提出的這種P2P SIP技術(shù),主要采用基于DHT的P2P方法來(lái)實(shí)現(xiàn)SIP的注冊(cè)以及資源定位,,這里的DHT采用目前比較流行的CHORD算法,。
1 體系結(jié)構(gòu)
1.1 節(jié)點(diǎn)功能
在基于SIP的通信系統(tǒng)中,當(dāng)呼叫建立之后,,兩個(gè)peer之間的媒體交流是直接進(jìn)行的,,所以從這個(gè)角度看似乎是P2P 構(gòu)架。然而,,在呼叫建立之前,,用戶(hù)的注冊(cè)、定位以及呼叫路由都不能缺少服務(wù)器的參與,,因此傳統(tǒng)的SIP系統(tǒng)采用的是C/S構(gòu)架,。而本文采用P2P SIP技術(shù)的系統(tǒng)不需要中心服務(wù)器,在這種系統(tǒng)中,,peer可以直接連接到其他的peer建立通信提供服務(wù),。因此,參與的節(jié)點(diǎn)不僅類(lèi)似于傳統(tǒng)的SIP客戶(hù)端滿(mǎn)足用戶(hù)接打電話,,而且將所有的peer作為一個(gè)整體來(lái)看,,它們還起到了傳統(tǒng)SIP網(wǎng)絡(luò)中注冊(cè)機(jī)和代理務(wù)器的作用,實(shí)現(xiàn)了資源定位,、維持現(xiàn)有信息以及呼叫路由等功能,。
如上所述,P2P SIP節(jié)點(diǎn)提供很多功能,,超過(guò)了傳統(tǒng)SIP體系結(jié)構(gòu)中的任何單一實(shí)體,。因此,每個(gè)節(jié)點(diǎn)必須是整個(gè)系統(tǒng)中活動(dòng)的一員,,必須提供一些類(lèi)似于SIP系統(tǒng)中服務(wù)器的功能,,至少,用來(lái)執(zhí)行附加的類(lèi)似于服務(wù)器以及維持DHT行為的節(jié)點(diǎn)應(yīng)當(dāng)分布在網(wǎng)絡(luò)中,。這樣,,一個(gè)節(jié)點(diǎn)既扮演服務(wù)器又扮演終端,,從而提供了一個(gè)可擴(kuò)展和可靠的服務(wù)器群架構(gòu)。然而,,在實(shí)際情況中并不是所有節(jié)點(diǎn)的運(yùn)算能力和性能都一樣,。如果采用純P2P構(gòu)架,,每個(gè)節(jié)點(diǎn)都要扮演兩個(gè)角色,,則所有的節(jié)點(diǎn)終端都需要改進(jìn)以滿(mǎn)足要求,這樣勢(shì)必會(huì)造成資源的極大浪費(fèi),。因此將節(jié)點(diǎn)按功能的大小分為普通節(jié)點(diǎn)" title="普通節(jié)點(diǎn)">普通節(jié)點(diǎn)和超級(jí)節(jié)點(diǎn),。
選擇一些高性能(帶寬、CPU,、內(nèi)存)并且可靠(在線時(shí)間,、公網(wǎng)地址)的節(jié)點(diǎn)作為超級(jí)節(jié)點(diǎn),這些超級(jí)節(jié)點(diǎn)在一起共同構(gòu)成可靠的服務(wù)器群構(gòu)架,,通過(guò)使用DHT來(lái)定位用戶(hù),。普通節(jié)點(diǎn)平時(shí)連接在這些超級(jí)節(jié)點(diǎn)上,通過(guò)這些超級(jí)節(jié)點(diǎn)來(lái)實(shí)現(xiàn)注冊(cè),、定位,。決定成為超級(jí)節(jié)點(diǎn)或者普通節(jié)點(diǎn)都在本地實(shí)現(xiàn)。當(dāng)一個(gè)節(jié)點(diǎn)啟動(dòng)時(shí),,它首先是普通節(jié)點(diǎn),,當(dāng)普通節(jié)點(diǎn)檢測(cè)到自己有足夠的性能和可靠性,它就可以把自己變?yōu)槌?jí)節(jié)點(diǎn),。當(dāng)存在的超級(jí)節(jié)點(diǎn)離開(kāi)或者達(dá)到它的能力極限時(shí),,一個(gè)有高性能和可靠性的節(jié)點(diǎn)也可以被迫成為一個(gè)超級(jí)節(jié)點(diǎn)。此外,,一些節(jié)點(diǎn)知道自己足夠強(qiáng)大時(shí),,會(huì)在啟動(dòng)過(guò)程中就變成超級(jí)節(jié)點(diǎn),同時(shí),,存在的節(jié)點(diǎn)也可以影響它的鄰居節(jié)點(diǎn)成為超級(jí)節(jié)點(diǎn),。
1.2 網(wǎng)絡(luò)結(jié)構(gòu)
P2P SIP系統(tǒng)結(jié)構(gòu)圖如圖1所示。
網(wǎng)絡(luò)由節(jié)點(diǎn)組成,,這些節(jié)點(diǎn)在一起共同提供目錄索引服務(wù)以幫助定位資源,,例如用戶(hù)等。在這里,,所有的節(jié)點(diǎn)通過(guò)采用基于CHORD算法的DHT P2P結(jié)構(gòu)來(lái)組織,。CHORD是一個(gè)環(huán)形的拓?fù)浣Y(jié)構(gòu),每個(gè)結(jié)點(diǎn)并不需要知道所有其他結(jié)點(diǎn)的信息,,在由N個(gè)結(jié)點(diǎn)組成的網(wǎng)絡(luò)中,,每個(gè)結(jié)點(diǎn)只需要維護(hù)其他LogN個(gè)結(jié)點(diǎn)的信息,,查詢(xún)的算法時(shí)間是O(LogN)。
每個(gè)節(jié)點(diǎn)設(shè)計(jì)了一個(gè)Node-ID來(lái)決定節(jié)點(diǎn)在DHT環(huán)中的位置以及資源的范圍,,Node-ID通過(guò)hashing節(jié)點(diǎn)的IP地址以及端口號(hào)來(lái)創(chuàng)建,。相應(yīng)地,每個(gè)資源也有一個(gè)Resource-ID,,通過(guò)hashing資源的關(guān)鍵字來(lái)獲得,。Node-ID和Resource-ID應(yīng)當(dāng)映射到同一數(shù)字空間。
在CHORD算法中,,一個(gè)Resource-ID為k的資源將被保存到第一個(gè)" title="第一個(gè)">第一個(gè)Node-ID大于或等于k的節(jié)點(diǎn)上,。因此,當(dāng)節(jié)點(diǎn)進(jìn)入或離開(kāi)時(shí),,資源就可以保存在不同的節(jié)點(diǎn)上,。除此之外,節(jié)點(diǎn)還維護(hù)著一張保存其他節(jié)點(diǎn)信息的Finger表,,用于快速地定位某一Resource-ID的后繼節(jié)點(diǎn),,提高系統(tǒng)效率。
1.3 SIP消息
在已有標(biāo)準(zhǔn)SIP協(xié)議的基礎(chǔ)上,,P2P SIP盡可能地保持SIP協(xié)議的原貌,,因此所有需要維持DHT和定位資源的操作都是通過(guò)使用SIP消息來(lái)實(shí)現(xiàn)的?;旧鲜菫榱藘煞N目的來(lái)交換消息的,。第一種目的是維持DHT,例如某些消息用來(lái)通知網(wǎng)絡(luò)有節(jié)點(diǎn)加入或者離開(kāi),;第二種目的是用來(lái)完成用戶(hù)之間的通信,,這種消息是大多數(shù)SIP用戶(hù)所習(xí)慣的,例如:注冊(cè)用戶(hù),、邀請(qǐng)其他用戶(hù)來(lái)參加會(huì)議等,。當(dāng)使用DHT來(lái)實(shí)現(xiàn)分布式注冊(cè)時(shí),注冊(cè)和其他查詢(xún)都在DHT內(nèi)來(lái)執(zhí)行,。一旦目標(biāo)資源被找到,,更深層的通信就直接在用戶(hù)代理之間進(jìn)行,這一點(diǎn)類(lèi)似于傳統(tǒng)的SIP通信,。
傳統(tǒng)的SIP系統(tǒng)使用“注冊(cè)”消息來(lái)實(shí)現(xiàn)“增加,、刪除、請(qǐng)求綁定" title="綁定">綁定”,,因此,,筆者選擇用“注冊(cè)”方法來(lái)維持DHT。使用SIP“注冊(cè)”消息,不僅是為了在DHT維持操作中把節(jié)點(diǎn)綁定為鄰居,,同時(shí)也用它綁定資源到相應(yīng)的節(jié)點(diǎn),,這些操作在傳統(tǒng)的SIP系統(tǒng)中是由SIP注冊(cè)機(jī)來(lái)實(shí)現(xiàn)的。
2 工作原理
2.1 節(jié)點(diǎn)注冊(cè)
一個(gè)節(jié)點(diǎn)啟動(dòng)時(shí),,根據(jù)它所處的物理環(huán)境以及它要達(dá)到的不同目的,,可能會(huì)出現(xiàn)兩種情況。第一,,當(dāng)節(jié)點(diǎn)啟動(dòng)時(shí),,用戶(hù)輸入它的身份,節(jié)點(diǎn)通過(guò)DNS找到可能存在的SIP服務(wù)器地址,,并發(fā)送SIP 注冊(cè)消息,,如果注冊(cè)成功,,它就可以與傳統(tǒng)的SIP節(jié)點(diǎn)進(jìn)行通信,。第二,一個(gè)節(jié)點(diǎn)啟動(dòng)時(shí),,首先計(jì)算其N(xiāo)ode-ID例如k,,然后發(fā)送一個(gè)注冊(cè)消息給它找到的第一個(gè)節(jié)點(diǎn)(bootstrap)請(qǐng)求加入。這個(gè)節(jié)點(diǎn)(bootstrap)就會(huì)查找它所知道的Node-ID最接近k的其他節(jié)點(diǎn),,并且將要加入的節(jié)點(diǎn)重定向到該節(jié)點(diǎn),。要加入的節(jié)點(diǎn)一直重復(fù)上述操作,直到到達(dá)允許它加入的超級(jí)節(jié)點(diǎn),,然后這個(gè)超級(jí)節(jié)點(diǎn)會(huì)告知它有哪些鄰居節(jié)點(diǎn)以及應(yīng)該負(fù)責(zé)保存哪些資源內(nèi)容,。節(jié)點(diǎn)加入到P2P SIP網(wǎng)絡(luò)中之后,還會(huì)與其他節(jié)點(diǎn)進(jìn)行定期的消息交換,,以了解網(wǎng)絡(luò)中其他節(jié)點(diǎn)的進(jìn)出情況,。
2.2 資源注冊(cè)
節(jié)點(diǎn)注冊(cè)時(shí),并沒(méi)有將節(jié)點(diǎn)所含資源注冊(cè)到P2P SIP網(wǎng)絡(luò),。當(dāng)一個(gè)節(jié)點(diǎn)加入到網(wǎng)絡(luò)中后,,它所包含的資源會(huì)以傳統(tǒng)SIP系統(tǒng)的注冊(cè)方式一樣進(jìn)行注冊(cè),不同之處在于,,傳統(tǒng)SIP系統(tǒng)是將資源保存在服務(wù)器中,,而P2P SIP系統(tǒng)是將資源保存到相應(yīng)的節(jié)點(diǎn)上。
2.3 呼叫建立
建立呼叫的第一步工作是找到資源所在的節(jié)點(diǎn),,首先將目標(biāo)資源進(jìn)行相應(yīng)的運(yùn)算以獲得Resource-ID,,然后將一個(gè)注冊(cè)消息發(fā)送到最接近于Resource-ID的節(jié)點(diǎn)。重復(fù)上述工作,,直到目標(biāo)節(jié)點(diǎn)被找到,,該節(jié)點(diǎn)會(huì)發(fā)送一個(gè)200 OK的連接信息或者一個(gè)404未找到的消息。一旦目標(biāo)資源被找到,,兩個(gè)節(jié)點(diǎn)上的UA就會(huì)直接進(jìn)行通信,,呼叫建立完畢,。在呼叫建立的過(guò)程中,超級(jí)節(jié)點(diǎn)既可以扮演代理服務(wù)器,,也可以扮演重定向器的角色,。重定向是其首選方式,因?yàn)樗膳懦?jí)節(jié)點(diǎn)的呼叫循環(huán)情況,。然而,,在一些特殊情況下(比如有防火墻和NAT),代理就成為惟一選擇,。
2.4 節(jié)點(diǎn)關(guān)閉和失效
當(dāng)一個(gè)普通節(jié)點(diǎn)離開(kāi)系統(tǒng),,它首先發(fā)送注銷(xiāo)消息到超級(jí)節(jié)點(diǎn),然后超級(jí)節(jié)點(diǎn)就會(huì)依次告知相關(guān)節(jié)點(diǎn)該節(jié)點(diǎn)已經(jīng)注銷(xiāo),,因此一個(gè)失效的節(jié)點(diǎn)不會(huì)影響系統(tǒng)的其他部分,。在任何情況下,超級(jí)節(jié)點(diǎn)都可通過(guò)周期刷新檢測(cè)到失效的普通節(jié)點(diǎn),,它也可以通過(guò)發(fā)送選項(xiàng)條件消息到這些失效節(jié)點(diǎn),,查看它們是否還有響應(yīng)。
當(dāng)一個(gè)超級(jí)節(jié)點(diǎn)離開(kāi)時(shí),,所有相關(guān)節(jié)點(diǎn)需要更新到這個(gè)超級(jí)節(jié)點(diǎn)的DHT鄰居超級(jí)節(jié)點(diǎn)上,。如果超級(jí)節(jié)點(diǎn)關(guān)閉,它會(huì)平緩地發(fā)送它的節(jié)點(diǎn)記錄到其他P2P節(jié)點(diǎn),,這樣可以保障當(dāng)超級(jí)節(jié)點(diǎn)關(guān)閉時(shí),,其他用戶(hù)可以定位到這些記錄。它會(huì)發(fā)送SIP注冊(cè)消息到DHT節(jié)點(diǎn)(其他的超級(jí)節(jié)點(diǎn)),,使得這個(gè)DHT節(jié)點(diǎn)代替它保持這些用戶(hù)記錄,。這無(wú)需通知普通節(jié)點(diǎn),所屬的普通節(jié)點(diǎn)將會(huì)在下次注冊(cè)刷新和查詢(xún)時(shí)連接到那些保存它們記錄的超級(jí)節(jié)點(diǎn),。
當(dāng)一個(gè)超級(jí)節(jié)點(diǎn)意外失敗時(shí),,它相鄰的DHT節(jié)點(diǎn)(超級(jí)節(jié)點(diǎn))檢測(cè)到失敗并調(diào)整DHT以存儲(chǔ)失敗節(jié)點(diǎn)保留的記錄,但是相關(guān)的映射已經(jīng)丟失了,,除非那些原始的節(jié)點(diǎn)重新發(fā)起注冊(cè)刷新,,注冊(cè)刷新轉(zhuǎn)到新的超級(jí)節(jié)點(diǎn)才可以處理相應(yīng)的在DHT里的記錄。
3 安全性分析
安全是P2P系統(tǒng)里最需要解決的重要問(wèn)題,,因?yàn)檎麄€(gè)系統(tǒng)里有很多潛在的不可信的節(jié)點(diǎn),。因此,在P2P SIP系統(tǒng)當(dāng)中,,也存在很多安全問(wèn)題亟待解決,。
3.1認(rèn)證與授權(quán)
用戶(hù)加入P2P 架構(gòu)的疊加層網(wǎng)絡(luò), 尤其是通信類(lèi)應(yīng)用, 必須保證用戶(hù)標(biāo)識(shí)的可認(rèn)證性和可記憶性, 例如用戶(hù)選用號(hào)碼或郵件地址作為用戶(hù)標(biāo)識(shí)來(lái)加入到網(wǎng)絡(luò)。在傳統(tǒng)的SIP網(wǎng)絡(luò)中,有集中的注冊(cè)服務(wù)器來(lái)對(duì)用戶(hù)進(jìn)行鑒權(quán)和授權(quán),可以確保用戶(hù)身份不被假冒, 也可以確保用戶(hù)的個(gè)性化配置和可移動(dòng)性,。而在P2P SIP中,如何對(duì)用戶(hù)的用戶(hù)名,、鑒權(quán)密鑰和配置數(shù)據(jù)進(jìn)行P2P化存儲(chǔ)與服務(wù)是一個(gè)問(wèn)題。對(duì)于這個(gè)問(wèn)題,,可以考慮采用如下幾種策略來(lái)解決:端對(duì)端的數(shù)字驗(yàn)證,、逐跳傳輸層安全(TLS)或者端對(duì)端S/MIME。
3.2 隱私和機(jī)密
其主要工作是對(duì)發(fā)送到不可信賴(lài)節(jié)點(diǎn)的信息進(jìn)行保護(hù)以及防止濫用信息,。在P2P SIP網(wǎng)絡(luò)中,,在用戶(hù)定位呼叫里可能包括大量的“不可信”節(jié)點(diǎn),而不像在傳統(tǒng)的SIP電話系統(tǒng)" title="電話系統(tǒng)">電話系統(tǒng)里那些可信的服務(wù)器,。在傳統(tǒng)的基于服務(wù)器的電話系統(tǒng)里,,呼叫的雙方都對(duì)服務(wù)器是可信的,這樣就沒(méi)有安全問(wèn)題,。而在P2P SIP系統(tǒng)中,,如何保護(hù)那些發(fā)送到不可信賴(lài)節(jié)點(diǎn)的信息是一個(gè)問(wèn)題。另外,,即使節(jié)點(diǎn)是可信的,,但也無(wú)法保證呼叫的日志請(qǐng)求不會(huì)在以后被居心不良者濫用。
3.3 處理惡意節(jié)點(diǎn)
假設(shè)在P2P SIP網(wǎng)絡(luò)中有一些惡意的節(jié)點(diǎn),,它有可能把一次呼叫轉(zhuǎn)移到了一個(gè)發(fā)起方并不想去的節(jié)點(diǎn)。有一種解決方法就是在逐跳的路由節(jié)點(diǎn)上改變?cè)搭^的標(biāo)示,,這樣會(huì)防止負(fù)責(zé)中轉(zhuǎn)的機(jī)器知道呼叫的源頭是誰(shuí),。
3.4 避免“搭便車(chē)”
還有另外一種威脅來(lái)自“搭便車(chē)”。一些節(jié)點(diǎn)使用P2P呼叫和收信服務(wù),,但是拒絕成為超級(jí)節(jié)點(diǎn)為他人服務(wù),。系統(tǒng)應(yīng)當(dāng)制定一些策略來(lái)阻止這類(lèi)節(jié)點(diǎn)。例如,,節(jié)點(diǎn)可以通過(guò)提供服務(wù)來(lái)獲得較高信用等級(jí),,從而獲得其他服務(wù)。每個(gè)節(jié)點(diǎn)都可以啟動(dòng)初始信用帳戶(hù),在NAT和防火墻后的節(jié)點(diǎn),,如果不能成為超級(jí)節(jié)點(diǎn),,則需要付出自己的信用帳戶(hù)的錢(qián)來(lái)獲得服務(wù)。那些用光了信息額度的節(jié)點(diǎn),、拒絕服務(wù)的節(jié)點(diǎn)將會(huì)降低可以獲得服務(wù)的等級(jí),,只有很少的服務(wù)可用。
除以上分析之外,,利用P2P SIP技術(shù)還可以實(shí)現(xiàn)很多高級(jí)服務(wù),,不僅僅是基本的通話功能。例如:離線用戶(hù)的消息轉(zhuǎn)發(fā)、音頻/視頻郵件,、多方參與的會(huì)議,、穿越NAT和防火墻、數(shù)據(jù)存儲(chǔ)的網(wǎng)絡(luò)化等,。雖然P2P SIP還處在學(xué)術(shù)研究階段,,還存在各種各樣需要解決的問(wèn)題,但是這種新技術(shù)的出現(xiàn),,為今后提供更加方便,、自由的服務(wù)創(chuàng)造了可能,因此它的發(fā)展值得人們期待,。
參考文獻(xiàn)
[1] MILOJICIC D, KALOGERAKI V, LUKOSE R M,et al.Peer-to-peer computing[EB/OL].http://www.hpl.hp.com/techreports/2002/HPL-2002-57R1.pdf,2002.
[2] ?ROSENBERG J, SCHULZRINNE H, CAMARILLO G,et al.SIP: session initiation protocol [EB/OL]. http://www.ietf.org/rfc/rfc3261.txt, 2002-06.
[3]?ROSENBERG J,SCHULZRINNE H. Session initiation protocol(SIP): locating SIP servers[EB/OL].http://www.ietf.org/rfc/rfc3263.txt, 2002-06.
[4] ?STOICA I, MORRIS R, KARGER D, et al. Chord: A scalable peer-to-peer lookup service for internet applications[EB/OL]. http://pdos.csail.mit.edu/papers/chord:sigcomm01/chord_sigcomm.pdf, 2001-08.
[5] ?CASTRO M, DRUSCHEL P, GANESH A, et al. Security for structured peer-to-peer overlay networks[EB/OL]. http://research.microsoft.com/~antr/PAST/security.pdf, 2002-12.
[6] ?ADAR E, HUBERMAN B A. Free riding on gnutella[EB/OL].http://www.hpl.hp.com/research/idl/papers/gnutella/gnutella.pdf, 2000-10.