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