文/盧慧 李華 吳承勇
一種IPv4和IPv6混合網(wǎng)絡(luò)中P2P通信方法
文/盧慧1李華2吳承勇2
P2P網(wǎng)絡(luò)是一種構(gòu)建在互聯(lián)網(wǎng)上的分布式網(wǎng)絡(luò),打破了傳統(tǒng)的Client/Server模式,在網(wǎng)絡(luò)中的每個(gè)結(jié)點(diǎn)的地位都是對(duì)等的。每個(gè)結(jié)點(diǎn)既充當(dāng)服務(wù)器,為其他結(jié)點(diǎn)提供服務(wù),同時(shí)也享用其他結(jié)點(diǎn)提供的服務(wù)。由于P2P網(wǎng)絡(luò)極大提高了Internet中信息、帶寬和計(jì)算資源的利用率,因此得到了迅速發(fā)展。隨著IPv4地址的耗盡,IPv4網(wǎng)絡(luò)向IPv6網(wǎng)絡(luò)過(guò)渡成為必然,但I(xiàn)Pv4的發(fā)展已有30多年歷史,現(xiàn)有的大多數(shù)網(wǎng)絡(luò)設(shè)備都是基于IPv4設(shè)計(jì)的,在短時(shí)間內(nèi)完全實(shí)現(xiàn)IPv4到IPv6的轉(zhuǎn)換不切實(shí)際,IPv4/ IPv6混合網(wǎng)必然會(huì)長(zhǎng)時(shí)間共存。目前多數(shù)P2P研究都是在兩個(gè)P2P結(jié)點(diǎn)之間具有相同通信協(xié)議(如IPv4)的基礎(chǔ)上進(jìn)行的。因此P2P系統(tǒng)中運(yùn)行IPv4協(xié)議的結(jié)點(diǎn)與運(yùn)行IPv6協(xié)議的結(jié)點(diǎn)之間的通信逐漸成為一個(gè)問(wèn)題,如果無(wú)法解決好這個(gè)問(wèn)題,P2P技術(shù)的發(fā)展必將受到阻礙。
為解決互聯(lián)網(wǎng)上運(yùn)行IPv4協(xié)議的P2P結(jié)點(diǎn)與運(yùn)行IPv6協(xié)議的P2P結(jié)點(diǎn)之間的相互通信問(wèn)題,本文結(jié)合IPv4向IPv6三種過(guò)渡方案之雙協(xié)議棧技術(shù)和P2P系統(tǒng),提出一種IPv4/IPv6混合網(wǎng)絡(luò)中基于中轉(zhuǎn)結(jié)點(diǎn)的P2P通信方法。
本文賦予運(yùn)行雙協(xié)議棧的結(jié)點(diǎn)雙重角色,即它既是P2P網(wǎng)絡(luò)中的普通結(jié)點(diǎn),可以參與資源共享,又可以作為中轉(zhuǎn)結(jié)點(diǎn),實(shí)現(xiàn)IPv4結(jié)點(diǎn)和IPv6結(jié)點(diǎn)的通信。例如,IPv4結(jié)點(diǎn)需要得到IPv6網(wǎng)絡(luò)的資源時(shí),只要發(fā)送資源轉(zhuǎn)發(fā)請(qǐng)求包到中轉(zhuǎn)結(jié)點(diǎn),由中轉(zhuǎn)結(jié)點(diǎn)獲取資源后發(fā)送給IPv4結(jié)點(diǎn)即可。同理IPv6結(jié)點(diǎn)也可以向中轉(zhuǎn)結(jié)點(diǎn)請(qǐng)求IPv4網(wǎng)絡(luò)的資源。從而實(shí)現(xiàn)IPv4/IPv6混合網(wǎng)絡(luò)中不同協(xié)議結(jié)點(diǎn)之間的通信。此法不需對(duì)網(wǎng)絡(luò)硬件做任何改動(dòng),只需要結(jié)點(diǎn)自己判斷網(wǎng)絡(luò)類(lèi)型(純IPv4協(xié)議棧、純IPv6協(xié)議棧、IPv4/IPv6雙協(xié)議棧)來(lái)設(shè)定自己的結(jié)點(diǎn)類(lèi)型。
本文以采用中心化拓?fù)涞腂ittorrent系統(tǒng)為研究背景,整個(gè)系統(tǒng)包括兩部分:純IPv4網(wǎng)絡(luò)的P2P子系統(tǒng)和純IPv6網(wǎng)絡(luò)的P2P子系統(tǒng),包含三類(lèi)結(jié)點(diǎn),即純IPv4結(jié)點(diǎn)Peer_v4、純IPv6結(jié)點(diǎn)Peer_v6、雙協(xié)議棧結(jié)點(diǎn)Peer_v4v6(該類(lèi)結(jié)點(diǎn)同時(shí)支持與IPv4和IPv6結(jié)點(diǎn)的通信),系統(tǒng)還包括安裝雙協(xié)議棧的索引服務(wù)器Tracker_v4v6、安裝雙協(xié)議棧的種子服務(wù)器。系統(tǒng)網(wǎng)絡(luò)拓?fù)鋱D如圖1所示。
當(dāng)Peer_v4可以從IPv4網(wǎng)絡(luò)的P2P子系統(tǒng)得到資源分片時(shí),則按照正常的P2P協(xié)議進(jìn)行通信。當(dāng)Peer_v4無(wú)法從IPv4網(wǎng)絡(luò)的子系統(tǒng)得到資源分片時(shí),則按隨即選擇策略選擇一個(gè)Peer_v4v6作為中轉(zhuǎn)結(jié)點(diǎn),根據(jù)隨機(jī)片段選擇算法挑選一個(gè)需要的片段,然后向選擇的Peer_v4v6發(fā)起資源轉(zhuǎn)發(fā)請(qǐng)求,由Peer_v4v6在IPv6網(wǎng)絡(luò)的P2P子系統(tǒng)中請(qǐng)求該資源片段,Peer_v4v6獲得該資源片段后轉(zhuǎn)發(fā)給Peer_v4。反之,Peer_v6同樣可以通過(guò)Peer_v4v6請(qǐng)求到來(lái)自IPv4網(wǎng)絡(luò)的P2P子系統(tǒng)的資源分片。Peer_v4v6同時(shí)在兩個(gè)P2P網(wǎng)絡(luò)子系統(tǒng)中下載分片,同時(shí)作為中轉(zhuǎn)結(jié)點(diǎn)要優(yōu)先下載來(lái)自Peer_v4或Peer_ v6資源轉(zhuǎn)發(fā)請(qǐng)求所要的分片。
下面詳細(xì)說(shuō)明Peer_v4向Peer_v4v6發(fā)送數(shù)據(jù)中轉(zhuǎn)請(qǐng)求的過(guò)程。
假設(shè):圖1所示P2P系統(tǒng)中有IPv4網(wǎng)絡(luò)里的一對(duì)等端Peer_v4為機(jī)器P4_1,其IP地址是201.58.170.5;一運(yùn)行IPv4和IPv6雙協(xié)議棧的對(duì)等端Peer_v4v6為機(jī)器P46_1,其IPv4地址是201.58.173.3,IPv6地址是2001::1;IPv6網(wǎng)里的一對(duì)等端Peer_v6為機(jī)器P6_1,IP地址是2003::3。
圖1 混合網(wǎng)絡(luò)中基于請(qǐng)求轉(zhuǎn)發(fā)機(jī)制的P2P通信網(wǎng)絡(luò)拓?fù)?/p>
1.對(duì)等結(jié)點(diǎn)Peer獲取種子文件并向索引服務(wù)器注冊(cè)信息。
首先結(jié)點(diǎn)P4_1、P46_1和P6_1從IPv4/IPv6種子服務(wù)器獲取種子文件,并從中提取索引服務(wù)器Tracker_v4v6的信息,向Tracker_v4v6發(fā)起注冊(cè)請(qǐng)求,注冊(cè)信息包括Peer的結(jié)點(diǎn)標(biāo)識(shí)、IP地址(Peer_v4v6需提交IPv4和IPv6兩個(gè)地址)、結(jié)點(diǎn)類(lèi)型和對(duì)等通信端口。
Tracker_v4v6收到Peer的請(qǐng)求消息后,保存該P(yáng)eer的信息,并將鄰居結(jié)點(diǎn)信息(包含Peer的結(jié)點(diǎn)標(biāo)識(shí)、IP地址、結(jié)點(diǎn)類(lèi)型和對(duì)等通信端口)返回給該P(yáng)eer。這里的鄰居結(jié)點(diǎn)對(duì)Peer_v4來(lái)說(shuō)是指IPv4網(wǎng)絡(luò)中P2P子系統(tǒng)中的鄰居結(jié)點(diǎn),包括Peer_v4與Peer_ v4v6。對(duì)Peer_v4v6來(lái)說(shuō)是指整個(gè)P2P系統(tǒng)中的鄰居結(jié)點(diǎn),包括Peer_v4,Peer_v6與Peer_v4v6。對(duì)Peer_v6來(lái)說(shuō)是指IPv6網(wǎng)絡(luò)的P2P子系統(tǒng)中的鄰居結(jié)點(diǎn),包括Peer_v6與Peer_v4v6。
2.Peer_v4向Peer_v4v6發(fā)送數(shù)據(jù)中轉(zhuǎn)請(qǐng)求的過(guò)程。
在收到鄰居結(jié)點(diǎn)信息后,P4_1啟動(dòng)與P46_1的握手交互,同時(shí),P6_1啟動(dòng)與P46_1的握手交互。當(dāng)P4_1無(wú)法從當(dāng)前IPv4 P2P網(wǎng)絡(luò)得到更多新的資源分片,需要從IPv6 P2P網(wǎng)絡(luò)得到資源時(shí),則根據(jù)情況隨機(jī)選擇一個(gè)未有的資源分片向隨機(jī)選擇的中轉(zhuǎn)結(jié)點(diǎn)(設(shè)為P46_1)發(fā)送資源轉(zhuǎn)發(fā)請(qǐng)求消息。P46_1通過(guò)當(dāng)前接收資源轉(zhuǎn)發(fā)請(qǐng)求的數(shù)目來(lái)決定是否接收該請(qǐng)求。如果接收該請(qǐng)求,且本地有該資源則發(fā)送“有資源”(Resources have)消息給P4_1。如果接收請(qǐng)求但本地沒(méi)有該資源則向擁有該資源的P6_1發(fā)送“請(qǐng)求資源”(Request)消息。
經(jīng)過(guò)一段時(shí)間的傳輸,P46_1由IPv6 P2P網(wǎng)絡(luò)從P6_1得到了該資源,通過(guò)IPv4 P2P網(wǎng)絡(luò)發(fā)送“有資源”(Resources have)消息給P4_1。P4_1收到“有資源”(Resources have)消息后,判斷自己是否擁有該資源。若有則發(fā)送取消資源轉(zhuǎn)發(fā)請(qǐng)求消息給P46_1,P46_1收到取消資源轉(zhuǎn)發(fā)請(qǐng)求后刪除資源轉(zhuǎn)發(fā)請(qǐng)求記錄。若還沒(méi)有該資源則發(fā)送“請(qǐng)求資源”(Request)消息給P46_1。P46_1收到“請(qǐng)求資源”(Request)消息后,發(fā)送資源給P4_1并刪除資源轉(zhuǎn)發(fā)請(qǐng)求記錄。
在P2P通信過(guò)程中,P4_1、P6_1和P46_1定時(shí)向Tracker_v4v6發(fā)送更新消息,告知進(jìn)度。具體通信流程如圖2所示。
Peer_v6向Peer_v4v6發(fā)送數(shù)據(jù)中轉(zhuǎn)請(qǐng)求的情況與之類(lèi)似,不再贅述。
圖2 混合網(wǎng)絡(luò)中資源請(qǐng)求通信流程
本文將P2P應(yīng)用BitTorrent部署在IPv4/IPv6混合網(wǎng)絡(luò)中,通過(guò)仿真實(shí)驗(yàn)來(lái)評(píng)估基于中轉(zhuǎn)結(jié)點(diǎn)的P2P通信方法在IPv6發(fā)展過(guò)程中,對(duì)整個(gè)P2P系統(tǒng)性能的影響以及對(duì)IPv4用戶(hù)和IPv6用戶(hù)的P2P性能的影響。經(jīng)過(guò)分析,在不同時(shí)期,當(dāng)雙協(xié)議棧結(jié)點(diǎn)占純IPv6結(jié)點(diǎn)的比例小于20%時(shí),P2P系統(tǒng)性能明顯較差,雙協(xié)議棧結(jié)點(diǎn)的數(shù)目在IPv6發(fā)展初期影響最為明顯。當(dāng)雙協(xié)議棧結(jié)點(diǎn)占純IPv6結(jié)點(diǎn)的比例大于20%時(shí),系統(tǒng)平均完成時(shí)間穩(wěn)定在較低水平。
本方法利用IPv4/IPv6混合網(wǎng)絡(luò)中雙協(xié)議棧結(jié)點(diǎn)來(lái)中轉(zhuǎn)IPv4網(wǎng)絡(luò)與IPv6網(wǎng)絡(luò)中P2P結(jié)點(diǎn)間通信的消息,從而實(shí)現(xiàn)IPv4網(wǎng)絡(luò)中P2P結(jié)點(diǎn)與IPv6網(wǎng)絡(luò)中P2P結(jié)點(diǎn)的通信。其效率依賴(lài)于雙協(xié)議棧的數(shù)目以及如何合理利用此類(lèi)結(jié)點(diǎn)進(jìn)行中轉(zhuǎn)資源。
本方法需要在原有P2P協(xié)議中加入資源中轉(zhuǎn)請(qǐng)求處理方面的消息處理,增加了原有協(xié)議的復(fù)雜性。但是對(duì)數(shù)據(jù)通信的流量不會(huì)有太大影響,側(cè)重于通過(guò)信息交互來(lái)合理地疏導(dǎo)數(shù)據(jù)流量,從而使文件分布更加迅速有效。
(作者單位:1為內(nèi)蒙古大學(xué)計(jì)算機(jī)學(xué)院,2為內(nèi)蒙古大學(xué)網(wǎng)絡(luò)信息中心)