專(zhuān)利名稱(chēng)::P2p網(wǎng)絡(luò)構(gòu)建方法及數(shù)據(jù)定位方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及P2P網(wǎng)絡(luò),具體涉及一種P2P網(wǎng)絡(luò)構(gòu)建方法及數(shù)據(jù)定位方法。
背景技術(shù):
:隨著P2P技術(shù)的日益發(fā)展,P2P理論的研究也日臻完善。近年來(lái),伴隨著云存儲(chǔ)的興起,將P2P技術(shù)應(yīng)用到云存儲(chǔ)中將會(huì)是一個(gè)重要的研究領(lǐng)域。然而結(jié)構(gòu)化P2P網(wǎng)絡(luò)在解決覆蓋網(wǎng)分割和局部性等問(wèn)題上依然還有諸多不足。結(jié)構(gòu)化P2P網(wǎng)絡(luò)中的節(jié)點(diǎn)可能在不作任何通知的情況下突然失效,如果失效的節(jié)點(diǎn)剛好是一個(gè)割點(diǎn),則很容易使得P2P覆蓋網(wǎng)被分割。目前解決覆蓋網(wǎng)分割的方法有諸多局限性,并沒(méi)有非常行之有效的方法。能夠有效緩解P2P網(wǎng)絡(luò)中覆蓋網(wǎng)分割問(wèn)題,這很大部分取決于點(diǎn)連通度和邊連通度等關(guān)鍵因素。此外,結(jié)構(gòu)化P2P網(wǎng)絡(luò)中覆蓋網(wǎng)與物理網(wǎng)時(shí)常不一致,在覆蓋網(wǎng)中鄰近的節(jié)點(diǎn)在實(shí)際的物理網(wǎng)絡(luò)中很有可能相距很遠(yuǎn),造成通信延時(shí),不具有路由局部性特征,不能滿(mǎn)足當(dāng)前用戶(hù)對(duì)快速響應(yīng)的需求。路由局部性是指在覆蓋網(wǎng)中鄰近的節(jié)點(diǎn)在實(shí)際的物理網(wǎng)絡(luò)中也是鄰近的。雖然目前有些P2P結(jié)構(gòu)具有一定的局部性,但是往往不能劃分為多個(gè)層次,而且各個(gè)節(jié)點(diǎn)之間的負(fù)載也有失平衡。環(huán)形P2P網(wǎng)絡(luò)(Chord)是一種典型的結(jié)構(gòu)化P2P網(wǎng)絡(luò)模型,也依然存在以上問(wèn)題。在環(huán)形P2P網(wǎng)絡(luò)中,所有的節(jié)點(diǎn)都是處在同一個(gè)環(huán)中,每個(gè)節(jié)點(diǎn)存儲(chǔ)了一個(gè)前驅(qū)節(jié)點(diǎn)和多個(gè)(一般為logN,N為環(huán)形P2P網(wǎng)絡(luò)中所有節(jié)點(diǎn)的總數(shù)量)后繼節(jié)點(diǎn),并且包含了一個(gè)路由表(Fingertable),其中路由表中存儲(chǔ)的節(jié)點(diǎn)數(shù)量也為IogN個(gè)。目前還沒(méi)有一種P2P系統(tǒng),能夠極大的緩解覆蓋網(wǎng)分區(qū),而且具有局部性的同時(shí),能夠保持負(fù)載均衡。
發(fā)明內(nèi)容本發(fā)明的目的在于提供一種P2P網(wǎng)絡(luò)構(gòu)建方法,其構(gòu)建的網(wǎng)絡(luò)極大的緩解覆蓋網(wǎng)分區(qū),具有局部性的同時(shí),能夠保持負(fù)載均衡本發(fā)明的另一目的在于提供一種數(shù)據(jù)定位方法,能夠有效的緩解網(wǎng)絡(luò)分割問(wèn)題,在保持負(fù)載均衡的同時(shí),并具有路由局部性特征,減少了通信時(shí)延,加快數(shù)據(jù)定位,提高了對(duì)用戶(hù)請(qǐng)求的響應(yīng)速度。本發(fā)明P2P網(wǎng)絡(luò)的構(gòu)建方法,包括以下步驟新節(jié)點(diǎn)η找到一個(gè)環(huán)形Ρ2Ρ網(wǎng)絡(luò)中的現(xiàn)有節(jié)點(diǎn)N,得到新節(jié)點(diǎn)η的ID中的地址信息;計(jì)算新節(jié)點(diǎn)η和現(xiàn)有節(jié)點(diǎn)N的地址信息中相同域的數(shù)量num;判斷num是否大于N節(jié)點(diǎn)所在本環(huán)的層次數(shù),如果不是,則節(jié)點(diǎn)N向?qū)哟螢閚um的環(huán)發(fā)出新節(jié)點(diǎn)加入請(qǐng)求;在層次為num的環(huán)中查找一后繼節(jié)點(diǎn)Nx,其響應(yīng)新節(jié)點(diǎn)η的加入請(qǐng)求;計(jì)算后繼節(jié)點(diǎn)Nx和新節(jié)點(diǎn)η相同域的數(shù)量num2,再設(shè)置num3等于num2減去后繼節(jié)點(diǎn)Nx所在本環(huán)的層次;判斷nUm3是否為0,如果不為0,則判斷后繼節(jié)點(diǎn)Nx有無(wú)子環(huán);如果無(wú)子環(huán),則新節(jié)點(diǎn)η將作為后繼節(jié)點(diǎn)Nx子環(huán)的第一個(gè)節(jié)點(diǎn)加入到后繼節(jié)點(diǎn)Nx的子環(huán)中,設(shè)置Nx子環(huán)的層次數(shù)為num加1。本發(fā)明P2P網(wǎng)絡(luò)的構(gòu)建方法,還包括若num3為0,則新節(jié)點(diǎn)η加入后繼節(jié)點(diǎn)Nx所在本環(huán)中。本發(fā)明Ρ2Ρ網(wǎng)絡(luò)的構(gòu)建方法,還包括若后繼節(jié)點(diǎn)Nx有子環(huán),則設(shè)置num為后繼節(jié)點(diǎn)Nx子環(huán)的層次,并向子環(huán)中的各個(gè)節(jié)點(diǎn)發(fā)送新節(jié)點(diǎn)加入請(qǐng)求,再重復(fù)上述在層次為num的環(huán)中查找一后繼節(jié)點(diǎn)Nx的步驟。本發(fā)明Ρ2Ρ網(wǎng)絡(luò)的構(gòu)建方法,還包括若num大于N節(jié)點(diǎn)所在本環(huán)的層次數(shù),則設(shè)置num3等于num減去N節(jié)點(diǎn)所在本環(huán)的層次數(shù),則重復(fù)上述判斷num3是否為0的步驟。本發(fā)明P2P網(wǎng)絡(luò)的構(gòu)建方法,現(xiàn)有節(jié)點(diǎn)N中含有地址-IP映射表。本發(fā)明P2P網(wǎng)絡(luò)的構(gòu)建方法,所述新節(jié)點(diǎn)η加入后繼節(jié)點(diǎn)Nx所在本環(huán)中的步驟包括后繼節(jié)點(diǎn)Nx的直接前驅(qū)節(jié)點(diǎn)更新其后繼節(jié)點(diǎn)列表,并把節(jié)點(diǎn)η增加到其路由表中;后繼節(jié)點(diǎn)Nx更新其直接前驅(qū)列表,并把節(jié)點(diǎn)η增加到其路由表中,節(jié)點(diǎn)η設(shè)置其直接前驅(qū)列表、直接后繼列表以及路由表,并設(shè)置節(jié)點(diǎn)η所在本環(huán)的層次等于后繼節(jié)點(diǎn)Nx所在本環(huán)的層次。本發(fā)明Ρ2Ρ網(wǎng)絡(luò)的構(gòu)建方法,所述新節(jié)點(diǎn)η將作為后繼節(jié)點(diǎn)Nx子環(huán)的第一個(gè)節(jié)點(diǎn)加入到后繼節(jié)點(diǎn)Nx的子環(huán)中的步驟包括后繼節(jié)點(diǎn)Nx更新其子環(huán)上的直接前驅(qū)列表,并把節(jié)點(diǎn)η增加到其子環(huán)路由表中,節(jié)點(diǎn)η設(shè)置其直接前驅(qū)列表和直接后繼列表以及路由表,并設(shè)置節(jié)點(diǎn)η所在本環(huán)的層次等于后繼節(jié)點(diǎn)Nx所在本環(huán)的層次加一。本發(fā)明的數(shù)據(jù)定位的方法,包括步驟需要查找數(shù)據(jù)的節(jié)點(diǎn)M計(jì)算出所要查找數(shù)據(jù)的ID;用數(shù)據(jù)ID與節(jié)點(diǎn)M自身ID中的比例碼進(jìn)行比較,相同比例域的數(shù)量設(shè)為num4;判斷num4是否大于節(jié)點(diǎn)N所在本環(huán)的層次數(shù),如果是,則設(shè)置num4等于節(jié)點(diǎn)M所在本環(huán)的層次數(shù);在層次為num4的環(huán)中查找響應(yīng)對(duì)數(shù)據(jù)ID的查找請(qǐng)求的響應(yīng)節(jié)點(diǎn)Nz;判斷響應(yīng)節(jié)點(diǎn)阪有無(wú)子環(huán),如果有,則響應(yīng)節(jié)點(diǎn)Nz發(fā)送查找請(qǐng)求到Nz所在的子環(huán)中繼續(xù)查找;在響應(yīng)節(jié)點(diǎn)阪的子環(huán)中查找響應(yīng)對(duì)數(shù)據(jù)ID的查找請(qǐng)求的另一個(gè)響應(yīng)節(jié)點(diǎn)Ny,將響應(yīng)節(jié)點(diǎn)Nz設(shè)置為響應(yīng)節(jié)點(diǎn)Ny,并重復(fù)上述判斷響應(yīng)節(jié)點(diǎn)Nz有無(wú)子環(huán)的步驟。本發(fā)明數(shù)據(jù)定位的方法,還包括若num4不大于節(jié)點(diǎn)N所在本環(huán)的層次數(shù),則節(jié)點(diǎn)M發(fā)送查找請(qǐng)求到層次為num4的環(huán),并重復(fù)上述在層次為num4的環(huán)中查找響應(yīng)對(duì)數(shù)據(jù)ID的查找請(qǐng)求的響應(yīng)節(jié)點(diǎn)Nz的步驟。本發(fā)明數(shù)據(jù)定位的方法,還包括響應(yīng)節(jié)點(diǎn)Nz無(wú)子環(huán),則確定所需要查找的數(shù)據(jù)就存儲(chǔ)在響應(yīng)節(jié)點(diǎn)Nz中,查找完畢。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)1、在每個(gè)環(huán)中,只要某一個(gè)節(jié)點(diǎn)有子環(huán),則必定有多條路徑連接該節(jié)點(diǎn)的直接前驅(qū)和直接后繼,增加了點(diǎn)連通度和邊連通度,極大的緩解了覆蓋網(wǎng)的分割問(wèn)題。2、節(jié)點(diǎn)的ID中包含了比例碼、地址碼和隨機(jī)碼,使得在地址碼中具有相同域的節(jié)點(diǎn)在同一個(gè)環(huán)中。提高了覆蓋網(wǎng)與實(shí)際物理網(wǎng)絡(luò)的一致性,減少了通信時(shí)延,并且不需要遍歷整個(gè)網(wǎng)絡(luò),加快了數(shù)據(jù)定位,降低了對(duì)用戶(hù)請(qǐng)求的響應(yīng)時(shí)間。此外由于還包含了比例碼,使得包含更多子環(huán)的節(jié)點(diǎn)其比例碼較短,能夠存儲(chǔ)更多的數(shù)據(jù),克服了負(fù)載不平衡的問(wèn)題。附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,并且構(gòu)成說(shuō)明書(shū)的一部分,與本發(fā)明的實(shí)施例一起用于解釋本發(fā)明,并不構(gòu)成本發(fā)明的限制。在附圖中圖1為多層環(huán)形P2P網(wǎng)絡(luò)的組成結(jié)構(gòu)模型。圖2為節(jié)點(diǎn)的比例編碼和地址信息編碼示意圖。圖3為每個(gè)節(jié)點(diǎn)中直接前驅(qū)列表、直接后繼列表和后繼列表的示意圖。圖4為當(dāng)前節(jié)點(diǎn)本環(huán)上直接前驅(qū)的直接后繼列表和直接后繼的直接前驅(qū)列表示意圖。圖5為當(dāng)前節(jié)點(diǎn)在本環(huán)和子環(huán)上的直接前驅(qū)列表和直接后繼列表示意圖。圖6為當(dāng)前節(jié)點(diǎn)子環(huán)上直接前驅(qū)和直接后繼的直接后繼列表和直接前驅(qū)列表。圖7為本發(fā)明P2P網(wǎng)絡(luò)構(gòu)建方法的流程圖。圖8為本發(fā)明數(shù)據(jù)定位方法的流程圖。具體實(shí)施例方式參照?qǐng)D1,本發(fā)明的多層環(huán)形P2P網(wǎng)絡(luò)是由多個(gè)屬于不同層次的環(huán)組成,每個(gè)環(huán)都是由多個(gè)節(jié)點(diǎn)按其節(jié)點(diǎn)ID的大小順時(shí)針?lè)较驑?gòu)成。節(jié)點(diǎn)是用于存儲(chǔ)用戶(hù)數(shù)據(jù)索引,每個(gè)節(jié)點(diǎn)都有一個(gè)唯一的ID,ID由比例碼、地址碼和隨機(jī)碼三部分組成。隨機(jī)碼是對(duì)節(jié)點(diǎn)相關(guān)屬性(如IP地址,端口)計(jì)算的HASH值,其長(zhǎng)度一般為160位,也可以是其它長(zhǎng)度。層次是指從環(huán)Ltl到Li所經(jīng)過(guò)的環(huán)的數(shù)量。所述Ltl環(huán)是指環(huán)中各個(gè)節(jié)點(diǎn)地址碼中沒(méi)有相同的地址域,它的層次即為0。Li環(huán)表示該環(huán)中各個(gè)節(jié)點(diǎn)的地址域中至少有i個(gè)相同的地址域,i小于或等于環(huán)中各個(gè)節(jié)點(diǎn)地址碼中相同地址域的最大數(shù)量,i稱(chēng)為L(zhǎng)i環(huán)的層次或者稱(chēng)為L(zhǎng)i環(huán)上的節(jié)點(diǎn)的層次。節(jié)點(diǎn)的層次與節(jié)點(diǎn)所在本環(huán)的層次是一樣的,對(duì)于環(huán)上的交接點(diǎn),交接點(diǎn)的層次為其所在本環(huán)的層次。交接點(diǎn)是指環(huán)與環(huán)之間連接的節(jié)點(diǎn),也即連接兩個(gè)環(huán)的節(jié)點(diǎn),交接點(diǎn)只連接層次相差為1的兩個(gè)環(huán)。交接點(diǎn)的層次為交接點(diǎn)本環(huán)的層次,比交接點(diǎn)子環(huán)的層次小1。如圖1所示,環(huán)Ltl表示該環(huán)中地址碼中共同前綴的數(shù)量為0,環(huán)Ll表示該環(huán)中各個(gè)節(jié)點(diǎn)的地址碼的共同前綴數(shù)量為1個(gè)…,依次類(lèi)推。每個(gè)環(huán)中的各個(gè)節(jié)點(diǎn)按照地址碼信息從A-Z的大小順序順時(shí)針排列在環(huán)中。環(huán)與環(huán)之間的交接節(jié)點(diǎn)叫交接點(diǎn)。環(huán)中各個(gè)節(jié)點(diǎn)用地址碼中對(duì)應(yīng)于層次的域來(lái)表示,如環(huán)Ltl中各個(gè)節(jié)點(diǎn)用地址碼的第一個(gè)域來(lái)表示,環(huán)Ll中的各個(gè)節(jié)點(diǎn)用地址域的第二個(gè)域來(lái)表示,…,依次類(lèi)推。此外,LO環(huán)的環(huán)的層次為0,LO環(huán)上節(jié)點(diǎn)的層次也為0。Ll環(huán)的層次為1,環(huán)中節(jié)點(diǎn)的層次也為1。CN是交接點(diǎn),它連接了LO環(huán)和Ll環(huán)。子環(huán)是指與交接點(diǎn)連接的兩個(gè)環(huán)中,層次較大的那個(gè)環(huán),交接點(diǎn)稱(chēng)該環(huán)為子環(huán)。本環(huán)是指環(huán)中節(jié)點(diǎn)的層次與環(huán)的層次相同的環(huán),環(huán)中的節(jié)點(diǎn)稱(chēng)該環(huán)為本環(huán)。父環(huán)是相對(duì)于子環(huán)上的節(jié)點(diǎn)而言的,與連接點(diǎn)連接的兩個(gè)環(huán)中,處于層次較大的那個(gè)環(huán)上的節(jié)點(diǎn)稱(chēng)層次較小的那個(gè)環(huán)為父環(huán)。在圖1中,節(jié)點(diǎn)CN稱(chēng)LO環(huán)為本環(huán),稱(chēng)Ll環(huán)為CN的子環(huán),Ll環(huán)中的節(jié)點(diǎn)CN.BJ稱(chēng)LO環(huán)為其父環(huán)。圖2是節(jié)點(diǎn)ID中比例碼和地址碼的示意圖。地址碼是用于表示各個(gè)節(jié)點(diǎn)的地址信息,由A-Z表示,且由多個(gè)域組成,每個(gè)域表示一個(gè)地理位置信息,域與域之間用“.,,隔開(kāi),用“/”表示結(jié)束。在第一層LO中各個(gè)節(jié)點(diǎn)的地址碼中并沒(méi)有共同的前綴,且各個(gè)節(jié)點(diǎn)按照字母的大小順時(shí)針排列。在第二層中的LlO的各個(gè)節(jié)點(diǎn)中地址碼有一個(gè)共同前綴為CN,Lll有一個(gè)共同前綴為US,在第三層中L20有2個(gè)共同前綴,分別為HB、CN,故第三層L20中的各個(gè)節(jié)點(diǎn)ID中地址碼的表示方式為CN.HB._/,L21中各個(gè)節(jié)點(diǎn)ID中地址碼的表示為US.υτ·_/。比例域是通過(guò)對(duì)各個(gè)節(jié)點(diǎn)比例進(jìn)行香農(nóng)編碼和求反運(yùn)算而計(jì)算出來(lái)的。節(jié)點(diǎn)比例是指某一個(gè)節(jié)點(diǎn)的所有子環(huán)的所有節(jié)點(diǎn)數(shù)量占該節(jié)點(diǎn)本環(huán)上所有節(jié)點(diǎn)的所有子環(huán)的所有節(jié)點(diǎn)數(shù)量的比例。因?yàn)楣?jié)點(diǎn)是動(dòng)態(tài)加入和離開(kāi)的,所以該值并不是一個(gè)確切的值,主要用于負(fù)載均衡。計(jì)算出了本環(huán)上各個(gè)節(jié)點(diǎn)的比例之后,再用香農(nóng)編碼等編碼方式對(duì)這些比例進(jìn)行編碼。最后再用本環(huán)與父環(huán)的交接節(jié)點(diǎn)的比例碼連上前面所計(jì)算的編碼就構(gòu)成了本環(huán)上各個(gè)節(jié)點(diǎn)的編碼。其表示方式與地址碼相似,對(duì)每個(gè)環(huán)上所計(jì)算的編碼用“.”隔開(kāi),分成多個(gè)域,并以“/”表示結(jié)束,如圖2所示,對(duì)各個(gè)節(jié)點(diǎn)之間的編碼是先用香農(nóng)編碼再用反碼的方式進(jìn)行編碼的,節(jié)點(diǎn)CN和節(jié)點(diǎn)US的比例碼為11和10,因?yàn)樗鼈冏迎h(huán)中含有的節(jié)點(diǎn)數(shù)量是相同的,所以比例碼的位數(shù)也相同,而節(jié)點(diǎn)AA和ZZ的編碼為0010和0001,節(jié)點(diǎn)HB的比例碼為“11.1/”,節(jié)點(diǎn)WH的比例碼為“11.1.1/,,。對(duì)于不匹配任何比例碼的數(shù)據(jù)ID,則放到比例碼大于數(shù)據(jù)ID且最接近數(shù)據(jù)ID的節(jié)點(diǎn)中,如,對(duì)于數(shù)據(jù)0011……,則它將存儲(chǔ)在比例碼為10的節(jié)點(diǎn)中。此外,在系統(tǒng)初始化完成之后,由于節(jié)點(diǎn)加入和退出的概率是均等的,所以可以近似的認(rèn)為節(jié)點(diǎn)的比例碼在一定的誤差范圍內(nèi)是穩(wěn)定的。如圖3所示,每個(gè)節(jié)點(diǎn)都有直接前驅(qū)列表DirectPredList、直接后繼列表DirectSuccList、路由表RoutingTable。直接前驅(qū)列表是指包含了多個(gè)直接前驅(qū)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),如鏈表、Vector等。直接前驅(qū)節(jié)點(diǎn)是指相對(duì)環(huán)中的某一特定節(jié)點(diǎn)Ni而言的,在環(huán)上與節(jié)點(diǎn)Ni鄰近的,且在Ni前面的節(jié)點(diǎn)即該節(jié)點(diǎn)地址碼小于節(jié)點(diǎn)Ni地址碼或該節(jié)點(diǎn)地址碼與節(jié)點(diǎn)Ni地址碼相同但是其隨機(jī)碼小于節(jié)點(diǎn)Ni隨機(jī)碼。當(dāng)環(huán)上只有一個(gè)節(jié)點(diǎn)時(shí),直接前驅(qū)節(jié)點(diǎn)就是節(jié)點(diǎn)Ni本身。在本發(fā)明所提供的系統(tǒng)中,節(jié)點(diǎn)M的直接前驅(qū)列表最多包含三個(gè)直接前驅(qū)節(jié)點(diǎn),分別是Ni本環(huán)上的節(jié)點(diǎn)N",以及在N"子環(huán)上與Nh相鄰的兩個(gè)子環(huán)節(jié)點(diǎn)。如果Np1沒(méi)有子環(huán),那么直接前驅(qū)列表就只包含Ni在本環(huán)上的節(jié)點(diǎn)隊(duì)+當(dāng)然節(jié)點(diǎn)Ni的直接前驅(qū)列表可以包含多于三個(gè)的直接前驅(qū)節(jié)點(diǎn),但是為了不至于有太大的維護(hù)開(kāi)銷(xiāo),在本發(fā)明所提供的系統(tǒng)只包含了三個(gè)直接前驅(qū)節(jié)點(diǎn)。此外,如果隊(duì)是交接點(diǎn),即Ni有子環(huán),那么Ni還具有用于子環(huán)的直接前驅(qū)列表,稱(chēng)為子環(huán)直接前驅(qū)列表,構(gòu)造規(guī)則同上。每個(gè)直接列表中包含了本環(huán)的直接前驅(qū)和子環(huán)的直接前驅(qū),直接前驅(qū)是指其ID最接近于當(dāng)前節(jié)點(diǎn)ID,但是于前節(jié)點(diǎn)ID逆時(shí)針?lè)较虻墓?jié)點(diǎn)。每個(gè)直接后繼列表包含了本環(huán)的直接后繼和子環(huán)的直接后繼,直接后繼是指其ID最接近于當(dāng)前節(jié)點(diǎn)ID,但是于當(dāng)前節(jié)點(diǎn)ID順時(shí)針?lè)较虻墓?jié)點(diǎn)。由于每個(gè)環(huán)中節(jié)點(diǎn)的數(shù)量比較少,用于本環(huán)和子環(huán)的路由表包含相應(yīng)環(huán)所有節(jié)點(diǎn)的信息。此外,每個(gè)環(huán)中(除LO環(huán))外,均包含兩個(gè)特殊的節(jié)點(diǎn),分別是處于交接節(jié)點(diǎn)在子環(huán)兩側(cè)的節(jié)點(diǎn)。它們都包含了交接點(diǎn)在本環(huán)上的直接前驅(qū)節(jié)點(diǎn)和直接后繼節(jié)點(diǎn)。設(shè)當(dāng)前節(jié)點(diǎn)為Ncot,直接前驅(qū)節(jié)點(diǎn)為N。urt,直接后繼節(jié)點(diǎn)為N。urt,NCUr在子環(huán)上的直接前驅(qū)為SN。urt,直接后繼為SNcmtlt5Ncur的直接前驅(qū)節(jié)點(diǎn)Neurt在本環(huán)上的直接后繼列表上的節(jié)點(diǎn)分別為N。m、SNcur+1,SNcur^1;Ncur的直接后繼節(jié)點(diǎn)N。m+1在本環(huán)上的直接前驅(qū)列表上的節(jié)點(diǎn)也分別為Neur、SNcur+1,SNeurt;Ncur用于本環(huán)的路由表上的節(jié)點(diǎn)為NO、……、Nn。直接后繼列表是指包含了多個(gè)直接后繼節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),如鏈表、Vector等。直接后繼節(jié)點(diǎn)是指相對(duì)環(huán)中的某一特定節(jié)點(diǎn)隊(duì)而言的,在環(huán)上與節(jié)點(diǎn)Ni鄰近的,且在Ni后面的節(jié)點(diǎn)即該節(jié)點(diǎn)地址碼大于節(jié)點(diǎn)Ni地址碼或該節(jié)點(diǎn)地址碼與節(jié)點(diǎn)Ni地址碼相同但是隨機(jī)碼大于節(jié)點(diǎn)Ni隨機(jī)碼。當(dāng)環(huán)上只有一個(gè)節(jié)點(diǎn)時(shí),直接后繼節(jié)點(diǎn)就是節(jié)點(diǎn)Ni本身。在本發(fā)明所提供的系統(tǒng)中,節(jié)點(diǎn)隊(duì)的直接后繼列表最多包含三個(gè)直接后繼節(jié)點(diǎn),分別是Ni本環(huán)上的節(jié)點(diǎn)Ni+1,以及在Nw子環(huán)上與Ni+1相鄰的兩個(gè)子環(huán)節(jié)點(diǎn)。如果Nw沒(méi)有子環(huán),那么直接后繼列表就只包含Ni在本環(huán)上的節(jié)點(diǎn)Ni+1。當(dāng)然節(jié)點(diǎn)Ni的直接后繼列表可以包含多于三個(gè)的直接后繼節(jié)點(diǎn),但是為了不至于有太大的維護(hù)開(kāi)銷(xiāo),在本發(fā)明所提供的系統(tǒng)只包含了三個(gè)直接后繼節(jié)點(diǎn)。此外,如果Ni是交接點(diǎn),即Ni有子環(huán),那么Ni還具有用于子環(huán)的直接后繼列表,稱(chēng)為子環(huán)直接后繼列表,構(gòu)造規(guī)則同上。此外,為了緩解覆蓋網(wǎng)分區(qū)的問(wèn)題,交接點(diǎn)Nj在子環(huán)上的兩個(gè)鄰居節(jié)點(diǎn)SNf1和SNj+1,它們還得存儲(chǔ)交接點(diǎn)Ni在其本環(huán)上的兩個(gè)鄰居節(jié)點(diǎn),即Ni在本環(huán)的直接前驅(qū)節(jié)點(diǎn)N"和直接后繼節(jié)點(diǎn)Ni+1,這兩個(gè)節(jié)點(diǎn)將分別存儲(chǔ)在SNp1(SNJ+1也一樣)的直接前驅(qū)列表和直接后繼列表中。節(jié)點(diǎn)N"的直接后繼列表中存儲(chǔ)了節(jié)點(diǎn)NpSNh1和SNi+1,節(jié)點(diǎn)Ni+1的直接前驅(qū)節(jié)點(diǎn)中也存儲(chǔ)了節(jié)點(diǎn)NpSNg和SNi+1。所以從節(jié)點(diǎn)Nh到節(jié)點(diǎn)Nw的路徑由原來(lái)的Ng-Ni-Nw這一條路徑增加至三條,其中多增加的兩條路徑分別為N^-SNh-Nw和Ng-SNw-Nw,因此只有當(dāng)隊(duì)、SNh和SNi+1三個(gè)節(jié)點(diǎn)同時(shí)失效時(shí),才會(huì)產(chǎn)生網(wǎng)絡(luò)分區(qū)。增加邊邊量度不但可以極大的降低交接點(diǎn)子環(huán)和其本環(huán)分區(qū)的概率,而且可以對(duì)請(qǐng)求起到分流的作用,減輕交接點(diǎn)的負(fù)載。路由表是指包含了其它節(jié)點(diǎn)ID、IP地址以及轉(zhuǎn)發(fā)端口等路由信息的數(shù)據(jù)結(jié)構(gòu)。由于整個(gè)系統(tǒng)被分成了很多環(huán),每個(gè)環(huán)中節(jié)點(diǎn)數(shù)量比較少,所以環(huán)中的每一節(jié)點(diǎn)都包含了本環(huán)上其它所有節(jié)點(diǎn)的路由信息,因此在環(huán)中,某一個(gè)節(jié)點(diǎn)要向另外一個(gè)節(jié)點(diǎn)發(fā)送請(qǐng)求的時(shí)候,只需要一跳就可以達(dá)到目的節(jié)點(diǎn)。如果環(huán)中的某一節(jié)點(diǎn)Ni是交接點(diǎn),即有子環(huán),則節(jié)點(diǎn)Ni還具有一個(gè)包含了子環(huán)節(jié)點(diǎn)路由信息的路由表,稱(chēng)為子環(huán)路由表。此外,路由表中的路由信息是按照節(jié)點(diǎn)ID中地址碼按照字母表順序排序的。當(dāng)要查找某一節(jié)點(diǎn)Ni的存儲(chǔ)位置時(shí),即確定M的直接前驅(qū)節(jié)點(diǎn)和直接后繼節(jié)點(diǎn),具體查找規(guī)則如下判定節(jié)點(diǎn)Nj的地址碼是否在路由表的Ni和Nk節(jié)點(diǎn)之間,其中路由表中存儲(chǔ)的節(jié)點(diǎn)的總數(shù)量為m,i=0,···,m-1,k=(j+1)%m。如果Ni<NkMNi<Nj<Nk,或者Ni>Nk&&(Nj>Ni或者Nj<Nk),那么Nj就存儲(chǔ)在Ni與Nk之間,Nj的直接前驅(qū)節(jié)點(diǎn)為Ni,直接后繼節(jié)點(diǎn)為Nk。其中節(jié)點(diǎn)大小比較,都是指按照節(jié)點(diǎn)英文字母表的順序比較節(jié)點(diǎn)地址碼的大小。此外,如果環(huán)中各個(gè)節(jié)點(diǎn)的地址碼都是相等的,那么將比較它們的隨機(jī)碼,比較規(guī)則同上,只不過(guò)節(jié)點(diǎn)大小的比較,是指比較節(jié)點(diǎn)中隨機(jī)碼的大小。找到Nj的直接后繼節(jié)點(diǎn)Nk后,Nk將會(huì)響應(yīng)節(jié)點(diǎn)的請(qǐng)求。參照?qǐng)D4,當(dāng)前節(jié)點(diǎn)CN在本環(huán)上的直接前驅(qū)節(jié)點(diǎn)為AR,AR的直接后繼N。u,、SN。urt、SNcur^1分別為CN、CNBJ、CNTJ;CN在本環(huán)上的直接后繼節(jié)點(diǎn)為EG,EG的直接前驅(qū)N。m、SN。urt、SNd分別為CN、CNBJ,CNTJ;CN本環(huán)上的路由表中的節(jié)點(diǎn)為GR、KR…。Ncur本身在本環(huán)上的直接前驅(qū)列表為N-fSN-fSN。^Ncot在子環(huán)上的直接前驅(qū)列表為SN。urt及SNeurt子環(huán)上緊鄰SN。urt的兩個(gè)節(jié)點(diǎn);Ncot本身在本環(huán)上的直接后繼列表為Ncur+1>SNcur+2,SNcur,Ncur在子環(huán)上的直接后繼列表為SNeurt及SNc^1子環(huán)上緊鄰SNc^1的兩個(gè)節(jié)點(diǎn)。參照?qǐng)D5,當(dāng)前節(jié)點(diǎn)CN在本環(huán)上的直接前驅(qū)列表中的節(jié)點(diǎn)為AR,以及AR子環(huán)上緊鄰AR的兩個(gè)節(jié)點(diǎn)AR_(AR若沒(méi)有子環(huán),則AR_為空),CN在子環(huán)上的直接前驅(qū)列表中的節(jié)點(diǎn)為CNTJ,以及CNTJ子環(huán)上緊鄰CNTJ的兩個(gè)節(jié)點(diǎn)CNTJ_(CNTJ若沒(méi)有子環(huán),則CNTJ_為空);CN在本環(huán)上的直接后繼列表中的節(jié)點(diǎn)為EG,以及EG子環(huán)上緊鄰EG的兩個(gè)節(jié)點(diǎn)EG(EG若沒(méi)有子環(huán),則EG_為空);CN在子環(huán)上的直接后繼列表中的節(jié)點(diǎn)為CNBJ,以及CNBJ子環(huán)上緊鄰CNBJ的兩個(gè)節(jié)點(diǎn)CNBJ_(CNBJ若沒(méi)有子環(huán),則CNBJ_為空)。當(dāng)前節(jié)點(diǎn)Ncm子環(huán)上的直接前驅(qū)節(jié)點(diǎn)SN。urt,直接后繼節(jié)點(diǎn)為SNc^115SNcur^1在本環(huán)上的直接后繼為SN。U,,由于SNeur即為Neur,所以SNeurt的直接后繼列表中只有一個(gè)后繼節(jié)點(diǎn)SN·。SNc^1在子環(huán)上的直接后繼節(jié)點(diǎn)同圖4實(shí)施例所示,故在此省略。此外SN。urt在直接前驅(qū)列表中還需要保存一個(gè)父環(huán)中的節(jié)點(diǎn)N。urt;SNcur+1在本環(huán)上的直接前驅(qū)為SN。m,由于SNcot即為Ncot,所以SNc^1的直接前驅(qū)列表中只有一個(gè)前驅(qū)節(jié)點(diǎn)SN。m。SN。urt在子環(huán)上的直接前驅(qū)節(jié)點(diǎn)同圖4實(shí)施例所示,故在此省略。此外SNeurt在直接后繼列表中還需要保存一個(gè)父環(huán)中的節(jié)點(diǎn)N。urt。參照?qǐng)D6,當(dāng)前節(jié)點(diǎn)CN,其子環(huán)上直接前驅(qū)為CNTJ,直接后繼為CNBJ。CNTJ在本環(huán)上的直接后繼列表中就一個(gè)后繼節(jié)點(diǎn)為CN,此外還保存了當(dāng)前節(jié)點(diǎn)的后繼節(jié)點(diǎn)EG;CNBJ在本環(huán)上的直接前驅(qū)列表中也就一個(gè)前驅(qū)節(jié)點(diǎn)為CN,此外還保存了當(dāng)前節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)AR。如圖7所示,本發(fā)明環(huán)形網(wǎng)絡(luò)的構(gòu)建方法,包括以下步驟(1)新節(jié)點(diǎn)η找到一個(gè)環(huán)形Ρ2Ρ網(wǎng)絡(luò)(Chord)中現(xiàn)有節(jié)點(diǎn)N,N含有地址IP映射表,得到該新節(jié)點(diǎn)η的ID中的地址信息。(2)計(jì)算η和N的地址信息中相同域的數(shù)量num。(3)判斷num是否大于N節(jié)點(diǎn)所在本環(huán)的層次數(shù),如果是,則轉(zhuǎn)到步驟0),否則轉(zhuǎn)到步驟(5)。(4)設(shè)置num3等于num減去N節(jié)點(diǎn)所在本環(huán)的層次數(shù)。(5)N將向?qū)哟螢閚um的環(huán)發(fā)出新節(jié)點(diǎn)加入請(qǐng)求。(6)在層次為num的環(huán)中查找一后繼結(jié)點(diǎn)Nx,其響應(yīng)新節(jié)點(diǎn)η的加入請(qǐng)求。(7)計(jì)算后繼結(jié)點(diǎn)Nx和η的共同域的數(shù)量num2,再設(shè)置num3等于num2減去Nx所在本環(huán)的層次。(8)判斷num3是否為0,如果num3等于0,則轉(zhuǎn)到步驟(9),否則轉(zhuǎn)到步驟(10)。(9)新節(jié)點(diǎn)η加入后繼結(jié)點(diǎn)Nx所在本環(huán)中,后繼結(jié)點(diǎn)Nx更新其直接前驅(qū)列表,并把節(jié)點(diǎn)η增加到其路由表中。此外節(jié)點(diǎn)η將設(shè)置其直接前驅(qū)列表和直接后繼列表以及路由表,并設(shè)置節(jié)點(diǎn)η所在本環(huán)的層次等于后繼節(jié)點(diǎn)Nx所在本環(huán)的層次。至此新節(jié)點(diǎn)的加入請(qǐng)求完成。(10)判斷后繼結(jié)點(diǎn)Nx有無(wú)子環(huán),如果無(wú),則轉(zhuǎn)到步驟11,否則轉(zhuǎn)到步驟(12)。(11)新節(jié)點(diǎn)η將作為后繼結(jié)點(diǎn)Nx子環(huán)的第一個(gè)節(jié)點(diǎn)加入到后繼結(jié)點(diǎn)Nx的子環(huán)中。Nx更新其子環(huán)上的直接前驅(qū)列表,并把節(jié)點(diǎn)η增加到其子環(huán)路由表中。此外節(jié)點(diǎn)η將設(shè)置其直接前驅(qū)列表和直接后繼列表以及路由表,并設(shè)置節(jié)點(diǎn)η所在本環(huán)的層層次等于后繼節(jié)點(diǎn)Nx所在本環(huán)的層次加一。至此新節(jié)點(diǎn)的加入請(qǐng)求完成。(12)設(shè)置num為后繼節(jié)點(diǎn)Nx子環(huán)所在的層次。并向子環(huán)中的各個(gè)節(jié)點(diǎn)發(fā)送新節(jié)點(diǎn)加入的請(qǐng)求,再轉(zhuǎn)到步驟(6)。如圖8所示,數(shù)據(jù)定位的方法,包括步驟(1)需要查找數(shù)據(jù)的節(jié)點(diǎn)M計(jì)算出所要查找數(shù)據(jù)的ID。(2)用數(shù)據(jù)ID與該節(jié)點(diǎn)自身ID中的比例碼進(jìn)行比較,相同比例域的數(shù)量設(shè)為num4o(3)判斷num4是否大于M節(jié)點(diǎn)所在本環(huán)的層次數(shù),如果是,則轉(zhuǎn)到步驟⑷,否則轉(zhuǎn)到步驟(5)。(4)設(shè)置num4等于M節(jié)點(diǎn)所在本環(huán)的層次數(shù)。(5)節(jié)點(diǎn)M發(fā)送查找請(qǐng)求到層次為num4的環(huán)。(6)在層次為num4的環(huán)中查找響應(yīng)對(duì)數(shù)據(jù)ID的查找請(qǐng)求的響應(yīng)節(jié)點(diǎn)Nz(7)判斷阪有無(wú)子環(huán),如果有,則轉(zhuǎn)到步驟8,否則轉(zhuǎn)到步驟(10)。(8)響應(yīng)節(jié)點(diǎn)阪發(fā)送查找請(qǐng)求到Nz所在的子環(huán)中繼續(xù)查找。(9)在阪的子環(huán)中查找響應(yīng)對(duì)數(shù)據(jù)ID的查找請(qǐng)求的另一個(gè)響應(yīng)節(jié)點(diǎn)Ny。將Nz設(shè)置為Ny。再轉(zhuǎn)到步驟(7)。(10)確定所需要查找的數(shù)據(jù)就存儲(chǔ)在響應(yīng)節(jié)點(diǎn)Nz中,查找完畢。以上所述僅是本發(fā)明的具體實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本
技術(shù)領(lǐng)域:
的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干的改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。權(quán)利要求1.一種P2P網(wǎng)絡(luò)的構(gòu)建方法,其特征在于,包括以下步驟新節(jié)點(diǎn)η找到一個(gè)環(huán)形Ρ2Ρ網(wǎng)絡(luò)中的現(xiàn)有節(jié)點(diǎn)N,得到新節(jié)點(diǎn)η的ID中的地址信息;計(jì)算新節(jié)點(diǎn)η和現(xiàn)有節(jié)點(diǎn)N的地址信息中相同域的數(shù)量num;判斷num是否大于N節(jié)點(diǎn)所在本環(huán)的層次數(shù),如果不是,則節(jié)點(diǎn)N向?qū)哟螢閚um的環(huán)發(fā)出新節(jié)點(diǎn)加入請(qǐng)求;在層次為num的環(huán)中查找一后繼節(jié)點(diǎn)Nx,其響應(yīng)新節(jié)點(diǎn)η的加入請(qǐng)求;計(jì)算后繼節(jié)點(diǎn)Nx和新節(jié)點(diǎn)η相同域的數(shù)量num2,再設(shè)置num3等于num2減去后繼節(jié)點(diǎn)Nx所在本環(huán)的層次;判斷num3是否為0,如果不為0,則判斷后繼節(jié)點(diǎn)Nx有無(wú)子環(huán);如果無(wú)子環(huán),則新節(jié)點(diǎn)η將作為后繼節(jié)點(diǎn)Nx子環(huán)的第一個(gè)節(jié)點(diǎn)加入到后繼節(jié)點(diǎn)Nx的子環(huán)中,設(shè)置Nx子環(huán)的層次數(shù)為num加1。2.根據(jù)權(quán)利要求1所述的P2P網(wǎng)絡(luò)的構(gòu)建方法,其特征在于,還包括若num3為0,則新節(jié)點(diǎn)η加入后繼節(jié)點(diǎn)Nx所在本環(huán)中。3.根據(jù)權(quán)利要求1所述的Ρ2Ρ網(wǎng)絡(luò)的構(gòu)建方法,其特征在于,還包括若后繼節(jié)點(diǎn)Nx有子環(huán),則設(shè)置rmm為后繼節(jié)點(diǎn)Nx子環(huán)的層次,并向子環(huán)中的各個(gè)節(jié)點(diǎn)發(fā)送新節(jié)點(diǎn)加入請(qǐng)求,再重復(fù)上述在層次為num的環(huán)中查找一后繼節(jié)點(diǎn)Nx的步驟。4.根據(jù)權(quán)利要求1所述的P2P網(wǎng)絡(luò)的構(gòu)建方法,其特征在于,還包括若num大于N節(jié)點(diǎn)所在本環(huán)的層次數(shù),則設(shè)置num3等于num減去N節(jié)點(diǎn)所在本環(huán)的層次數(shù),則重復(fù)上述判斷num3是否為0的步驟。5.根據(jù)權(quán)利要求1所述的P2P網(wǎng)絡(luò)的構(gòu)建方法,其特征在于,現(xiàn)有節(jié)點(diǎn)N中含有地址-IP映射表。6.根據(jù)權(quán)利要求1所述的P2P網(wǎng)絡(luò)的構(gòu)建方法,其特征在于,所述新節(jié)點(diǎn)η加入后繼節(jié)點(diǎn)Nx所在本環(huán)中的步驟包括后繼節(jié)點(diǎn)Nx的直接前驅(qū)節(jié)點(diǎn)更新其后繼節(jié)點(diǎn)列表,并把節(jié)點(diǎn)η增加到其路由表中;后繼節(jié)點(diǎn)Nx更新其直接前驅(qū)列表,并把節(jié)點(diǎn)η增加到其路由表中;節(jié)點(diǎn)η設(shè)置其直接前驅(qū)列表、直接后繼列表以及路由表,并設(shè)置節(jié)點(diǎn)η所在本環(huán)的層次等于后繼節(jié)點(diǎn)Nx所在本環(huán)的層次。7.根據(jù)權(quán)利要求1所述的Ρ2Ρ網(wǎng)絡(luò)的構(gòu)建方法,其特征在于,所述新節(jié)點(diǎn)η將作為后繼節(jié)點(diǎn)Nx子環(huán)的第一個(gè)節(jié)點(diǎn)加入到后繼節(jié)點(diǎn)Nx的子環(huán)中的步驟包括后繼節(jié)點(diǎn)Nx更新其子環(huán)上的直接前驅(qū)列表,并把節(jié)點(diǎn)η增加到其子環(huán)路由表中,節(jié)點(diǎn)η設(shè)置其直接前驅(qū)列表和直接后繼列表以及路由表,并設(shè)置節(jié)點(diǎn)η所在本環(huán)的層次等于后繼節(jié)點(diǎn)Nx所在本環(huán)的層次加一。8.一種數(shù)據(jù)定位的方法,其特征在于,包括步驟需要查找數(shù)據(jù)的節(jié)點(diǎn)M計(jì)算出所要查找數(shù)據(jù)的ID;用數(shù)據(jù)ID與節(jié)點(diǎn)M自身ID中的比例碼進(jìn)行比較,相同比例域的數(shù)量設(shè)為num4;判斷num4是否大于節(jié)點(diǎn)M所在本環(huán)的層次數(shù),如果是,則設(shè)置num4等于節(jié)點(diǎn)M所在本環(huán)的層次數(shù);在層次為num4的環(huán)中查找響應(yīng)對(duì)數(shù)據(jù)ID的查找請(qǐng)求的響應(yīng)節(jié)點(diǎn)Nz;判斷響應(yīng)節(jié)點(diǎn)Nz有無(wú)子環(huán),如果有,則響應(yīng)節(jié)點(diǎn)Nz發(fā)送查找請(qǐng)求到Nz所在的子環(huán)中繼續(xù)查找;在響應(yīng)節(jié)點(diǎn)Nz的子環(huán)中查找響應(yīng)對(duì)數(shù)據(jù)ID的查找請(qǐng)求的另一個(gè)響應(yīng)節(jié)點(diǎn)Ny,將響應(yīng)節(jié)點(diǎn)Nz設(shè)置為響應(yīng)節(jié)點(diǎn)Ny,并重復(fù)上述判斷響應(yīng)節(jié)點(diǎn)Nz有無(wú)子環(huán)的步驟。9.根據(jù)權(quán)利要求8所述的數(shù)據(jù)定位的方法,其特征在于,還包括若num4不大于節(jié)點(diǎn)M所在本環(huán)的層次數(shù),則節(jié)點(diǎn)M發(fā)送查找請(qǐng)求到層次為num4的環(huán),并重復(fù)上述在層次為num4的環(huán)中查找響應(yīng)對(duì)數(shù)據(jù)ID的查找請(qǐng)求的響應(yīng)節(jié)點(diǎn)Nz的步驟。10.根據(jù)權(quán)利要求8所述的數(shù)據(jù)定位的方法,其特征在于,還包括響應(yīng)節(jié)點(diǎn)Nz無(wú)子環(huán),則確定所需要查找的數(shù)據(jù)就存儲(chǔ)在響應(yīng)節(jié)點(diǎn)Nz中,查找完畢。全文摘要本發(fā)明公開(kāi)了一種環(huán)形P2P網(wǎng)絡(luò)的構(gòu)建方法,在每個(gè)環(huán)中,只要某一個(gè)節(jié)點(diǎn)有子環(huán),則必定有多條路徑連接該節(jié)點(diǎn)的直接前驅(qū)和直接后繼,增加了點(diǎn)連通度和邊連通度,極大的緩解了覆蓋網(wǎng)的分割問(wèn)題,此外,節(jié)點(diǎn)的ID中包含了比例碼、地址碼和隨機(jī)碼,使得在地址碼中具有相同域的節(jié)點(diǎn)在同一個(gè)環(huán)中。提高了覆蓋網(wǎng)與實(shí)際物理網(wǎng)絡(luò)的一致性,減少了通信時(shí)延,并且不需要遍歷整個(gè)網(wǎng)絡(luò),加快了數(shù)據(jù)定位,降低了對(duì)用戶(hù)請(qǐng)求的響應(yīng)時(shí)間。此外由于還包含了比例碼,使得包含更多子環(huán)的節(jié)點(diǎn)其比例碼較短,能夠存儲(chǔ)更多的數(shù)據(jù),極大的緩解了由于路由局部性所帶來(lái)的負(fù)載不平衡的問(wèn)題。文檔編號(hào)H04L29/08GK102333116SQ20111028007公開(kāi)日2012年1月25日申請(qǐng)日期2011年9月20日優(yōu)先權(quán)日2011年9月20日發(fā)明者盧萍,周功業(yè),賴(lài)明輝,陳進(jìn)才,黃楊鋒申請(qǐng)人:華中科技大學(xué)