韓新超, 馬永強(qiáng), 鄭秋生
(1.中原工學(xué)院計(jì)算機(jī)學(xué)院河南省鄭州市網(wǎng)絡(luò)安全評(píng)估重點(diǎn)實(shí)驗(yàn)室,河南鄭州450007;2.河南理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,河南焦作454000)
P2P(Peer to Peer)通信技術(shù)即對(duì)等網(wǎng)絡(luò)[1-5],是近年來(lái)發(fā)展的一種新的獲取信息的方式,是一種主機(jī)不經(jīng)過(guò)中繼設(shè)備直接交換數(shù)據(jù)或服務(wù)的技術(shù)。在P2P通信模式中,通信節(jié)點(diǎn)之間通過(guò)直接通信實(shí)現(xiàn)信息的交換和資源的共享,這使得用戶之間的溝通和交互變得更直接、更便捷。然而,由于網(wǎng)絡(luò)環(huán)境的復(fù)雜性,在某些情況下,無(wú)法直接在兩個(gè)對(duì)等點(diǎn)之間建立P2P會(huì)話以便完成通信和資源共享。例如,在目前的網(wǎng)絡(luò)IPv4環(huán)境中,由于NAT(network address translator)設(shè)備的廣泛存在,使得處于不同內(nèi)部私有網(wǎng)絡(luò)中的主機(jī)直接進(jìn)行通信變得很困難甚至不可能[6-8]。NAT技術(shù)旨在解決IPv4網(wǎng)絡(luò)中地址匱乏的問(wèn)題[9-11],位于NAT設(shè)備后的主機(jī)的地址通常為私有地址,這些地址不能在因特網(wǎng)絡(luò)中路由,因此,NAT設(shè)備后的設(shè)備節(jié)點(diǎn)往往不能直接通信,需要借助中間服務(wù)器完成P2P會(huì)話的建立。即使在IP地址比較充裕的IPv6網(wǎng)絡(luò)中,由于IPv4和IPv6隧道的存在,為了在不同網(wǎng)絡(luò)中在IPv4和IPv6地址之間進(jìn)行切換,NAT設(shè)備也將在很長(zhǎng)一段時(shí)間存在[12-13]。因此,針對(duì)這些復(fù)雜的網(wǎng)絡(luò)環(huán)境,本文提出了一種具有網(wǎng)絡(luò)環(huán)境感知能力的P2P通信方案并予以實(shí)現(xiàn),該方案旨在對(duì)P2P通信中的兩個(gè)Peer環(huán)境進(jìn)行感知,并根據(jù)感知的網(wǎng)絡(luò)環(huán)境采用最優(yōu)的P2P方案進(jìn)行通信,以提高P2P會(huì)話的建立成功的連接率,提高端到端延時(shí)性能,同時(shí)盡可能的減小協(xié)議引入的開(kāi)銷。
現(xiàn)有P2P會(huì)話連接技術(shù)主要分為以下3種:服務(wù)器中轉(zhuǎn)技術(shù)、反向連接技術(shù)、UDP打洞技術(shù)[14-15],各種技術(shù)的特點(diǎn)如表1所示。
表1 P2P會(huì)話連接技術(shù)比較
假定通信雙方為peerA和Peer B。由于A和B所處的網(wǎng)絡(luò)環(huán)境可能非常復(fù)雜,而且A和B可能無(wú)法直接通信(例如A和B均位于一個(gè)私有網(wǎng)絡(luò)中),因此在實(shí)現(xiàn)中我們必須采用一個(gè)中間服務(wù)器ServerC服務(wù)P2P會(huì)話的建立。首先,peerA和Peer B向Server C注冊(cè)。其次,當(dāng)Peer A向Server C發(fā)起連接請(qǐng)求,請(qǐng)求連接PeerB。最后,ServerC根據(jù)PeerA和PeerB所處的網(wǎng)絡(luò)環(huán)境為peerA和PeerB選擇最優(yōu)的通信方案。必要時(shí),中間服務(wù)器將作為中轉(zhuǎn)服務(wù)器為peer A和Peer B之間的通信進(jìn)行中轉(zhuǎn)。
具有網(wǎng)絡(luò)環(huán)境感知能力的P2P通信方案的設(shè)計(jì)分為兩部分:服務(wù)器部分和對(duì)等點(diǎn)客戶端部分,其目的在需要通信的對(duì)等點(diǎn)之間建立直連的P2P會(huì)話,會(huì)話建立過(guò)程根據(jù)感知的網(wǎng)絡(luò)環(huán)境借助中間服務(wù)器完成。其實(shí)現(xiàn)算法分為以下幾個(gè)步驟:
(1)部署中間服務(wù)器。首先,server C在某個(gè)UDP端口和某個(gè)公網(wǎng)地址上監(jiān)聽(tīng),等待來(lái)自peer客戶端的連接。
(2)登陸的peer向中間服務(wù)器注冊(cè)。Peer在登錄時(shí)向中間服務(wù)器注冊(cè),注冊(cè)時(shí)將本地端口和本地地址攜帶在登錄消息中。服務(wù)器收到某peer的注冊(cè)消息后,從注冊(cè)消息體中獲取該peer的本地地址和本地端口號(hào) (以下簡(jiǎn)稱私有端口和私有地址),同時(shí)調(diào)用getsockname獲取該peer客戶端的真正端口號(hào)、真正的地址(以下簡(jiǎn)稱為公有地址和公有端口號(hào))。注意公有地址和公有端口號(hào)可能是私有地址和私有端口經(jīng)過(guò)NAT設(shè)備轉(zhuǎn)換后得到的地址和端口號(hào)。
(3)Peer A向Server C請(qǐng)求連接Peer B。
(4)Server C分別向Peer A和Peer B返回其對(duì)等體的網(wǎng)絡(luò)信息。返回的網(wǎng)絡(luò)環(huán)境信息包括其通信Peer的私有地址、私有端口、公有地址和公有端口等信息。
(5)PeerA根據(jù)其自身和PeerB的信息進(jìn)行網(wǎng)絡(luò)環(huán)境感知。首先,Peer A確定其自身及其Peer B所處的網(wǎng)絡(luò)環(huán)境:如果其自身的本地地址和服務(wù)器返回地址相同,則表明該P(yáng)eer位于公網(wǎng)內(nèi);否則,則表明該P(yáng)eer位于NAT設(shè)備之后。其次,根據(jù)Peer A其自身所處的網(wǎng)絡(luò)環(huán)境和Peer B所處的網(wǎng)絡(luò)環(huán)境,發(fā)起直接連接請(qǐng)求。其連接請(qǐng)求的socket端口對(duì)分為兩種情況:(peer A本地地址和本地端口、Peer B本地地址和本地端口)、(peer A本地地址和本地端口、Peer B公網(wǎng)地址和公網(wǎng)端口)。如果PeerA位于NAT設(shè)備之后,則經(jīng)過(guò)NAT設(shè)備之后,socket端口連接又被轉(zhuǎn)化為(peer A公網(wǎng)地址和公網(wǎng)端口、Peer B本地地址和本地端口)、(peerA公網(wǎng)地址和公網(wǎng)端口、peerB公網(wǎng)地址和公網(wǎng)端口)。PeerA分別向這2個(gè)socke對(duì)t發(fā)送連接消息,連接信息中包含的請(qǐng)求的Peer ID信息和認(rèn)證等信息。
(6)等待連接消息響應(yīng)。Peer A向2個(gè)socket對(duì)發(fā)送連接消息后,將在一定時(shí)間等待連接響應(yīng)。通過(guò)響應(yīng)的socket對(duì)可以進(jìn)一步確定兩個(gè) Peer所處的網(wǎng)絡(luò)環(huán)境。若響應(yīng)是來(lái)自socket對(duì)(peerA本地地址和本地端口、PeerB本地地址和本地端口),則表明Peer A和Peer B可以通過(guò)本地網(wǎng)絡(luò)直接通信,PeerA和PeerB應(yīng)該位于同一局域網(wǎng)內(nèi),PeerA和PeerB建立的P2P通話應(yīng)該以本地通道優(yōu)先。若響應(yīng)消息來(lái)自(peerA本地地址和本地端口、Peer B公網(wǎng)地址和公網(wǎng)端口),則表明的PeerA和PeerB不在同一局域網(wǎng)環(huán)境中,則P2P會(huì)話通道必須通過(guò)NAT設(shè)備。同時(shí),在這種情況,通過(guò)比較PeerB的公網(wǎng)地址和PeerB的私有地址情況判斷PeerB是否位于某一私有網(wǎng)絡(luò)中。需要注意的時(shí)候,有可能在一定的時(shí)間都不會(huì)受到連接響應(yīng)消息,這是由于某些NAT設(shè)備不兼容性,導(dǎo)致UDP打洞失敗,最終無(wú)法建立P2P會(huì)話。在這種情況下,通信方案將采用服務(wù)器中轉(zhuǎn)技術(shù)的進(jìn)行P2P通信中轉(zhuǎn)。
在P2P通信的過(guò)程中,能感知P2P的相對(duì)網(wǎng)絡(luò)環(huán)境并采用最優(yōu)的方式進(jìn)行通信,具有十分重要的意義,這對(duì)于節(jié)省網(wǎng)絡(luò)帶寬,提高傳輸效率具有十分重要的意義。為此,設(shè)計(jì)出一個(gè)通用的P2P即時(shí)通信驗(yàn)證平臺(tái),并對(duì)實(shí)現(xiàn)方案進(jìn)行驗(yàn)證。仿真開(kāi)發(fā)環(huán)境為L(zhǎng)inux操作系統(tǒng),開(kāi)發(fā)語(yǔ)言為c語(yǔ)言,采用基于UDP的socket程序?qū)崿F(xiàn)。利用Vmware模擬各種NAT網(wǎng)絡(luò)拓?fù)湟员銓?duì)實(shí)現(xiàn)的方案的可用性進(jìn)行測(cè)試。為了驗(yàn)證提出方案的完整性,將網(wǎng)絡(luò)環(huán)境抽象為如表2所示的3種情況,并用Vmware模擬了各種網(wǎng)絡(luò)并對(duì)提出的方案進(jìn)行了測(cè)試。測(cè)試的結(jié)論及其分析如下:
針對(duì)各種拓?fù)浣Y(jié)構(gòu),從3個(gè)方面比較各種P2P會(huì)話連接技術(shù)的協(xié)議性能。首先,針對(duì)會(huì)話連接建立成功率來(lái)比較,其實(shí)驗(yàn)結(jié)果如圖1所示,其對(duì)應(yīng)的具體值如表3所示。
從圖1以及表3可以看出,在各種拓?fù)淝闆r下,本文提出的網(wǎng)絡(luò)感知P2P方案的連接建立成功率和服務(wù)器中轉(zhuǎn)技術(shù)的成功率幾乎等同。
表2 P2P會(huì)話拓?fù)浞诸?/p>
圖1 各種P2P方案連接建立成功率對(duì)比
表3 連接建立成功率對(duì)比
在拓?fù)?環(huán)境測(cè)試中,由于Client A和Client B均具有公有地址,Client A和Client B能快速的建立P2P會(huì)話。在這種情況下,Peer A和Peer B均位于公共網(wǎng)絡(luò)中,在對(duì)我們的方案測(cè)試中,P2P建立連接率為100%。需要注意的是,由于IP地址的匱乏,這種拓?fù)浞桨冈诂F(xiàn)實(shí)情況中比較少見(jiàn)。
在拓?fù)?中,反向連接技術(shù)和UDP打洞技術(shù)由于網(wǎng)絡(luò)環(huán)境的局限性,其連接建立的成功概率均相對(duì)較低,而對(duì)于本文提出的具有網(wǎng)絡(luò)環(huán)境感知的P2P會(huì)話方案,其連接建立率可以達(dá)到99.7%。
在拓?fù)?中,這種優(yōu)勢(shì)更加明顯。這是由于第3種拓?fù)涫亲顝?fù)雜的拓?fù)?,同時(shí)在P2P通信中也是最常見(jiàn)的拓?fù)?。例如,在迅雷下載或者BT下載中,兩個(gè)下載的用戶大多數(shù)情況下都位于私有網(wǎng)絡(luò)中,也就是位于NAT設(shè)備之后。在測(cè)試中,我們發(fā)現(xiàn),99.8%左右的情況下,PeerA和PeerB能成功直接建立直連的P2P會(huì)話。其它的0.2%情況下,Peer A和Peer B之間的通信需要ServerC中轉(zhuǎn)。這是由于某些NAT設(shè)備不兼容的原因。在第3種拓?fù)渲?,我們又?duì)兩種拓?fù)浞謩e進(jìn)行了測(cè)試。第一種情況下,Peer A和Peer B位于同一個(gè)私有網(wǎng)絡(luò)中,在這種情況下,我們的通信方案感知到這種網(wǎng)絡(luò)環(huán)境后,能在Peer和PeerB建立之間的通信會(huì)話并能在它們之間建立高速的傳輸通道,其傳輸效率非常高。在第二種情況中,Peer A和Peer B位于不同的NAT設(shè)備之后,也就是說(shuō)Peer A和Peer B無(wú)法利用私有地址進(jìn)行通信,其會(huì)話建立過(guò)程必須借助中間服務(wù)器。在20%的情況下,PeerA和PeerB無(wú)法建立直連的通信信道,其通信借助Server C完成??傮w上來(lái)說(shuō),網(wǎng)絡(luò)感知方案最終建立的P2P會(huì)話的成功率高達(dá)99.8%,可以不受這種網(wǎng)絡(luò)環(huán)境的限制,而其它幾種連接建立P2P會(huì)話的成功率較低。
其次,比較了各種連接的信令開(kāi)銷性能,其實(shí)驗(yàn)結(jié)果如圖2所示。
圖2 協(xié)議信令開(kāi)銷與傳輸數(shù)據(jù)對(duì)比
從圖2可以看出,在各種拓?fù)錅y(cè)試中,服務(wù)器中轉(zhuǎn)技術(shù)具有最高的協(xié)議開(kāi)銷,而具有網(wǎng)絡(luò)感知的P2P方案的協(xié)議開(kāi)銷最小。這是因?yàn)榉?wù)器中轉(zhuǎn)技術(shù)需要對(duì)所有的數(shù)據(jù)的進(jìn)行中轉(zhuǎn),故其開(kāi)銷永遠(yuǎn)都為100%,這也是服務(wù)器中轉(zhuǎn)技術(shù)很少采用的原因之一。而具有網(wǎng)絡(luò)感知的P2P方案僅僅在會(huì)話建立初期需要產(chǎn)生某些信令開(kāi)銷,一旦會(huì)話建立成功,會(huì)話的對(duì)等體之間就可以直接通信,不會(huì)產(chǎn)生其它的信令開(kāi)銷。同時(shí)可以看出,拓?fù)?產(chǎn)生的信令開(kāi)銷要比拓?fù)?和拓?fù)?產(chǎn)生的信令開(kāi)銷要大,這是由于P2P方案為了感知網(wǎng)絡(luò)環(huán)境所產(chǎn)生的額外開(kāi)銷。
最后,比較了各種連接技術(shù)的端到端時(shí)延性能,其實(shí)驗(yàn)結(jié)果如圖3所示。從圖中看出,在各種測(cè)試拓?fù)渲校哂芯W(wǎng)絡(luò)感知的P2P技術(shù)方案時(shí)延性能最好,而服務(wù)器中轉(zhuǎn)技術(shù)的時(shí)延性能最差。具有網(wǎng)絡(luò)感知的 P2P技術(shù)方案在拓?fù)?的情況下,其平均時(shí)延為220ms左右。隨著拓?fù)浣Y(jié)構(gòu)復(fù)雜性提高,其時(shí)延性能降低。例如在拓?fù)?的情況下,具有網(wǎng)絡(luò)感知的P2P技術(shù)方案其平均時(shí)延約為240ms。同理,其它幾種技術(shù)方案在拓?fù)?的情況下其時(shí)延性能最好,在拓?fù)?的情況下其平均時(shí)延最長(zhǎng)。其原因主要是由于隨著網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的復(fù)雜性提高,P2P報(bào)文的處理時(shí)間變長(zhǎng),平均時(shí)延性能降低。例如在拓?fù)?的情況下,由于Peer A和PeerB均位于公網(wǎng)中,P2P報(bào)文不需要經(jīng)過(guò)NAT設(shè)備的處理。而在拓?fù)?的情況下,由于Peer A和Peer B均位于NAT設(shè)備后,P2P報(bào)文需要經(jīng)過(guò)至少兩個(gè)NAT設(shè)備的處理,使得端到端的延時(shí)性能降低。相對(duì)于其它3種P2P通信方案,具有網(wǎng)絡(luò)感知的P2P方案的端到端延時(shí)性能最好。這是由于,這種方案能對(duì)Peer A和Peer B所處的網(wǎng)絡(luò)環(huán)境進(jìn)行感知,然后利用最優(yōu)的方案在Peer A和Peer B進(jìn)行P2P通信,最優(yōu)的方案使得端到端之間的時(shí)延降到最低。在所有的方案中,服務(wù)器中轉(zhuǎn)技術(shù)的端到端延時(shí)性能最低,這是由于這種方案不考慮Peer A和Peer B所處的相對(duì)網(wǎng)絡(luò)環(huán)境,所有的P2P報(bào)文均通過(guò)服務(wù)器中轉(zhuǎn),導(dǎo)致端到端延時(shí)增加。
圖3 協(xié)議端到端延時(shí)對(duì)比
通過(guò)上述的實(shí)驗(yàn),有如下結(jié)論:在P2P通信的絕大多數(shù)環(huán)境下,本文的方案能夠在PeerA和PeerB之間建立直連的P2P通信,而且相對(duì)于其它P2P會(huì)話建立技術(shù)而言,具有更高的會(huì)話建立連接率,具有更少的信令開(kāi)銷,其端到端延時(shí)性能優(yōu)于其它P2P通信方案。
本文提出了一種具有網(wǎng)絡(luò)環(huán)境感知的P2P通信方案并予以實(shí)現(xiàn),取得了良好的效果,方案能對(duì)各種網(wǎng)絡(luò)拓?fù)溥M(jìn)行很好的感知,而且,在80%的情況下能夠建立直連的P2P會(huì)話,而在其它20%左右的情況,也能通過(guò)中轉(zhuǎn)進(jìn)行P2P通信。同時(shí)提出的方案相對(duì)于其它常用的方案而言,具有更少的通信協(xié)議開(kāi)銷,其端到端延時(shí)性能更好。但是,需要指出的是,在算法的設(shè)計(jì)過(guò)程中沒(méi)有考慮多個(gè)P2P對(duì)等點(diǎn)通信的情況,對(duì)于如何利用感知的網(wǎng)絡(luò)環(huán)境在多個(gè)對(duì)等點(diǎn)之間,有效的進(jìn)行信息的傳遞和分析是未來(lái)需要研究的內(nèi)容。同時(shí),本文提出的算法在對(duì)等點(diǎn)間無(wú)法建立直連會(huì)話時(shí),需要利用中轉(zhuǎn)服務(wù)器進(jìn)行中轉(zhuǎn),當(dāng)這種情況比較多時(shí),服務(wù)器的負(fù)擔(dān)將較重,因此,如何在這種情況下利用P2P中的其它對(duì)等點(diǎn)進(jìn)行信息中轉(zhuǎn)對(duì)于改善該算法的可擴(kuò)展性具有十分重要的意義,也是未來(lái)的研究工作的重點(diǎn)內(nèi)容。
[1]徐向陽(yáng),韋昌法.基于NAT穿越技術(shù)的P2P通信方案的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(7):1559-1561.
[2]臧雪柏,郭睿,叢玉良,等.面向即時(shí)通信系統(tǒng)的P2P網(wǎng)絡(luò)模型[J].吉林大學(xué)學(xué)報(bào)(工學(xué)版),2010,40(增刊):310-314.
[3]王嵩賀,董馨熒.基于P2P模型的安全即時(shí)通信軟件的研究與開(kāi)發(fā)[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2010(9):140-141.
[4]侯孟書(shū),盧顯良,周旭,等.非結(jié)構(gòu)化P2P系統(tǒng)的路由算法[J].電子科技大學(xué)學(xué)報(bào),2005,34(1):105-108.
[5]熊偉,謝冬青,焦炳旺,等.一種結(jié)構(gòu)化P2P協(xié)議中的自適應(yīng)負(fù)載均衡方法[J].軟件學(xué)報(bào),2009,20(3):66-70.
[6]Guclu Hasan,Yuksel Murat.Scale-free overlay topologies with hard cutoffs for unstructured peer-to-peer networks[C].Toronto:Proceedings of the 27th International Conference on Distributed Computing Systems,2007:32-33.
[7]Eppinger J L.TCP connections for P2P apps:A software approach to solving the NAT problem[R].Pittsburgh,PA:Carnegie Mellon University,2005.
[8]魏立峰,劉丹斌,王慶輝.一種媒體流穿越NAT的算法設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2009,35(24):81-83.
[9]Yung-Li Chang,Hsiang-Kai Liao,Ce-Kuen Shieh,et al.A NAT traversal approach by using protocol behavior analysis[C].IIHMSP,2006:177-180.
[10]何偉.NAT技術(shù)的研究及其應(yīng)用[J].懷化學(xué)院學(xué)報(bào),2008,27(2):64-66.
[11]劉欣,王行建.NAT技術(shù)的研究與應(yīng)用[J].自動(dòng)化技術(shù)與應(yīng)用,2008,27(7):52-53.
[12]李廣華,朱志祥.NAT技術(shù)基本原理及其在實(shí)際中的應(yīng)用[J].西安郵電學(xué)院學(xué)報(bào),2009,14(1):91-95.
[13]姚政.NAT技術(shù)原理探究及在校園網(wǎng)上的應(yīng)用實(shí)例[J].電腦知識(shí)與技術(shù),2008(12):457-460.
[14]Ford B,Srisuresh P,Kegel D.Peer-to-peer communication across network address translators[C].Proceedings of the USENIX Annual Technical Conference,2005:179-192.
[15]Jennings C.NAT classification results using STUN[S].Internet-Draft,2006.