專利名稱:一種常數(shù)復(fù)雜度的對(duì)等網(wǎng)絡(luò)目的資源定位方法
技術(shù)領(lǐng)域:
本發(fā)明涉及到互聯(lián)網(wǎng)中分布式資源的搜索與定位技術(shù),主要涉及到一種在對(duì)等網(wǎng)絡(luò)中通過網(wǎng)絡(luò)節(jié)點(diǎn)之間常數(shù)跳的網(wǎng)絡(luò)路由快速查找所需網(wǎng)絡(luò)資源的定位方法。
背景技術(shù):
隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)和互聯(lián)網(wǎng)的高速發(fā)展,世界各地的人們都可以通過互聯(lián)網(wǎng)分享所需的資源,互聯(lián)網(wǎng)絡(luò)縮短了人與人之間的距離。然而,隨著互聯(lián)網(wǎng)應(yīng)用的不斷深入,日常生活中各種資源信息與互聯(lián)網(wǎng)的關(guān)系日益密切,人們對(duì)資源共享和資源交換的需求也越來越廣泛,為了滿足人們?nèi)找嬖鲩L的資源共享與交流的需求,快速而又有效地定位目標(biāo)資源已成為人們迫切需要解決的問題。對(duì)等網(wǎng)絡(luò)技術(shù)的產(chǎn)生和發(fā)展,在解決這一問題上起到了積極的作用。對(duì)等網(wǎng)絡(luò)技術(shù)是上個(gè)世紀(jì)末發(fā)展起來的一種計(jì)算機(jī)網(wǎng)絡(luò)技術(shù),它強(qiáng)調(diào)所有網(wǎng)絡(luò)節(jié)點(diǎn)(如計(jì)算機(jī)、數(shù)字終端等,簡稱“節(jié)點(diǎn)”)都是對(duì)等的實(shí)體,每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)既可以是資 源與服務(wù)的提供者,又可以是資源與服務(wù)的接受者。對(duì)等網(wǎng)絡(luò)技術(shù)與傳統(tǒng)網(wǎng)絡(luò)技術(shù)(如客戶端/服務(wù)器)不同,對(duì)等網(wǎng)絡(luò)技術(shù)擁有充分利用邊緣、閑雜、零碎的網(wǎng)絡(luò)、存儲(chǔ)和計(jì)算資源的能力,具有高度的擴(kuò)展性與容錯(cuò)性,它可以有效避免服務(wù)過載、資源瓶頸等問題,在學(xué)術(shù)界、工業(yè)界、用戶中都受到廣泛關(guān)注和普遍歡迎。現(xiàn)行的對(duì)等網(wǎng)絡(luò)技術(shù),大多數(shù)采用分布式哈希表,采用這種技術(shù)的對(duì)等網(wǎng)絡(luò)沒有設(shè)置主控服務(wù)器,所有的網(wǎng)絡(luò)路由都由節(jié)點(diǎn)完成,其中每個(gè)節(jié)點(diǎn)只需要負(fù)責(zé)網(wǎng)絡(luò)中所知道的路由選擇、部分信息存儲(chǔ)與查詢,通過網(wǎng)絡(luò)中所有節(jié)點(diǎn)的共同努力來完成整個(gè)網(wǎng)絡(luò)所需的路由選擇和信息存儲(chǔ)與查詢。分布式哈希表技術(shù)具有如下主要特點(diǎn)
分布性網(wǎng)絡(luò)中節(jié)點(diǎn)間沒有集中式和中央式的控制機(jī)制。擴(kuò)展性網(wǎng)絡(luò)可以擁有從幾十個(gè)節(jié)點(diǎn)到千萬個(gè)節(jié)點(diǎn)不等規(guī)模,網(wǎng)絡(luò)具有較好的可擴(kuò)展性。容錯(cuò)性網(wǎng)絡(luò)在節(jié)點(diǎn)不斷加入、離開、故障的動(dòng)態(tài)變化情況下,仍然能保證網(wǎng)絡(luò)可靠有效地工作?,F(xiàn)在大多數(shù)對(duì)等網(wǎng)絡(luò)協(xié)議都是采用分布式哈希表,例如Chord、Pastry> CAN、Kademlia等,其中最流行的是Kademlia協(xié)議,采用它的對(duì)等網(wǎng)絡(luò)應(yīng)用系統(tǒng)主要有eMule、BitTorrent、BitComet、BitSpirit、迅雷、快車等。雖然現(xiàn)在大多數(shù)對(duì)等網(wǎng)絡(luò)協(xié)議在高動(dòng)態(tài)變化的網(wǎng)絡(luò)中擁有一定的分布性、擴(kuò)展性、容錯(cuò)性,但是它們?cè)诙ㄎ毁Y源的時(shí)候的查詢次數(shù)與網(wǎng)絡(luò)中節(jié)點(diǎn)數(shù)量成正比,即節(jié)點(diǎn)越多,查詢次數(shù)也就越多;節(jié)點(diǎn)越少,查詢次數(shù)也就越少。在一個(gè)大規(guī)模的網(wǎng)絡(luò)中,這些協(xié)議需要多次查詢才能找到目標(biāo)資源,在目標(biāo)資源查詢過程中耗費(fèi)大量的網(wǎng)絡(luò)帶寬資源,容易產(chǎn)生大量網(wǎng)絡(luò)流量,造成網(wǎng)絡(luò)局部擁塞現(xiàn)象的出現(xiàn)。
發(fā)明內(nèi)容
本發(fā)明的目的是為了克服上述現(xiàn)有技術(shù)的不足,提供一種常數(shù)跳對(duì)等網(wǎng)絡(luò)目標(biāo)資源定位方法,應(yīng)用于大規(guī)模的網(wǎng)絡(luò)中,能減少網(wǎng)絡(luò)目標(biāo)資源定位時(shí)的查詢的次數(shù),實(shí)現(xiàn)在在高度動(dòng)態(tài)變化的互聯(lián)網(wǎng)中通過常數(shù)復(fù)雜度的路由過程就可以快速定位到網(wǎng)絡(luò)中分布式目標(biāo)資源,在大部分情況下只需要一次查詢就能完成目標(biāo)資源的定位,同時(shí)只需要很少網(wǎng)絡(luò)開銷來定位資源和維護(hù)整個(gè)對(duì)等網(wǎng)絡(luò)。為實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案如下
一種常數(shù)復(fù)雜度的對(duì)等網(wǎng)絡(luò)目的資源定位方法,其特征是,在對(duì)等網(wǎng)絡(luò)中,節(jié)點(diǎn)NI進(jìn)行資源定位的步驟包括
1)節(jié)點(diǎn)NI在自己路由表中搜索距離所求資源最近的節(jié)點(diǎn)N2,然后節(jié)點(diǎn)NI向節(jié)點(diǎn)N2發(fā)送資源查詢的請(qǐng)求;
2)如果節(jié)點(diǎn)N2在線并且節(jié)點(diǎn)N2存儲(chǔ)有所求資源信息,則由節(jié)點(diǎn)N2發(fā)送所求資源信息給NI,完成資源定位,否則執(zhí)行步驟3),資源信息至少由資源標(biāo)識(shí)符ID和資源索引value組成,資源標(biāo)識(shí)符ID為對(duì)等網(wǎng)絡(luò)上資源的標(biāo)識(shí)符,需要保證每個(gè)資源的資源標(biāo)識(shí)符ID都是 唯一的;資源索引value是記錄擁有資源的節(jié)點(diǎn)信息的文件,節(jié)點(diǎn)信息指節(jié)點(diǎn)和資源的標(biāo)識(shí)符ID、網(wǎng)絡(luò)IP地址、網(wǎng)絡(luò)通訊使用的端口等信息;
3)如果節(jié)點(diǎn)N2在線,則由節(jié)點(diǎn)N2發(fā)送一個(gè)或多個(gè)最接近所求資源的節(jié)點(diǎn)信息給節(jié)點(diǎn)NI,讓節(jié)點(diǎn)NI更新自己的路由表;
4)如果節(jié)點(diǎn)NI接收不到節(jié)點(diǎn)N2的返回信息,節(jié)點(diǎn)NI將從自己的路由表中搜索沒有搜索過的距離所求資源最近的節(jié)點(diǎn)N3,并向節(jié)點(diǎn)N3發(fā)送資源查詢的請(qǐng)求;
5)如果節(jié)點(diǎn)N2返回的信息中沒有所求資源信息,而只有節(jié)點(diǎn)信息,則節(jié)點(diǎn)NI從這些節(jié)點(diǎn)信息和路由表中選出沒有搜索過的距離所求資源最近的節(jié)點(diǎn)N3,并向節(jié)點(diǎn)N3發(fā)送資源查詢的請(qǐng)求;
6)節(jié)點(diǎn)NI將重復(fù)這個(gè)過程,直到定位到資源或者查詢過K個(gè)節(jié)點(diǎn)都沒有定位成功,則不再繼續(xù)向其他節(jié)點(diǎn)發(fā)送查詢資源的請(qǐng)求,其中,K為規(guī)定的常數(shù),即查詢路由的跳數(shù),其取值范圍為2至20 ;
所述對(duì)等網(wǎng)絡(luò)包括五種通信過程探詢、存儲(chǔ)、獲取資源、刷新、獲取路由表,所述探詢是指探測(cè)一個(gè)節(jié)點(diǎn)是否在線,所述存儲(chǔ)是指通知節(jié)點(diǎn)存儲(chǔ)資源信息,所述獲取資源是從節(jié)點(diǎn)獲取資源信息,所述刷新是指向節(jié)點(diǎn)發(fā)布路由的變化消息,所述獲取路由表是某個(gè)節(jié)點(diǎn)從其它節(jié)點(diǎn)獲取網(wǎng)絡(luò)節(jié)點(diǎn)信息。所述對(duì)等網(wǎng)絡(luò)的每個(gè)節(jié)點(diǎn)都維護(hù)一張全局的路由表,所述路由表由所有在線節(jié)點(diǎn)的節(jié)點(diǎn)信息組成。所述對(duì)等網(wǎng)絡(luò)中,節(jié)點(diǎn)NI發(fā)布共享資源的步驟包括
1)節(jié)點(diǎn)NI確定所述資源的標(biāo)識(shí)符ID,并生成資源信息;
2)節(jié)點(diǎn)NI查找自己的路由表,找到距離所述資源最近的規(guī)定數(shù)量的節(jié)點(diǎn)的ID;
3)節(jié)點(diǎn)NI向所述規(guī)定數(shù)量的節(jié)點(diǎn)發(fā)送存儲(chǔ)消息,讓這些節(jié)點(diǎn)存儲(chǔ)資源信息;
4)如果某個(gè)節(jié)點(diǎn)沒有返回響應(yīng)信息,則進(jìn)行步驟5),否則,進(jìn)行步驟6);
5)向沒有發(fā)送過存儲(chǔ)信息的節(jié)點(diǎn)中的最接近所述資源的節(jié)點(diǎn)發(fā)送存儲(chǔ)信息,讓該節(jié)點(diǎn)存儲(chǔ)資源信息;
6)如果所述規(guī)定數(shù)量的節(jié)點(diǎn)全部進(jìn)行存儲(chǔ)操作并得到回復(fù),則完成資源發(fā)布,否則進(jìn)行步驟5);
上述的一種常數(shù)復(fù)雜度的對(duì)等網(wǎng)絡(luò)目的資源定位方法,還包括以下三種情況時(shí)維護(hù)路由信息的步驟
(1)節(jié)點(diǎn)加入所述對(duì)等網(wǎng)絡(luò)時(shí)
A.欲加入節(jié)點(diǎn)將已知節(jié)點(diǎn)信息加入自己的路由表,然后向已知節(jié)點(diǎn)請(qǐng)求自己附近的節(jié)點(diǎn)信息;
B.在得到附近的節(jié)點(diǎn)信息后,欲加入節(jié)點(diǎn)設(shè)置刷新域?yàn)檎麄€(gè)網(wǎng)絡(luò),對(duì)距離自己最近的節(jié)點(diǎn)進(jìn)行刷新操作,向其發(fā)送獲取路由表請(qǐng)求,獲取全局路由表;
C.節(jié)點(diǎn)收到全局刷新請(qǐng)求后,以自己為開始節(jié)點(diǎn),進(jìn)行全網(wǎng)路由信息的更新,并且回復(fù)欲加入節(jié)點(diǎn)全局路由表;
D.欲加入節(jié)點(diǎn)收到全局路由表后就完成將收到的全局路由表整合為自己路由表,如果沒有收到回復(fù),則欲加入節(jié)點(diǎn)對(duì)沒有進(jìn)行刷新操作的離自己最近的下一個(gè)節(jié)點(diǎn)進(jìn)行刷新操 作,重復(fù)這個(gè)過程,直到有節(jié)點(diǎn)回復(fù)消息或者聯(lián)系過規(guī)定數(shù)量的節(jié)點(diǎn)都沒有回復(fù);
(2)節(jié)點(diǎn)退出所述對(duì)等網(wǎng)絡(luò)時(shí)
A.欲退出節(jié)點(diǎn)從自己路由表中找出離自己最近的節(jié)點(diǎn);
B.欲退出節(jié)點(diǎn)設(shè)置刷新域?yàn)檎麄€(gè)網(wǎng)絡(luò),對(duì)所述最近的節(jié)點(diǎn)進(jìn)行刷新操作;
C.如果所述最近的節(jié)點(diǎn)回復(fù)消息,則欲退出節(jié)點(diǎn)離開網(wǎng)絡(luò);如果所述最近的節(jié)點(diǎn)沒有回復(fù)消息,則欲退出節(jié)點(diǎn)對(duì)沒有進(jìn)行刷新操作的離自己最近的下一個(gè)節(jié)點(diǎn)進(jìn)行刷新操作,重復(fù)這個(gè)過程,直到有節(jié)點(diǎn)回復(fù)消息或者聯(lián)系過規(guī)定數(shù)量的節(jié)點(diǎn)都沒有回復(fù),然后下線;
D.如果有節(jié)點(diǎn)回復(fù)消息,則由回復(fù)消息的節(jié)點(diǎn)作為開始節(jié)點(diǎn),進(jìn)行全網(wǎng)路由信息的更
新;
(3)節(jié)點(diǎn)意外離線時(shí)
A.發(fā)現(xiàn)意外離線節(jié)點(diǎn)后,發(fā)現(xiàn)節(jié)點(diǎn)從自己路由表中找出離意外離線節(jié)點(diǎn)最近的節(jié)點(diǎn)。B.發(fā)現(xiàn)節(jié)點(diǎn)設(shè)置刷新域?yàn)檎麄€(gè)網(wǎng)絡(luò),對(duì)所述最近的節(jié)點(diǎn)進(jìn)行刷新操作。C.如果所述最近的節(jié)點(diǎn)回復(fù)消息,則網(wǎng)絡(luò)中其他節(jié)點(diǎn)的路由更新由所述最近的節(jié)點(diǎn)負(fù)責(zé);如果所述最近的節(jié)點(diǎn)沒有回復(fù)消息,則發(fā)現(xiàn)節(jié)點(diǎn)向沒有進(jìn)行刷新操作的離意外離線節(jié)點(diǎn)最近的下一個(gè)節(jié)點(diǎn)進(jìn)行刷新操作,重復(fù)這個(gè)過程,直到有節(jié)點(diǎn)回復(fù)消息。D.如有節(jié)點(diǎn)回復(fù)消息,則由回復(fù)消息的節(jié)點(diǎn)作為開始節(jié)點(diǎn),進(jìn)行全網(wǎng)路由信息的更新。所述全網(wǎng)路由信息的更新,步驟包括
O由所述的開始節(jié)點(diǎn)分別按其路由表的正向和逆向兩個(gè)方向上對(duì)所述對(duì)等網(wǎng)絡(luò)各節(jié)點(diǎn)上的路由信息進(jìn)行刷新操作,兩個(gè)方向的刷新范圍各為所述對(duì)等網(wǎng)絡(luò)全部節(jié)點(diǎn)的一半;
2)所述開始節(jié)點(diǎn)從所述兩個(gè)方向的刷新范圍中分別選出一個(gè)可用的中間節(jié)點(diǎn),并向所述中間節(jié)點(diǎn)發(fā)送刷新請(qǐng)求,然后分別將所述兩個(gè)方向的刷新范圍中從中間節(jié)點(diǎn)到結(jié)尾節(jié)點(diǎn)的各個(gè)節(jié)點(diǎn)的刷新交由各自的中間節(jié)點(diǎn)負(fù)責(zé);
3)所述開始節(jié)點(diǎn)分別在所述的兩個(gè)方向重復(fù)步驟2),直到所述兩個(gè)方向上都完成了并發(fā)次數(shù)α次的刷新操作或者剩下的刷新范圍內(nèi)的節(jié)點(diǎn)少于刷新數(shù)量η,其中,并發(fā)次數(shù)α是某個(gè)方向刷新中最大的網(wǎng)絡(luò)并發(fā)數(shù),取值范圍為2至10 ;刷新數(shù)量η是調(diào)整刷新方式的閾值,取值范圍為2至8;如果其中一個(gè)方向上完成了并發(fā)次數(shù)α次的刷新操作,則所述開始節(jié)點(diǎn)對(duì)其該方向上最近節(jié)點(diǎn)進(jìn)行刷新操作,并將該方向剩下的刷新范圍的刷新操作指派給所述最近節(jié)點(diǎn);如果剩下的刷新范圍中的節(jié)點(diǎn)少于刷新數(shù)量η,則所述開始節(jié)點(diǎn)對(duì)其最近節(jié)點(diǎn)進(jìn)行刷新操作,所述的最近節(jié)點(diǎn)再對(duì)該方向上下一個(gè)節(jié)點(diǎn)進(jìn)行刷新操作,直到最后一個(gè)節(jié)點(diǎn)。所述的對(duì)等網(wǎng)絡(luò)中,所有的節(jié)點(diǎn)和資源都通過哈希算法得到一個(gè)唯一的ID。本發(fā)明的優(yōu)點(diǎn)是
1.常數(shù)復(fù)雜度的查詢就可以快速成功的定位到目標(biāo)資源;
2.在大部分情況下只需要一次查詢就可以快速成功的定位到目標(biāo)資源;
3.維護(hù)整個(gè)對(duì)稱網(wǎng)絡(luò)正常運(yùn)行只需要極小網(wǎng)絡(luò)開銷;
4.網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)的負(fù)載平衡,每個(gè)節(jié)點(diǎn)都承擔(dān)了維護(hù)網(wǎng)絡(luò)的責(zé)任,整個(gè)任務(wù)分擔(dān)是均衡平均,不存在網(wǎng)絡(luò)開銷特別大的節(jié)點(diǎn)。
具體實(shí)施方式
下面結(jié)合具體實(shí)施方式
對(duì)本發(fā)明做進(jìn)一步的描述。本發(fā)明方法包括分配標(biāo)識(shí)符、通信過程、路由表、資源發(fā)布、資源定位、路由信息維護(hù)等內(nèi)容。通過將網(wǎng)絡(luò)中節(jié)點(diǎn)進(jìn)行哈希編碼,形成一個(gè)環(huán)形的路由表,通過對(duì)路由表中的節(jié)點(diǎn)分發(fā)網(wǎng)絡(luò)的更新消息,做到維護(hù)全體節(jié)點(diǎn)的全局路由表,從而實(shí)現(xiàn)在在高度動(dòng)態(tài)變化的互聯(lián)網(wǎng)中通過常數(shù)復(fù)雜度的路由過程就可以快速定位到網(wǎng)絡(luò)中分布式目標(biāo)資源,大部分情況下每次定位目標(biāo)資源都只需要一次查詢,同時(shí)只需要很少網(wǎng)絡(luò)開銷來定位資源和維護(hù)整個(gè)對(duì)等網(wǎng)絡(luò)。下面結(jié)合具體實(shí)施方式
對(duì)本發(fā)明做進(jìn)一步的描述。本發(fā)明提供的一種常數(shù)復(fù)雜度的對(duì)等網(wǎng)絡(luò)目的資源定位方法,在對(duì)等網(wǎng)絡(luò)中,節(jié)點(diǎn)NI進(jìn)行資源定位的步驟有
1)節(jié)點(diǎn)NI在自己路由表中搜索距離所求資源最近的節(jié)點(diǎn)N2,然后節(jié)點(diǎn)NI向節(jié)點(diǎn)N2發(fā)送資源查詢的請(qǐng)求;
2)如果節(jié)點(diǎn)N2在線并且節(jié)點(diǎn)N2存儲(chǔ)有所求資源信息,則由節(jié)點(diǎn)N2發(fā)送所求資源信息給NI,完成資源定位,否則執(zhí)行步驟3);
3)如果節(jié)點(diǎn)N2在線,則由節(jié)點(diǎn)N2發(fā)送一個(gè)或多個(gè)最接近所求資源的節(jié)點(diǎn)信息給節(jié)點(diǎn)NI,讓節(jié)點(diǎn)NI更新自己的路由表;
4)如果節(jié)點(diǎn)NI接收不到節(jié)點(diǎn)N2的返回信息,節(jié)點(diǎn)NI將從自己的路由表中搜索沒有搜索過的距離所求資源最近的節(jié)點(diǎn)N3,并向節(jié)點(diǎn)N3發(fā)送資源查詢的請(qǐng)求;
5)如果節(jié)點(diǎn)N2返回的信息中沒有所求資源信息,而只有節(jié)點(diǎn)信息,則節(jié)點(diǎn)NI從這些節(jié)點(diǎn)信息和路由表中選出沒有搜索過的距離所求資源最近的節(jié)點(diǎn)N3,并向節(jié)點(diǎn)N3發(fā)送資源查詢的請(qǐng)求;
6)節(jié)點(diǎn)NI將重復(fù)這個(gè)過程,直到定位到資源或者查詢過K個(gè)節(jié)點(diǎn)都沒有定位成功,則不再繼續(xù)向其他節(jié)點(diǎn)發(fā)送查詢資源的請(qǐng)求,其中,K為規(guī)定的常數(shù),即查詢路由的跳數(shù),其取值范圍為2至20 ;
其中,N1、N2、N3為對(duì)等網(wǎng)絡(luò)中的節(jié)點(diǎn);資源信息至少由資源標(biāo)識(shí)符ID和資源索引value組成,資源標(biāo)識(shí)符ID為對(duì)等網(wǎng)絡(luò)上資源的標(biāo)識(shí)符,需要保證每個(gè)資源的資源標(biāo)識(shí)符ID都是唯一的;資源索引value是記錄擁有資源的節(jié)點(diǎn)信息的文件,節(jié)點(diǎn)信息指節(jié)點(diǎn)和資源的標(biāo)識(shí)符ID、網(wǎng)絡(luò)IP地址、網(wǎng)絡(luò)通訊使用的端口等信息;在對(duì)等網(wǎng)絡(luò)中,各個(gè)節(jié)點(diǎn)之間需要進(jìn)行通信,在上述對(duì)等網(wǎng)絡(luò)采用的通信方式包括五種過程探詢、存儲(chǔ)、獲取資源、刷新、獲取路由表。探詢用來探測(cè)一個(gè)節(jié)點(diǎn)是否在線。假設(shè)有網(wǎng)絡(luò)中存在節(jié)點(diǎn)N69和節(jié)點(diǎn)N104,不存在節(jié)點(diǎn)N17。當(dāng)N69向N104發(fā)送一個(gè)探詢消息時(shí),N104回對(duì)N69進(jìn)行回復(fù),N69收到回復(fù)消息后即知道N104在線。當(dāng)N69向N17發(fā)送一個(gè)探詢消息時(shí),因?yàn)镹17不在網(wǎng)絡(luò)中,所以N69沒有接收到N17的回復(fù)消息,這時(shí)N69不能確認(rèn)N17在線。存儲(chǔ)用于通知節(jié)點(diǎn)存儲(chǔ)資源信息。假設(shè)有網(wǎng)絡(luò)中只存在節(jié)點(diǎn)N69和節(jié)點(diǎn)N104,節(jié)點(diǎn)N105已下線。節(jié)點(diǎn)N69的路由表中有節(jié)點(diǎn)N104和節(jié)點(diǎn)N105的信息,并且假設(shè)K為I。當(dāng)節(jié)點(diǎn)N69發(fā)布資源R105時(shí),首先從自己的路由表中尋找到最接近資源R105的節(jié)點(diǎn)N105,然后節(jié)點(diǎn)N69向節(jié)點(diǎn)N105發(fā)送存儲(chǔ)消息,因?yàn)橘Y源R105不在線,所以節(jié)點(diǎn)N69沒有接受到節(jié)點(diǎn)N105的回復(fù)消息,然后節(jié)點(diǎn)N69從自己的路由表中找出距離資源R105最近而又沒有進(jìn)行過存儲(chǔ)操作的節(jié)點(diǎn)N104,并對(duì)節(jié)點(diǎn)N104進(jìn)行存儲(chǔ)操作,節(jié)點(diǎn)N104接收到存儲(chǔ)消息后發(fā)送一個(gè)回復(fù)消息給節(jié)點(diǎn)N69,這時(shí)節(jié)點(diǎn)N69完成資源發(fā)布。其中節(jié)點(diǎn)N69對(duì)節(jié)點(diǎn)N104和節(jié) 點(diǎn)N105的操作就是存儲(chǔ)操作。獲取資源用于一個(gè)節(jié)點(diǎn)向其他節(jié)點(diǎn)獲取資源信息。假設(shè)有網(wǎng)絡(luò)中只存在節(jié)點(diǎn)N69和節(jié)點(diǎn)N104,節(jié)點(diǎn)N105已下線。節(jié)點(diǎn)N69的路由表中有節(jié)點(diǎn)N104和節(jié)點(diǎn)N105的信息,節(jié)點(diǎn)N104儲(chǔ)存了資源R105的資源信息。當(dāng)節(jié)點(diǎn)N69獲取需要資源R105時(shí),首先從自己的路由表中尋找到最接近資源R105的節(jié)點(diǎn)N105,然后節(jié)點(diǎn)N69向節(jié)點(diǎn)N105發(fā)送獲取資源消息,因?yàn)橘Y源R105不在線,所以節(jié)點(diǎn)N69沒有接受到節(jié)點(diǎn)N105的回復(fù)消息,然后節(jié)點(diǎn)N69從自己的路由表中找出距離資源R105最近而又沒有進(jìn)行過獲取資源操作的節(jié)點(diǎn)N104,并對(duì)節(jié)點(diǎn)N104進(jìn)行獲取資源操作,節(jié)點(diǎn)N104接收到獲取資源消息后發(fā)送一個(gè)回復(fù)消息給節(jié)點(diǎn)N69,這個(gè)回復(fù)消息內(nèi)包含了資源R105的資源信息,節(jié)點(diǎn)N69成功獲取資源。其中節(jié)點(diǎn)N69對(duì)節(jié)點(diǎn)N104和節(jié)點(diǎn)N105的操作就是獲取資源操作。刷新用于一個(gè)節(jié)點(diǎn)向其它節(jié)點(diǎn)發(fā)布路由的變化消息。假設(shè)網(wǎng)絡(luò)中存在節(jié)點(diǎn)N17、節(jié)點(diǎn)N18、節(jié)點(diǎn)N19、節(jié)點(diǎn)N20以及一個(gè)或多個(gè)其它節(jié)點(diǎn),并發(fā)次數(shù)α為2,刷新數(shù)量η為2。其中,并發(fā)次數(shù)α是某個(gè)方向刷新中最大的網(wǎng)絡(luò)并發(fā)數(shù),刷新數(shù)量η是調(diào)整刷新方式的閾值。當(dāng)Ν17需要在節(jié)點(diǎn)Ν17至節(jié)點(diǎn)Ν20間更新路由信息,首先向節(jié)點(diǎn)Ν18至節(jié)點(diǎn)Ν20范圍內(nèi)的中間節(jié)點(diǎn)Ν19發(fā)送一個(gè)刷新信息,通知Ν19,并讓將節(jié)點(diǎn)Ν19至節(jié)點(diǎn)Ν20的范圍內(nèi),包括節(jié)點(diǎn)Ν19和節(jié)點(diǎn)Ν20以及一個(gè)或多個(gè)其它各個(gè)節(jié)點(diǎn)更新路由信息的操作交由節(jié)點(diǎn)Ν19負(fù)責(zé)。當(dāng)Ν17收到Ν19的消息后,則完成一次刷新操作。獲取路由表用于一個(gè)節(jié)點(diǎn)向其它節(jié)點(diǎn)獲取全部或者部分網(wǎng)絡(luò)節(jié)點(diǎn)信息。假設(shè)節(jié)點(diǎn)Ν17剛剛上線,只知道網(wǎng)絡(luò)中另外兩個(gè)節(jié)點(diǎn)Ν33和Ν88,標(biāo)識(shí)符的取值范圍是(Γ127。則節(jié)點(diǎn)Ν17可以向節(jié)點(diǎn)Ν33發(fā)出獲取路由表消息,讓節(jié)點(diǎn)Ν33發(fā)送ID范圍(Γ63的節(jié)點(diǎn)信息給自己;向節(jié)點(diǎn)Ν88發(fā)送獲取路由表消息,讓其返回ID范圍6Γ127的節(jié)點(diǎn)信息。本發(fā)明方法的對(duì)等網(wǎng)絡(luò)中,為了可以只通過一次查詢就能找到所需要的資源,每個(gè)節(jié)點(diǎn)都維護(hù)一張全局的路由表,該路由表由所有已知在線節(jié)點(diǎn)的節(jié)點(diǎn)信息組成。將所有可能的ID值從小到大排列,然后最小值和最大值連接形成一個(gè)環(huán),這就是路由表。每個(gè)節(jié)點(diǎn)都可以快速查詢自己的路由表,擁有獲得是否擁有特定標(biāo)識(shí)符ID的節(jié)點(diǎn)信息或者離特定標(biāo)識(shí)符ID節(jié)點(diǎn)最近或者最遠(yuǎn)的一組節(jié)點(diǎn)的能力。兩個(gè)標(biāo)識(shí)符為分別為IDl與ID2的節(jié)點(diǎn),其距離計(jì)算的方法是
5*=腦奪/瑪-IDtI
其中,S為兩個(gè)節(jié)點(diǎn)的距離,I為標(biāo)識(shí)符空間的最大值。這種計(jì)算方式保證了從標(biāo)識(shí)符為IDl的節(jié)點(diǎn)到標(biāo)識(shí)符為ID2的節(jié)點(diǎn)的距離與從標(biāo)識(shí)符為ID2的節(jié)點(diǎn)到標(biāo)識(shí)符為IDl的節(jié)點(diǎn)的距離相同,也就是節(jié)點(diǎn)間距離計(jì)算是沒有方向的。例如在一個(gè)標(biāo)識(shí)符空間為20到27的網(wǎng)絡(luò)中,要計(jì)算網(wǎng)絡(luò)中ID為15和88的兩個(gè)節(jié)點(diǎn)的距離S,則計(jì)算方式和結(jié)果為
S=Inmft-Im1-JDd7Sj=S5 :
當(dāng)某個(gè)節(jié)點(diǎn)有資源在網(wǎng)絡(luò)中共享時(shí),為了讓其他節(jié)點(diǎn)可以快速定位到該資源,需要在對(duì)等網(wǎng)絡(luò)中發(fā)布資源。發(fā)布資源就是把資源的索引文件均勻的分散到對(duì)等網(wǎng)絡(luò)中。在本發(fā)明方法的上述對(duì)等網(wǎng)絡(luò)中,節(jié)點(diǎn)NI發(fā)布共享資源的步驟包括
I)欲發(fā)布資源的節(jié)點(diǎn)NI對(duì)資源進(jìn)行計(jì)算,得到資源的標(biāo)識(shí)符ID,并生成資源信息。2)節(jié)點(diǎn)NI查找自己的路由表,找到距離資源最近的規(guī)定數(shù)量K個(gè)節(jié)點(diǎn)的ID。3)節(jié)點(diǎn)NI向該規(guī)定數(shù)量K個(gè)節(jié)點(diǎn)發(fā)送存儲(chǔ)消息,讓這些節(jié)點(diǎn)存儲(chǔ)資源信息。4)如果有節(jié)點(diǎn)沒有返回響應(yīng)信息,則進(jìn)行步驟5),否則,進(jìn)行步驟6)。5)繼續(xù)向沒有發(fā)送過存儲(chǔ)信息的節(jié)點(diǎn)中的最接近該資源的節(jié)點(diǎn)發(fā)送存儲(chǔ)信息,讓該節(jié)點(diǎn)存儲(chǔ)資源信息。6)如果已對(duì)規(guī)定數(shù)量K個(gè)節(jié)點(diǎn)進(jìn)行存儲(chǔ)操作并得到回復(fù),則完成資源發(fā)布,否則進(jìn)行步驟5)。下面用例子對(duì)資源發(fā)布的步驟作進(jìn)一步的描述。假設(shè)網(wǎng)絡(luò)中節(jié)點(diǎn)NI發(fā)布資源R69,這時(shí)網(wǎng)絡(luò)中僅存在節(jié)點(diǎn)N1、N33、N64、N69、N108,N1路由表中有節(jié)點(diǎn)N33、N64、N69、N71、N108的信息。網(wǎng)絡(luò)的標(biāo)識(shí)符空間為20到27,規(guī)定數(shù)量K為2。節(jié)點(diǎn)NI發(fā)布資源R69的過程為
1)節(jié)點(diǎn)NI生成資源R69的資源信息;
2)節(jié)點(diǎn)NI查找自己路由表,找到距離資源最近的兩個(gè)節(jié)點(diǎn)N69和N71;
3)節(jié)點(diǎn)NI向兩個(gè)節(jié)點(diǎn)N69和N71發(fā)送存儲(chǔ)消息;
4)節(jié)點(diǎn)N69接收到存儲(chǔ)信息,存儲(chǔ)資源R69的資源信息,并發(fā)送回復(fù)消息;
5)節(jié)點(diǎn)NI只收到節(jié)點(diǎn)N69的回復(fù)而沒有收到節(jié)點(diǎn)N71的回復(fù)消息;
6)節(jié)點(diǎn)NI在自己的路由表中尋找沒有發(fā)送過存儲(chǔ)消息的節(jié)點(diǎn)中距離資源R69最近的節(jié)點(diǎn);
7)節(jié)點(diǎn)NI按步驟6)找到節(jié)點(diǎn)N64,并向節(jié)點(diǎn)N64發(fā)送存儲(chǔ)信息;
8)節(jié)點(diǎn)N64接收到存儲(chǔ)信息,存儲(chǔ)資源R69的資源信息,并發(fā)送回復(fù)消息;
9)節(jié)點(diǎn)NI收到節(jié)點(diǎn)N64的回復(fù)消息,完成資源發(fā)布。本發(fā)明方法中,為了保證一次查詢就可以成功定位資源,還采取維護(hù)路由信息的方法,針對(duì)節(jié)點(diǎn)加入網(wǎng)絡(luò)、節(jié)點(diǎn)退出網(wǎng)絡(luò)、節(jié)點(diǎn)意外離線三種情況進(jìn)行路由信息的維護(hù)。一個(gè)節(jié)點(diǎn)欲加入本發(fā)明方法的上述對(duì)等網(wǎng)絡(luò)時(shí),必須至少知道一個(gè)已經(jīng)在該對(duì)等網(wǎng)絡(luò)中的節(jié)點(diǎn),節(jié)點(diǎn)加入網(wǎng)絡(luò)時(shí)路由信息的維護(hù)過程如下A.欲加入節(jié)點(diǎn)將已知節(jié)點(diǎn)信息加入自己的路由表,然后向已知節(jié)點(diǎn)請(qǐng)求自己附近的節(jié)點(diǎn)信息;
B.在得到附近的節(jié)點(diǎn)信息后,欲加入節(jié)點(diǎn)設(shè)置刷新域?yàn)檎麄€(gè)網(wǎng)絡(luò),對(duì)距離自己最近的節(jié)點(diǎn)進(jìn)行刷新操作,向其發(fā)送獲取路由表請(qǐng)求,獲取全局路由表;
C.距離欲加入節(jié)點(diǎn)最近的節(jié)點(diǎn)收到全局刷新請(qǐng)求后,以自己為開始節(jié)點(diǎn),進(jìn)行全網(wǎng)路由信息的更新,并且回復(fù)欲加入節(jié)點(diǎn)全局路由表;
D.欲加入節(jié)點(diǎn)收到全局路由表后就完成將收到的全局路由表整合為自己路由表,如果沒有收到回復(fù),則欲加入節(jié)點(diǎn)對(duì)沒有進(jìn)行刷新操作的離自己最近的下一個(gè)節(jié)點(diǎn)進(jìn)行刷新操作,重復(fù)這個(gè)過程,直到有節(jié)點(diǎn)回復(fù)消息或者聯(lián)系過規(guī)定數(shù)量的節(jié)點(diǎn)都沒有回復(fù)。對(duì)節(jié)點(diǎn)加入網(wǎng)絡(luò)時(shí)路由信息的維護(hù)的步驟作進(jìn)一步的描述。假設(shè)網(wǎng)絡(luò)中有節(jié)點(diǎn) N17、N23、N65、N96和N107,節(jié)點(diǎn)N18準(zhǔn)備加入網(wǎng)絡(luò),節(jié)點(diǎn)N18只知道節(jié)點(diǎn)N23,網(wǎng)絡(luò)中所有節(jié)點(diǎn)都有全局路由信息。節(jié)點(diǎn)N18加入網(wǎng)絡(luò)時(shí)的路由信息的維護(hù)過程如下 A.節(jié)點(diǎn)N18向節(jié)點(diǎn)N23發(fā)送獲取路由表信息,并告知節(jié)點(diǎn)N23自己加入網(wǎng)絡(luò)。B.節(jié)點(diǎn)N23接收到消息后,查找自己路由表,沒有發(fā)現(xiàn)節(jié)點(diǎn)N18,則判斷節(jié)點(diǎn)N18確實(shí)為新上線的節(jié)點(diǎn)。C.節(jié)點(diǎn)N23將自己的路由表中N18附近的節(jié)點(diǎn)信息發(fā)給發(fā)送給節(jié)點(diǎn)N18。D.節(jié)點(diǎn)N18用收到的路由表信息擴(kuò)展自己的路由表,然后在自己的路由表中查找距離自己最近的節(jié)點(diǎn)。E.假設(shè)節(jié)點(diǎn)N18查找到的距離自己最近的節(jié)點(diǎn)為節(jié)點(diǎn)N17,節(jié)點(diǎn)N18對(duì)節(jié)點(diǎn)N17進(jìn)行刷新操作,刷新范圍為整個(gè)網(wǎng)絡(luò)。F.節(jié)點(diǎn)N17在收到節(jié)點(diǎn)N18的請(qǐng)求后,向其發(fā)送全局路由表,由節(jié)點(diǎn)N17作為開始節(jié)點(diǎn)進(jìn)行全網(wǎng)路由的更新。節(jié)點(diǎn)退出網(wǎng)絡(luò)是指節(jié)點(diǎn)主動(dòng)離開網(wǎng)絡(luò),并且在離開前向網(wǎng)絡(luò)發(fā)出刷新操作,在全網(wǎng)更新路由信息的情況,此時(shí)路由信息的維護(hù)過程如下
A.欲退出節(jié)點(diǎn)從自己路由表中找出離自己最近的節(jié)點(diǎn);
B.欲退出節(jié)點(diǎn)設(shè)置刷新域?yàn)檎麄€(gè)網(wǎng)絡(luò),對(duì)所述最近的節(jié)點(diǎn)進(jìn)行刷新操作;
C.如果所述最近的節(jié)點(diǎn)回復(fù)消息,則欲退出節(jié)點(diǎn)離開網(wǎng)絡(luò);如果所述最近的節(jié)點(diǎn)沒有回復(fù)消息,則欲退出節(jié)點(diǎn)對(duì)沒有進(jìn)行刷新操作的離自己最近的下一個(gè)節(jié)點(diǎn)進(jìn)行刷新操作,重復(fù)這個(gè)過程,直到有節(jié)點(diǎn)回復(fù)消息或者聯(lián)系過規(guī)定數(shù)量的節(jié)點(diǎn)都沒有回復(fù),然后下線;
D.如果有節(jié)點(diǎn)回復(fù)消息,則由回復(fù)消息的節(jié)點(diǎn)作為開始節(jié)點(diǎn),進(jìn)行全網(wǎng)路由信息的更
新;
對(duì)節(jié)點(diǎn)退出網(wǎng)絡(luò)時(shí)路由信息的維護(hù)的步驟作進(jìn)一步的描述。假設(shè)網(wǎng)絡(luò)中有節(jié)點(diǎn)N17、N18、N23、N65、N96和N107,節(jié)點(diǎn)N18準(zhǔn)備退出網(wǎng)絡(luò),網(wǎng)絡(luò)中所有節(jié)點(diǎn)都有全局路由信息。節(jié)點(diǎn)N18退出網(wǎng)絡(luò)時(shí)的路由信息的維護(hù)過程如下
A.節(jié)點(diǎn)N18找到離自己最近的節(jié)點(diǎn)NI7,對(duì)節(jié)點(diǎn)NI7進(jìn)行刷新操作,讓其在全網(wǎng)進(jìn)行路由刷新操作,告知自己離開網(wǎng)絡(luò)的消息。B.節(jié)點(diǎn)N17接收到消息后,回復(fù)節(jié)點(diǎn)N18。C.如果節(jié)點(diǎn)N18接受到節(jié)點(diǎn)N17回復(fù)信息,則離開網(wǎng)絡(luò)。否則對(duì)N23進(jìn)行與對(duì)NI 7—樣的操作。
D.節(jié)點(diǎn)N17查找自己路由表中節(jié)點(diǎn)N18的節(jié)點(diǎn)信息,查找到后即刪除節(jié)點(diǎn)N18的節(jié)點(diǎn)信息,并由節(jié)點(diǎn)N17作為開始節(jié)點(diǎn)進(jìn)行全網(wǎng)路由的更新。除了節(jié)點(diǎn)自發(fā)的加入和退出網(wǎng)絡(luò)外,還存在節(jié)點(diǎn)意外離線這種情況,對(duì)于離線時(shí)沒有對(duì)網(wǎng)絡(luò)進(jìn)行節(jié)點(diǎn)退出時(shí)全網(wǎng)路由更新的節(jié)點(diǎn)離線,都視為節(jié)點(diǎn)意外離線。意外離線的節(jié)點(diǎn)的路由信息維護(hù)由距離該意外離線節(jié)點(diǎn)最近的節(jié)點(diǎn)負(fù)責(zé),此時(shí)的路由信息的維護(hù)過程為
A.發(fā)現(xiàn)意外離線節(jié)點(diǎn)后,發(fā)現(xiàn)節(jié)點(diǎn)從自己路由表中找出離意外離線節(jié)點(diǎn)最近的節(jié)點(diǎn)。B.發(fā)現(xiàn)節(jié)點(diǎn)設(shè)置刷新域?yàn)檎麄€(gè)網(wǎng)絡(luò),對(duì)所述最近的節(jié)點(diǎn)進(jìn)行刷新操作。C.如果所述最近的節(jié)點(diǎn)回復(fù)消息,則網(wǎng)絡(luò)中其他節(jié)點(diǎn)的路由更新由所述最近的節(jié)點(diǎn)負(fù)責(zé);如果所述最近的節(jié)點(diǎn)沒有回復(fù)消息,則發(fā)現(xiàn)節(jié)點(diǎn)向沒有進(jìn)行刷新操作的離意外離線節(jié)點(diǎn)最近的下一個(gè)節(jié)點(diǎn)進(jìn)行刷新操作,重復(fù)這個(gè)過程,直到有節(jié)點(diǎn)回復(fù)消息。D.如有節(jié)點(diǎn)回復(fù)消息,則由回復(fù)消息的節(jié)點(diǎn)作為開始節(jié)點(diǎn),進(jìn)行全網(wǎng)路由信息的 更新。對(duì)節(jié)點(diǎn)意外離線時(shí)路由信息的維護(hù)的步驟作進(jìn)一步的描述。假設(shè)網(wǎng)絡(luò)中有節(jié)點(diǎn)N17、N18、N23、N65、N96和N107,節(jié)點(diǎn)N18因某種原因沒有退出網(wǎng)絡(luò)就掉線了,網(wǎng)絡(luò)中所有節(jié)點(diǎn)都有全局路由信息。節(jié)點(diǎn)N18意外離線時(shí)的路由信息的維護(hù)過程如下
A.發(fā)現(xiàn)有節(jié)點(diǎn)意外離線的發(fā)現(xiàn)節(jié)點(diǎn)N107向節(jié)點(diǎn)N18發(fā)送信息。B.如果節(jié)點(diǎn)N107沒有收到節(jié)點(diǎn)N18的回復(fù)信息,并且如果連續(xù)兩次都沒有收到返回消息,則判斷節(jié)點(diǎn)N18意外離線。C.節(jié)點(diǎn)107在自己路由表中尋找距離節(jié)點(diǎn)N18最近的節(jié)點(diǎn),假設(shè)尋找到的最近的節(jié)點(diǎn)為節(jié)點(diǎn)N17。D.節(jié)點(diǎn)N107向節(jié)點(diǎn)N17發(fā)送刷新請(qǐng)求,刷新范圍為整個(gè)網(wǎng)絡(luò),刷新內(nèi)容為節(jié)點(diǎn)N18離線。E.節(jié)點(diǎn)N17收到消息后對(duì)節(jié)點(diǎn)N107進(jìn)行回復(fù),并且向節(jié)點(diǎn)N18發(fā)送探詢信息。F.節(jié)點(diǎn)N17沒有收節(jié)點(diǎn)N18的回復(fù)信息,判斷N18確實(shí)離線,執(zhí)行步驟G,否則,如果節(jié)點(diǎn)N18回到了網(wǎng)絡(luò)中又回復(fù)了節(jié)點(diǎn)N17的消息,節(jié)點(diǎn)N17收到節(jié)點(diǎn)N18的回復(fù)消息,此時(shí)節(jié)點(diǎn)N17判斷節(jié)點(diǎn)N18沒有離線,節(jié)點(diǎn)N17不進(jìn)行全網(wǎng)路由的更新。G.節(jié)點(diǎn)N17作為開始節(jié)點(diǎn),進(jìn)行全網(wǎng)路由信息的更新。上述三種情況下,全網(wǎng)路由信息的更新步驟包括
O由所述的開始節(jié)點(diǎn)分別按其路由表的正向和逆向兩個(gè)方向上對(duì)所述對(duì)等網(wǎng)絡(luò)各節(jié)點(diǎn)上的路由信息進(jìn)行刷新操作,兩個(gè)方向的刷新范圍各為所述對(duì)等網(wǎng)絡(luò)全部節(jié)點(diǎn)的一半;
2)所述開始節(jié)點(diǎn)從所述兩個(gè)方向的刷新范圍中分別選出一個(gè)可用的中間節(jié)點(diǎn),并向所述中間節(jié)點(diǎn)發(fā)送刷新請(qǐng)求,然后分別將所述兩個(gè)方向的刷新范圍中從中間節(jié)點(diǎn)到結(jié)尾節(jié)點(diǎn)的各個(gè)節(jié)點(diǎn)的刷新交由各自的中間節(jié)點(diǎn)負(fù)責(zé);
3)所述開始節(jié)點(diǎn)分別在所述的兩個(gè)方向重復(fù)步驟2),直到所述兩個(gè)方向上都完成了并發(fā)次數(shù)α次的刷新操作或者剩下的刷新范圍內(nèi)的節(jié)點(diǎn)少于刷新數(shù)量η;如果其中一個(gè)方向上完成了并發(fā)次數(shù)α次的刷新操作,則所述開始節(jié)點(diǎn)對(duì)其該方向上最近節(jié)點(diǎn)進(jìn)行刷新操作,并將該方向剩下的刷新范圍的刷新操作指派給所述最近節(jié)點(diǎn);如果剩下的刷新范圍中的節(jié)點(diǎn)少于刷新數(shù)量η,則所述開始節(jié)點(diǎn)對(duì)其最近節(jié)點(diǎn)進(jìn)行刷新操作,所述的最近節(jié)點(diǎn)再對(duì)該方向上下一個(gè)節(jié)點(diǎn)進(jìn)行刷新操作,直到最后一個(gè)節(jié)點(diǎn)。對(duì)上述三種情況下全網(wǎng)路由信息的更新步驟作進(jìn)一步的描述。假設(shè)網(wǎng)絡(luò)標(biāo)識(shí)符的范圍為 I 至 16,ID 分別為 1、3、4、5、6、7、8、9、10、11、12、13、14、15 的節(jié)點(diǎn) N1、N3、N4、N5、N6、N7、N8、N9、N10、N11、N12、N13、N14、N15 在線,ID 為 16 的節(jié)點(diǎn) N16 離線,NI 作為開始節(jié)點(diǎn)負(fù)責(zé)全網(wǎng)更新工作,規(guī)定并發(fā)次數(shù)α為3,刷新數(shù)量η為2,此時(shí),全網(wǎng)路由更新的過程如下
I)節(jié)點(diǎn)NI將路由更新范圍劃分為兩個(gè)區(qū)域,一個(gè)范圍的節(jié)點(diǎn)ID從3到9,另外一個(gè)范圍的節(jié)點(diǎn)ID從15到9。2)節(jié)點(diǎn)NI向兩個(gè)更新區(qū)域的中間節(jié)點(diǎn)Ν13和Ν5發(fā)送刷新消息,并將ID為12至9范圍內(nèi)的節(jié)點(diǎn)更新工作交由節(jié)點(diǎn)Ν13負(fù)責(zé),ID范圍為6至9內(nèi)的節(jié)點(diǎn)更新工作交由節(jié)點(diǎn)
Ν5負(fù)責(zé)。 3)節(jié)點(diǎn)Ν13和Ν5收到消息后,回復(fù)節(jié)點(diǎn)NI并將節(jié)點(diǎn)Ν16從路由表中移除,節(jié)點(diǎn)Ν13將節(jié)點(diǎn)NlO和Ν9的路由信息更新工作交由節(jié)點(diǎn)Nll負(fù)責(zé),節(jié)點(diǎn)Ν5將節(jié)點(diǎn)Ν8和Ν9的路由信息更新工作交由節(jié)點(diǎn)Ν7負(fù)責(zé)。4)節(jié)點(diǎn)NI收到節(jié)點(diǎn)Ν13和Ν5回復(fù)后,對(duì)上述兩個(gè)更新區(qū)域內(nèi)剩下的節(jié)點(diǎn)進(jìn)行更新。因?yàn)槊總€(gè)更新范圍內(nèi)剩下的節(jié)點(diǎn)數(shù)都少于刷新數(shù)量η,所以NI對(duì)Ν3和Ν15進(jìn)行更新操作,讓?duì)?負(fù)責(zé)Ν3至Ν4范圍內(nèi)的更新,讓?duì)?5負(fù)責(zé)Ν15至Ν14的更新。5)節(jié)點(diǎn)Ν7收到刷新消息后,將節(jié)點(diǎn)Ν16從路由表中移除,回復(fù)節(jié)點(diǎn)Ν5,并向節(jié)點(diǎn)NS發(fā)送刷新消息;節(jié)點(diǎn)Nll收到刷新消息后,將節(jié)點(diǎn)Ν16從路由表中移除,回復(fù)節(jié)點(diǎn)Ν13,并向節(jié)點(diǎn)NlO發(fā)送刷新消息;
6)節(jié)點(diǎn)Ν3收到消息后,將節(jié)點(diǎn)Ν16從路由表中移除,并對(duì)節(jié)點(diǎn)Ν4進(jìn)行刷新操作;節(jié)點(diǎn)Ν15收到消息后,將節(jié)點(diǎn)Ν16從路由表中移除,并對(duì)節(jié)點(diǎn)Ν14進(jìn)行刷新操作。7)節(jié)點(diǎn)Ν8收到消息后,將節(jié)點(diǎn)Ν16從路由表中移除,并對(duì)節(jié)點(diǎn)Ν9進(jìn)行刷新操作;節(jié)點(diǎn)NlO收到消息后,將節(jié)點(diǎn)Ν16從路由表中移除,并對(duì)節(jié)點(diǎn)Ν9進(jìn)行刷新操作。8)節(jié)點(diǎn)Ν14收到消息后,將節(jié)點(diǎn)Ν16從路由表中移除,并對(duì)節(jié)點(diǎn)NI進(jìn)行更新成功確認(rèn)操作;節(jié)點(diǎn)Ν14收到消息后,將節(jié)點(diǎn)Ν16從路由表中移除,并對(duì)節(jié)點(diǎn)NI進(jìn)行更新成功確認(rèn)操作。9)節(jié)點(diǎn)Ν9收到消息后,將節(jié)點(diǎn)Ν16從路由表中移除,并對(duì)節(jié)點(diǎn)Ν7和Nll發(fā)送更新成功確認(rèn)通知。至此,完成節(jié)點(diǎn)Ν16離線時(shí)的全網(wǎng)路由信息的更新操作。以上僅為通過優(yōu)選實(shí)施例對(duì)本發(fā)明的主要原則和精神進(jìn)行的陳述,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種常數(shù)復(fù)雜度的對(duì)等網(wǎng)絡(luò)目的資源定位方法,其特征是,在對(duì)等網(wǎng)絡(luò)中,節(jié)點(diǎn)NI進(jìn)行資源定位的步驟包括 1)節(jié)點(diǎn)NI在自己路由表中搜索距離所求資源最近的節(jié)點(diǎn)N2,然后節(jié)點(diǎn)NI向節(jié)點(diǎn)N2發(fā)送資源查詢的請(qǐng)求; 2)如果節(jié)點(diǎn)N2在線并且節(jié)點(diǎn)N2存儲(chǔ)有所求資源信息,則由節(jié)點(diǎn)N2發(fā)送所求資源信息給NI,完成資源定位,否則執(zhí)行步驟3); 3)如果節(jié)點(diǎn)N2在線,則由節(jié)點(diǎn)N2發(fā)送一個(gè)或多個(gè)最接近所求資源的節(jié)點(diǎn)信息給節(jié)點(diǎn)NI,讓節(jié)點(diǎn)NI更新自己的路由表; 4)如果節(jié)點(diǎn)NI接收不到節(jié)點(diǎn)N2的返回信息,節(jié)點(diǎn)NI將從自己的路由表中搜索沒有搜索過的距離所求資源最近的節(jié)點(diǎn)N3,并向節(jié)點(diǎn)N3發(fā)送資源查詢的請(qǐng)求; 5)如果節(jié)點(diǎn)N2返回的信息中沒有所求資源信息,而只有節(jié)點(diǎn)信息,則節(jié)點(diǎn)NI從這些節(jié)點(diǎn)信息和路由表中選出沒有搜索過的距離所求資源最近的節(jié)點(diǎn)N3,并向節(jié)點(diǎn)N3發(fā)送資源查詢的請(qǐng)求; 6)節(jié)點(diǎn)NI將重復(fù)這個(gè)過程,直到定位到資源或者查詢過K個(gè)節(jié)點(diǎn)都沒有定位成功,則不再繼續(xù)向其他節(jié)點(diǎn)發(fā)送查詢資源的請(qǐng)求,其中,K為規(guī)定的常數(shù),即查詢路由的跳數(shù),其取值范圍為2至20 ; 其中,N1、N2、N3為對(duì)等網(wǎng)絡(luò)中的節(jié)點(diǎn);資源信息至少由資源標(biāo)識(shí)符ID和資源索引value組成,資源標(biāo)識(shí)符ID為對(duì)等網(wǎng)絡(luò)上資源的標(biāo)識(shí)符,需要保證每個(gè)資源的資源標(biāo)識(shí)符ID都是唯一的;資源索引value是記錄擁有資源的節(jié)點(diǎn)信息的文件,節(jié)點(diǎn)信息指節(jié)點(diǎn)和資源的標(biāo)識(shí)符ID、網(wǎng)絡(luò)IP地址、網(wǎng)絡(luò)通訊使用的端口等信息。
2.根據(jù)權(quán)利要求I所述的一種常數(shù)復(fù)雜度的對(duì)等網(wǎng)絡(luò)目的資源定位方法,其特征是,所述對(duì)等網(wǎng)絡(luò)包括五種通信過程探詢、存儲(chǔ)、獲取資源、刷新、獲取路由表,所述探詢是指探測(cè)一個(gè)節(jié)點(diǎn)是否在線,所述存儲(chǔ)是指通知節(jié)點(diǎn)存儲(chǔ)資源信息,所述獲取資源是從節(jié)點(diǎn)獲取資源信息,所述刷新是指向節(jié)點(diǎn)發(fā)布路由的變化消息,所述獲取路由表是某個(gè)節(jié)點(diǎn)從其它節(jié)點(diǎn)獲取網(wǎng)絡(luò)節(jié)點(diǎn)信息。
3.根據(jù)權(quán)利要求2所述的一種常數(shù)復(fù)雜度的對(duì)等網(wǎng)絡(luò)目的資源定位方法,其特征是還包括以下三種情況時(shí)維護(hù)路由信息的步驟 (1)節(jié)點(diǎn)加入所述對(duì)等網(wǎng)絡(luò)時(shí) A.欲加入節(jié)點(diǎn)將已知節(jié)點(diǎn)信息加入自己的路由表,然后向已知節(jié)點(diǎn)請(qǐng)求自己附近的節(jié)點(diǎn)信息; B.在得到附近的節(jié)點(diǎn)信息后,欲加入節(jié)點(diǎn)設(shè)置刷新域?yàn)檎麄€(gè)網(wǎng)絡(luò),對(duì)距離自己最近的節(jié)點(diǎn)進(jìn)行刷新操作,向其發(fā)送獲取路由表請(qǐng)求,獲取全局路由表; C.節(jié)點(diǎn)收到全局刷新請(qǐng)求后,以自己為開始節(jié)點(diǎn),進(jìn)行全網(wǎng)路由信息的更新,并且回復(fù)欲加入節(jié)點(diǎn)全局路由表; D.欲加入節(jié)點(diǎn)收到全局路由表后就完成將收到的全局路由表整合為自己路由表,如果沒有收到回復(fù),則欲加入節(jié)點(diǎn)對(duì)沒有進(jìn)行刷新操作的離自己最近的下一個(gè)節(jié)點(diǎn)進(jìn)行刷新操作,重復(fù)這個(gè)過程,直到有節(jié)點(diǎn)回復(fù)消息或者聯(lián)系過規(guī)定數(shù)量的節(jié)點(diǎn)都沒有回復(fù); (2)節(jié)點(diǎn)退出所述對(duì)等網(wǎng)絡(luò)時(shí) A.欲退出節(jié)點(diǎn)從自己路由表中找出離自己最近的節(jié)點(diǎn);B.欲退出節(jié)點(diǎn)設(shè)置刷新域?yàn)檎麄€(gè)網(wǎng)絡(luò),對(duì)所述最近的節(jié)點(diǎn)進(jìn)行刷新操作; C.如果所述最近的節(jié)點(diǎn)回復(fù)消息,則欲退出節(jié)點(diǎn)離開網(wǎng)絡(luò);如果所述最近的節(jié)點(diǎn)沒有回復(fù)消息,則欲退出節(jié)點(diǎn)對(duì)沒有進(jìn)行刷新操作的離自己最近的下一個(gè)節(jié)點(diǎn)進(jìn)行刷新操作,重復(fù)這個(gè)過程,直到有節(jié)點(diǎn)回復(fù)消息或者聯(lián)系過規(guī)定數(shù)量的節(jié)點(diǎn)都沒有回復(fù),然后下線; D.如果有節(jié)點(diǎn)回復(fù)消息,則由回復(fù)消息的節(jié)點(diǎn)作為開始節(jié)點(diǎn),進(jìn)行全網(wǎng)路由信息的更新; (3)節(jié)點(diǎn)意外離線時(shí) A.發(fā)現(xiàn)意外離線節(jié)點(diǎn)后,發(fā)現(xiàn)節(jié)點(diǎn)從自己路由表中找出離意外離線節(jié)點(diǎn)最近的節(jié)點(diǎn); B.發(fā)現(xiàn)節(jié)點(diǎn)設(shè)置刷新域?yàn)檎麄€(gè)網(wǎng)絡(luò),對(duì)所述最近的節(jié)點(diǎn)進(jìn)行刷新操作; C.如果所述最近的節(jié)點(diǎn)回復(fù)消息,則網(wǎng)絡(luò)中其他節(jié)點(diǎn)的路由更新由所述最近的節(jié)點(diǎn)負(fù)責(zé);如果所述最近的節(jié)點(diǎn)沒有回復(fù)消息,則發(fā)現(xiàn)節(jié)點(diǎn)向沒有進(jìn)行刷新操作的離意外離線節(jié)點(diǎn)最近的下一個(gè)節(jié)點(diǎn)進(jìn)行刷新操作,重復(fù)這個(gè)過程,直到有節(jié)點(diǎn)回復(fù)消息; D.如有節(jié)點(diǎn)回復(fù)消息,則由回復(fù)消息的節(jié)點(diǎn)作為開始節(jié)點(diǎn),進(jìn)行全網(wǎng)路由信息的更新; 所述全網(wǎng)路由信息的更新,步驟包括 O由所述的開始節(jié)點(diǎn)分別按其路由表的正向和逆向兩個(gè)方向上對(duì)所述對(duì)等網(wǎng)絡(luò)各節(jié)點(diǎn)上的路由信息進(jìn)行刷新操作,兩個(gè)方向的刷新范圍各為所述對(duì)等網(wǎng)絡(luò)全部節(jié)點(diǎn)的一半; 2)所述開始節(jié)點(diǎn)從所述兩個(gè)方向的刷新范圍中分別選出一個(gè)可用的中間節(jié)點(diǎn),并向所述中間節(jié)點(diǎn)發(fā)送刷新請(qǐng)求,然后分別將所述兩個(gè)方向的刷新范圍中從中間節(jié)點(diǎn)到結(jié)尾節(jié)點(diǎn)的各個(gè)節(jié)點(diǎn)的刷新交由各自的中間節(jié)點(diǎn)負(fù)責(zé); 3)所述開始節(jié)點(diǎn)分別在所述的兩個(gè)方向重復(fù)步驟2),直到所述兩個(gè)方向上都完成了并發(fā)次數(shù)α次的刷新操作或者剩下的刷新范圍內(nèi)的節(jié)點(diǎn)少于刷新數(shù)量η,其中,并發(fā)次數(shù)α是某個(gè)方向刷新中最大的網(wǎng)絡(luò)并發(fā)數(shù),取值范圍為2至10 ;刷新數(shù)量η是調(diào)整刷新方式的閾值,取值范圍為2至8;如果其中一個(gè)方向上完成了并發(fā)次數(shù)α次的刷新操作,則所述開始節(jié)點(diǎn)對(duì)其該方向上最近節(jié)點(diǎn)進(jìn)行刷新操作,并將該方向剩下的刷新范圍的刷新操作指派給所述最近節(jié)點(diǎn);如果剩下的刷新范圍中的節(jié)點(diǎn)少于刷新數(shù)量η,則所述開始節(jié)點(diǎn)對(duì)其最近節(jié)點(diǎn)進(jìn)行刷新操作,所述的最近節(jié)點(diǎn)再對(duì)該方向上下一個(gè)節(jié)點(diǎn)進(jìn)行刷新操作,直到最后一個(gè)節(jié)點(diǎn)。
4.根據(jù)權(quán)利要求1-3之一所述的一種常數(shù)復(fù)雜度的對(duì)等網(wǎng)絡(luò)目的資源定位方法,其特征是所述的對(duì)等網(wǎng)絡(luò)中,所有的節(jié)點(diǎn)和資源都通過哈希算法得到一個(gè)唯一的ID。
全文摘要
本發(fā)明公開了一種常數(shù)復(fù)雜度的對(duì)等網(wǎng)絡(luò)目的資源定位方法,包括分配標(biāo)識(shí)符、通信過程、路由表、資源發(fā)布、資源定位、路由信息維護(hù)等內(nèi)容。通過將網(wǎng)絡(luò)中節(jié)點(diǎn)進(jìn)行哈希編碼,形成一個(gè)循環(huán)的路由表,通過對(duì)路由表中的節(jié)點(diǎn)分發(fā)網(wǎng)絡(luò)的更新消息,做到維護(hù)全體節(jié)點(diǎn)的全局路由表,從而實(shí)現(xiàn)在在高度動(dòng)態(tài)變化的互聯(lián)網(wǎng)中通過常數(shù)復(fù)雜度的路由過程就可以快速定位到網(wǎng)絡(luò)中分布式目標(biāo)資源,大部分情況下每次定位目標(biāo)資源都只需要一次查詢,同時(shí)只需要很少網(wǎng)絡(luò)開銷來定位資源和維護(hù)整個(gè)對(duì)等網(wǎng)絡(luò)。
文檔編號(hào)H04L29/08GK102833169SQ20121032293
公開日2012年12月19日 申請(qǐng)日期2012年9月4日 優(yōu)先權(quán)日2012年9月4日
發(fā)明者黃桂敏, 周婭, 劉斯韻 申請(qǐng)人:桂林電子科技大學(xué)