摘要:隨著網(wǎng)絡(luò)的迅速發(fā)展,P2P技術(shù)逐漸顯現(xiàn)它的優(yōu)勢(shì)。網(wǎng)絡(luò)規(guī)模的膨脹,產(chǎn)生了很多規(guī)模龐大的私網(wǎng),私網(wǎng)內(nèi)部需要很方便的信息交換的方法。文章提出在私網(wǎng)中應(yīng)用純P2P技術(shù)來(lái)交換信息和傳送文件,并針對(duì)以往純P2P無(wú)法實(shí)現(xiàn)管理的問(wèn)題提出了具體的解決方案。該方案可自動(dòng)搜索在線用戶(hù),具有很快的收斂速度,用戶(hù)不需要知道對(duì)方的IP地址即可與對(duì)方交流。
關(guān)鍵詞:P2P;純P2P網(wǎng)絡(luò);廣播;收斂算法
引言
P2P是peer-to-peer的縮寫(xiě),peer在英語(yǔ)里有“(地位、能力等)同等者”、“同事”和“伙伴”等意義。因此,P2P可以理解為“伙伴對(duì)伙伴”的意思,或稱(chēng)為對(duì)等聯(lián)網(wǎng)。目前人們認(rèn)為它在加強(qiáng)網(wǎng)絡(luò)上人的交流、文件交換、分布計(jì)算等方面大有前途。
簡(jiǎn)單地說(shuō),P2P直接將人們聯(lián)系起來(lái),讓人們通過(guò)互聯(lián)網(wǎng)直接交互。P2P使得人們可以直接連接到其他用戶(hù)的計(jì)算機(jī)上,互相交換文件,而不必像過(guò)去那樣需要連接到服務(wù)器。P2P另一個(gè)重要特點(diǎn)是改變目前互聯(lián)網(wǎng)以大網(wǎng)站為中心的狀態(tài)、重返“非中心化”,并把權(quán)力交還給用戶(hù)。但是正如B2C、B2B是將現(xiàn)實(shí)世界中很平常的東西移植到互聯(lián)網(wǎng)上一樣,P2P并不是什么新東西,在現(xiàn)實(shí)生活中我們每天都按照P2P模式面對(duì)面地或者通過(guò)電話交流和溝通。
1、P2P技術(shù)體系結(jié)構(gòu)與分類(lèi)
P2P技術(shù)有三種結(jié)構(gòu)模式的體系結(jié)構(gòu),即以Napster為代表的集中目錄式結(jié)構(gòu)、以Gnutella為代表的純P2P網(wǎng)絡(luò)結(jié)構(gòu)和混合式P2P網(wǎng)絡(luò)結(jié)構(gòu)。從P2P技術(shù)的分代來(lái)說(shuō),到目前為止P2P技術(shù)可分為四代:第一代P2P為中央控制網(wǎng)絡(luò)體系結(jié)構(gòu),第二代P2P為分散分布網(wǎng)絡(luò)體系結(jié)構(gòu),第三代P2P為混合網(wǎng)絡(luò)體系結(jié)構(gòu),第四代P2P為目前發(fā)展中P2P技術(shù)。
集中目錄式結(jié)構(gòu)由中央服務(wù)器管理P2P各節(jié)點(diǎn),P2P節(jié)點(diǎn)向中央目錄服務(wù)器注冊(cè)關(guān)于自身的信息(名稱(chēng)、地址、資源和元數(shù)據(jù)),但所有內(nèi)容存貯在各個(gè)節(jié)點(diǎn)中而并非服務(wù)器上,查詢(xún)節(jié)點(diǎn)根據(jù)目錄服務(wù)器中信息的查詢(xún)以及網(wǎng)絡(luò)流量和延遲等信息來(lái)選擇與定位其它對(duì)等點(diǎn)并直接建立連接,而不必經(jīng)過(guò)中央目錄服務(wù)器。集中目錄式結(jié)構(gòu)的優(yōu)點(diǎn)是提高了網(wǎng)絡(luò)的可管理性,使得對(duì)共享資源的查找和更新非常方便;缺點(diǎn)是網(wǎng)絡(luò)的穩(wěn)定性不理想,服務(wù)器失效則該服務(wù)器下的對(duì)等節(jié)點(diǎn)全部失效。
純P2P網(wǎng)絡(luò)結(jié)構(gòu)也被稱(chēng)作廣播式的P2P模型:它沒(méi)有集中的中央目錄服務(wù)器,每個(gè)用戶(hù)隨機(jī)接入網(wǎng)絡(luò),并與自己相鄰的一組鄰居節(jié)點(diǎn)通過(guò)端到端連接構(gòu)成一個(gè)邏輯覆蓋的網(wǎng)絡(luò)。對(duì)等節(jié)點(diǎn)之間的內(nèi)容查詢(xún)和內(nèi)容共享都是直接通過(guò)相鄰節(jié)點(diǎn)廣播接力傳遞,同時(shí)每個(gè)節(jié)點(diǎn)還會(huì)記錄搜索軌跡,以防止搜索環(huán)路的產(chǎn)生。純P2P網(wǎng)絡(luò)結(jié)構(gòu)解決了網(wǎng)絡(luò)結(jié)構(gòu)中心化的問(wèn)題,擴(kuò)展性和容錯(cuò)性較好。由于沒(méi)有一個(gè)對(duì)等節(jié)點(diǎn)知道整個(gè)網(wǎng)絡(luò)的結(jié)構(gòu),網(wǎng)絡(luò)中的搜索算法以泛洪的方式進(jìn)行,控制信息的泛濫消耗了大量帶寬并很快造成網(wǎng)絡(luò)擁塞甚至網(wǎng)絡(luò)的不穩(wěn)定,從而導(dǎo)致整個(gè)網(wǎng)絡(luò)的可用性較差;另外這類(lèi)系統(tǒng)更容易受到垃圾信息,甚至是病毒的惡意攻擊。
混合式網(wǎng)絡(luò)結(jié)構(gòu)綜合了純P2P去中心化和集中式P2P快速查找的優(yōu)勢(shì)。節(jié)點(diǎn)按能力不同(計(jì)算能力、內(nèi)存大小、連接帶寬、網(wǎng)絡(luò)滯留時(shí)間等)區(qū)分為普通節(jié)點(diǎn)和搜索節(jié)點(diǎn)兩類(lèi)。搜索節(jié)點(diǎn)與其臨近的若干普通節(jié)點(diǎn)之間構(gòu)成一個(gè)自治簇,簇內(nèi)采用基于集中目錄式的P2P模式,而整個(gè)P2P網(wǎng)絡(luò)中各個(gè)不同的簇之間再通過(guò)純P2P的模式與搜索節(jié)點(diǎn)相連。在各個(gè)搜索節(jié)點(diǎn)之間可以再次選取性能最優(yōu)的節(jié)點(diǎn),或者另外引入一新的性能最優(yōu)的節(jié)點(diǎn)作為索引節(jié)點(diǎn)來(lái)保存整個(gè)網(wǎng)絡(luò)中可以利用的搜索節(jié)點(diǎn)信息,并且負(fù)責(zé)維護(hù)整個(gè)網(wǎng)絡(luò)的結(jié)構(gòu)。由于普通節(jié)點(diǎn)的文件搜索先在本地所屬的簇內(nèi)進(jìn)行,只有查詢(xún)結(jié)果不充分的時(shí)候,再通過(guò)搜索節(jié)點(diǎn)之間進(jìn)行有限的泛洪,這樣就極為有效地消除了純P2P結(jié)構(gòu)中使用泛洪算法帶來(lái)的網(wǎng)絡(luò)擁塞、搜索遲緩等問(wèn)題。同時(shí),由于每個(gè)簇中的搜索節(jié)點(diǎn)監(jiān)控著所有普通節(jié)點(diǎn)的行為,這就能確保一些惡意的攻擊行為在網(wǎng)絡(luò)局部得到控制,在一定程度上改善了整個(gè)網(wǎng)絡(luò)的負(fù)載平衡狀況。
應(yīng)該說(shuō)第四代P2P并沒(méi)有形成真正的代,而是在原有技術(shù)的基礎(chǔ)上作了改進(jìn),提出和應(yīng)用了一些新技術(shù)措施。典型的有:動(dòng)態(tài)接口選擇、雙向下載和智能結(jié)點(diǎn)彈性重疊網(wǎng)絡(luò)等。
2、在私網(wǎng)內(nèi)構(gòu)造純P2P網(wǎng)絡(luò)
2.1設(shè)計(jì)目的
隨著互聯(lián)網(wǎng)的迅速發(fā)展和網(wǎng)絡(luò)規(guī)模的迅速擴(kuò)大,采用IPv4協(xié)議的IP地址已經(jīng)相當(dāng)匱乏,為了節(jié)約有限的IP地址資源,同時(shí)節(jié)約網(wǎng)絡(luò)成本和提高企業(yè)內(nèi)部網(wǎng)絡(luò)的安全性,越來(lái)越多的企業(yè)組建了自己的私網(wǎng)。實(shí)踐證明:企業(yè)內(nèi)部各主機(jī)之間交換信息要比內(nèi)部與外部交換信息多得多。這就迫切需要一種能夠方便地在內(nèi)網(wǎng)中交換信息的解決方案。
Client/Server是一種解決方案,但存在缺陷:構(gòu)建服務(wù)器需要較大的成本,而現(xiàn)實(shí)中,組建私網(wǎng)的企業(yè)往往不愿意把資金消耗在這方面;通過(guò)局域網(wǎng)的共享等技術(shù)可以實(shí)現(xiàn)資源的交換,但其操作者需要具有一定的網(wǎng)絡(luò)知識(shí),而且往往需要事先確定對(duì)方的IP地址,使用起來(lái)很不方便。
結(jié)合第二代P2P技術(shù)(純P2P模式)特點(diǎn),本文提出的在私網(wǎng)內(nèi)構(gòu)建純P2P傳輸系統(tǒng)的方案,克服了第二代P2P技術(shù)無(wú)法實(shí)現(xiàn)管理的缺點(diǎn),實(shí)現(xiàn)了不需要構(gòu)建服務(wù)器,也不需要知道對(duì)方的IP地址,只需要一個(gè)能識(shí)別用戶(hù)名字就可以與對(duì)方通信,并且可以查看整個(gè)網(wǎng)絡(luò)提供的資源的功能。
2.2算法設(shè)計(jì)
為了縮小廣播數(shù)據(jù)傳輸?shù)姆秶?,提高網(wǎng)絡(luò)的運(yùn)行效率,網(wǎng)絡(luò)往往被劃分為不同的虛擬局域網(wǎng)。一般情況下一個(gè)網(wǎng)段為一個(gè)廣播域,可以通過(guò)子網(wǎng)掩碼來(lái)確定。因此,本算法搜索在線用戶(hù)也分為兩個(gè)過(guò)程:在本網(wǎng)段內(nèi)搜索和在本網(wǎng)段外搜索。
(1)在本網(wǎng)段內(nèi)搜索。用戶(hù)輸入自己的姓名后,按“回車(chē)”鍵或按“加入”按鈕即可完成登錄,程序在本網(wǎng)段內(nèi)廣播自己的信息(該信息中只包含“用戶(hù)名”,是個(gè)很小的數(shù)據(jù)包),本網(wǎng)段內(nèi)的在線用戶(hù)收到該IP數(shù)據(jù)包后,提取出源IP地址和用戶(hù)名(端口號(hào)事先已經(jīng)約定為固定值),作為一條記錄加入其在線用戶(hù)列表,同時(shí)回送自己的用戶(hù)名。如果收到廣播數(shù)據(jù)包的在線用戶(hù)的在線用戶(hù)列表內(nèi)有別的網(wǎng)段內(nèi)的用戶(hù),則再次發(fā)送“HAVEOTHERS”消息數(shù)據(jù)包。剛上線的用戶(hù)收到本網(wǎng)段內(nèi)在線用戶(hù)回送的用戶(hù)名消息后,同樣提取出源IP地址和用戶(hù)名,作為一條記錄加入其在線用戶(hù)列表。其時(shí),他可能收到不止一個(gè)“HAVEOTHERS”消息數(shù)據(jù)包,則選擇第一個(gè)數(shù)據(jù)包,提取出其中的源IP地址保存,并回送“REQUESTEDLIST”消息數(shù)據(jù)包,收到“REQUESTEDLIST”消息數(shù)據(jù)包的用戶(hù),回送別的網(wǎng)段內(nèi)在線用戶(hù)記錄(用戶(hù)名和IP地址)。剛上線的用戶(hù)收到回送回來(lái)的別的網(wǎng)段的用戶(hù)信息后,將其加入在線用戶(hù)列表,并且利用收到的別的網(wǎng)段的在線用戶(hù)的IP地址向其發(fā)送自己已經(jīng)上線的消息。為了能接收自己上線消息還沒(méi)到達(dá)的網(wǎng)段內(nèi)有新用戶(hù)上線的消息,等到上線消息全部發(fā)送結(jié)束后,再次發(fā)送自己用戶(hù)列表中在線的用戶(hù)數(shù),對(duì)方收到后,與自己列表內(nèi)的在線用戶(hù)數(shù)進(jìn)行比較,如果小于自己的,則把別的網(wǎng)段的用戶(hù)信息發(fā)送給請(qǐng)求發(fā)起者,請(qǐng)求發(fā)起者收到后,把與自己列表中相同的記錄丟棄,不同的加入,同時(shí)向新加入的記錄發(fā)送自己已經(jīng)上線的消息。如此往復(fù),直到兩端在線用戶(hù)列表中的個(gè)數(shù)相等為止。到此,整個(gè)私網(wǎng)中在線用戶(hù)的搜索也已經(jīng)完畢(不用再進(jìn)入下一過(guò)程)。
剛上線的用戶(hù)可能不止收到一個(gè)“HAVEOTHERS”消息數(shù)據(jù)包,但也可能收不到“HAVEOTHERS”消息數(shù)據(jù)包,因?yàn)閯e的網(wǎng)段中還沒(méi)有用戶(hù)上線或者他是本網(wǎng)段中第一個(gè)上線的。如果別的網(wǎng)段中還沒(méi)有用戶(hù)上線,那么,整個(gè)私網(wǎng)中在線用戶(hù)的搜索也已就完畢(不用再進(jìn)入下一過(guò)程)。如果他是本網(wǎng)段中第一個(gè)上線的,那么,就要進(jìn)入第二個(gè)過(guò)程。
(2)此時(shí),他要搜索別的網(wǎng)段在線用戶(hù)的情況。為此,他逐一向別的網(wǎng)段的每一個(gè)地址發(fā)送探測(cè)在線用戶(hù)的消息數(shù)據(jù)包,一旦有別的網(wǎng)段的在線用戶(hù)收到該上線的消息數(shù)據(jù)包后,立刻回應(yīng)“IAMHERE”消息包,并把這個(gè)剛上線的用戶(hù)的信息加入自己的在線用戶(hù)列表,剛上線的用戶(hù)只要一收到“IAMHERE”消息包,就立刻停止發(fā)送自己已經(jīng)上線的消息包,同時(shí)從“IAMHERE”消息包中提取源IP地址,并向?qū)Ψ桨l(fā)送“REQUESTEDLIST”消息數(shù)據(jù)包,對(duì)方收到這個(gè)數(shù)據(jù)包后,就把自己的在線用戶(hù)列表回送,剛上線的用戶(hù)把收到的在線用戶(hù)信息加入自己的在線用戶(hù)列表。并逐一向列表中的成員發(fā)送自己已經(jīng)上線的消息。如果剛上線收到對(duì)方回送的用戶(hù)列表之前,有新上線的用戶(hù)探測(cè)到該節(jié)點(diǎn),則收到該用戶(hù)列表數(shù)據(jù)包后,再轉(zhuǎn)發(fā)給剛剛探測(cè)到該節(jié)點(diǎn)的新的上線用戶(hù)。
同樣,剛上線的用戶(hù)可能始終收不到“IAMHERE”消息包,那么可以確定他是整個(gè)私網(wǎng)中第一個(gè)上線的人。
3、私網(wǎng)內(nèi)管理的解決方案
已有的P2P應(yīng)用程序,雖然可以實(shí)現(xiàn)網(wǎng)絡(luò)節(jié)點(diǎn)間的信息交換,但它們都依賴(lài)于服務(wù)器。只要服務(wù)器出了故障,則服務(wù)器管理下的所有P2P應(yīng)用軟件將無(wú)法工作。例如,目前國(guó)內(nèi)流行的QQ聊天工具,它采用分層的服務(wù)器管理模式,如果某一個(gè)地區(qū)的服務(wù)器出現(xiàn)故障,則整個(gè)地區(qū)的QQ程序?qū)⒉荒芄ぷ鳌榇?,本文提出如下的解決方案,既可以實(shí)現(xiàn)管理功能,也可以避免上述情況的發(fā)生。
服務(wù)器出故障導(dǎo)致網(wǎng)絡(luò)癱瘓的根本原因就是服務(wù)器的作用太大。因此,可以把網(wǎng)絡(luò)服務(wù)器只作為參與聊天并起到監(jiān)督作用的參與者節(jié)點(diǎn)。為實(shí)現(xiàn)私網(wǎng)內(nèi)的管理功能,每個(gè)用戶(hù)在登錄時(shí)要輸入關(guān)于自己的一項(xiàng)信息(根據(jù)應(yīng)用的場(chǎng)合不同自己定義)和密碼(要保證兩者結(jié)合可以惟一確定這個(gè)用戶(hù)),并把這兩項(xiàng)信息連同用戶(hù)名和本機(jī)IP地址一同作為上線消息數(shù)據(jù)包一起發(fā)送,當(dāng)這個(gè)數(shù)據(jù)包到達(dá)服務(wù)器節(jié)點(diǎn)時(shí),服務(wù)器提取這兩項(xiàng)信息與數(shù)據(jù)庫(kù)中確定的用戶(hù)信息進(jìn)行比較,如果完全相同,則像別的節(jié)點(diǎn)處理這個(gè)數(shù)據(jù)包一樣進(jìn)行處理。如果不同,則向這個(gè)剛上線的節(jié)點(diǎn)發(fā)送一條要求其退出的消息數(shù)據(jù)包。剛上線的節(jié)點(diǎn)接收到這個(gè)數(shù)據(jù)包后,自動(dòng)退出。通過(guò)這種方法,就可以很好地對(duì)全網(wǎng)的用戶(hù)進(jìn)行管理,同時(shí)即使服務(wù)器出現(xiàn)故障,別的用戶(hù)也只是感覺(jué)網(wǎng)絡(luò)中有一個(gè)節(jié)點(diǎn)注銷(xiāo)了,感覺(jué)不出是服務(wù)器的問(wèn)題,而且可以與網(wǎng)絡(luò)中的其他節(jié)點(diǎn)保持正常的通信。盡管這里也有一個(gè)小的安全隱患,如果一個(gè)非法用戶(hù),正好在服務(wù)器出現(xiàn)故障的時(shí)候登錄系統(tǒng),顯然他是可以成功的,但這種幾率是微乎其微的,只要服務(wù)器恢復(fù)正常,可以馬上把這個(gè)非法的用戶(hù)刪除。
此外,該服務(wù)器還可以通過(guò)與公網(wǎng)上的服務(wù)器通信,借助公網(wǎng)上的服務(wù)器穿透NAT或NAPT,實(shí)現(xiàn)與另一個(gè)私網(wǎng)內(nèi)服務(wù)器的通信。
4、結(jié)束語(yǔ)
本文提出的在私網(wǎng)內(nèi)構(gòu)建純P2P網(wǎng)絡(luò)的算法,以及對(duì)服務(wù)器降級(jí)處理的辦法,能夠?qū)崿F(xiàn)私網(wǎng)內(nèi)部節(jié)點(diǎn)間的信息交換。算法可自動(dòng)搜索在線用戶(hù),具有很快的收斂速度。對(duì)服務(wù)器降級(jí)處理解決了私網(wǎng)內(nèi)節(jié)點(diǎn)的管理問(wèn)題。