專利名稱:用于識別與相同標(biāo)簽匹配的多個(gè)節(jié)點(diǎn)的計(jì)算機(jī)網(wǎng)絡(luò)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò),具體地而非專門地涉及諸如對等系統(tǒng)的分布式系統(tǒng)(特別是不具有中央化存儲或控制的分布式系統(tǒng))的環(huán)境中的信息獲取,尤其涉及沒有中央化存儲或控制的虛擬網(wǎng)絡(luò)。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一個(gè)方面,提供了一種計(jì)算機(jī)網(wǎng)絡(luò),其包含多個(gè)節(jié)點(diǎn)并具有——第一獲取裝置,其對標(biāo)簽的輸入作出響應(yīng)以識別與該標(biāo)簽匹配的節(jié)點(diǎn)的地址;——第二獲取裝置,被連接以接收第一獲取裝置識別的地址,并且可以響應(yīng)于其進(jìn)行操作以識別與同一標(biāo)簽匹配的其他節(jié)點(diǎn)的地址;其中,與給定標(biāo)簽匹配的各個(gè)節(jié)點(diǎn)具有與其相關(guān)聯(lián)的用于包含與同一標(biāo)簽匹配的其他節(jié)點(diǎn)的地址的數(shù)據(jù)存儲區(qū),并且對查詢消息進(jìn)行響應(yīng)以返回包含列表地址的消息;并且其中,第二獲取裝置可以進(jìn)行操作以向第一獲取裝置識別的地址發(fā)送查詢消息,并且在接收到響應(yīng)時(shí)反復(fù)向?qū)υ摬樵兿⒌捻憫?yīng)中包含的地址發(fā)送查詢消息,或者可以是對隨后的查詢消息的響應(yīng)的情況那樣。
另一方面,本發(fā)明提供了一種對包含多個(gè)節(jié)點(diǎn)的計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行操作的方法,該方法包括以下步驟——響應(yīng)于標(biāo)簽的輸入而執(zhí)行第一獲取操作,以識別與該標(biāo)簽匹配的節(jié)點(diǎn)的地址;——響應(yīng)于第一獲取裝置識別的地址而執(zhí)行第二獲取操作,以識別與同一標(biāo)簽匹配的其他節(jié)點(diǎn)的地址;
其中,與給定標(biāo)簽匹配的各個(gè)節(jié)點(diǎn)具有與其相關(guān)聯(lián)的用于包含與同一標(biāo)簽匹配的其他節(jié)點(diǎn)的地址的數(shù)據(jù)存儲區(qū),并且對查詢消息進(jìn)行響應(yīng)以返回包含列表地址的消息;并且其中,第二獲取操作包括向第一獲取裝置識別出的地址發(fā)送查詢消息,并且在接收到響應(yīng)時(shí)反復(fù)向?qū)υ摬樵兿⒌捻憫?yīng)中包含的地址發(fā)送查詢消息,或者可以是對隨后的查詢消息的響應(yīng)的情況那樣。
在權(quán)利要求中限定了本發(fā)明的其它優(yōu)選特征。
下面參照附圖通過示例對本發(fā)明的一些實(shí)施例進(jìn)行描述,附圖中圖1是本發(fā)明一個(gè)實(shí)施例中使用的計(jì)算機(jī)的框圖;圖1A是示出使用主虛擬網(wǎng)絡(luò)和次虛擬網(wǎng)絡(luò)的數(shù)據(jù)獲取操作的流程圖;圖2是示出對計(jì)算機(jī)網(wǎng)絡(luò)的多個(gè)節(jié)點(diǎn)之間的鏈接的管理的示意圖;圖3到10是示出次虛擬網(wǎng)絡(luò)的節(jié)點(diǎn)的操作的多個(gè)方面的流程圖;圖11到14以及16是示出主虛擬網(wǎng)絡(luò)的節(jié)點(diǎn)的操作的多個(gè)方面的流程圖;以及圖15是示出圖14所示處理期間的消息流的示意圖。
具體實(shí)施例方式
節(jié)點(diǎn)在本說明書中,將涉及具有處理、存儲以及通信能力的計(jì)算節(jié)點(diǎn)。計(jì)算節(jié)點(diǎn)可以是計(jì)算機(jī)或其他設(shè)備,或者——注意,單個(gè)計(jì)算機(jī)可以具有在其上運(yùn)行的多個(gè)獨(dú)立程序或進(jìn)程——可以是這種程序或進(jìn)程。也可以將存儲數(shù)據(jù)項(xiàng)視為獨(dú)特節(jié)點(diǎn),即使可以通過單個(gè)程序或進(jìn)程對多個(gè)這種項(xiàng)提供服務(wù)。
本說明書假定每個(gè)計(jì)算節(jié)點(diǎn)都連接到某些通信基礎(chǔ)結(jié)構(gòu)(例如可以是諸如IP(網(wǎng)際協(xié)議)網(wǎng)絡(luò)的電信網(wǎng)絡(luò)),從而可以向其發(fā)送消息。因此,每個(gè)計(jì)算節(jié)點(diǎn)還構(gòu)成該通信基礎(chǔ)結(jié)構(gòu)內(nèi)的節(jié)點(diǎn)。
還涉及屬于虛擬網(wǎng)絡(luò)的多個(gè)虛擬節(jié)點(diǎn)。由于計(jì)算節(jié)點(diǎn)能夠具有與其相關(guān)聯(lián)的兩個(gè)或更多個(gè)虛擬節(jié)點(diǎn)(可能屬于不同的虛擬網(wǎng)絡(luò)),所以區(qū)別很重要。如它的名稱暗示的,虛擬節(jié)點(diǎn)并不在任何物理意義上存在相反地,如不久將變得清楚的那樣,其存在性是通過限定虛擬節(jié)點(diǎn)之間的鏈接從而也限定其所屬虛擬網(wǎng)絡(luò)的存儲數(shù)據(jù)來建立的。
虛擬節(jié)點(diǎn)必須與計(jì)算節(jié)點(diǎn)相關(guān)聯(lián),計(jì)算節(jié)點(diǎn)為虛擬節(jié)點(diǎn)提供處理、存儲以及通信能力對通過虛擬節(jié)點(diǎn)來發(fā)送、接收以及處理消息的說明涉及通過代表該虛擬節(jié)點(diǎn)的計(jì)算節(jié)點(diǎn)來進(jìn)行這種發(fā)送、接收或處理。
圖1示出了一示例。計(jì)算機(jī)具有通用組件,即處理器1、存儲器2、顯示器3、鍵盤4以及用于通過網(wǎng)絡(luò)10進(jìn)行通信的通信接口5。
存儲器2包含操作系統(tǒng)和其他程序(未示出)以及諸如所示文本文件20的數(shù)據(jù)文件。其還具有存儲部21,該存儲部21包含有與文本文件20對應(yīng)的標(biāo)簽21a及其自己的地址21b。此外,它具有地址列表22和支持程序23,它們一起定義了虛擬網(wǎng)絡(luò)的節(jié)點(diǎn)在計(jì)算機(jī)上的存在。該節(jié)點(diǎn)具有地址24。還示出有地址列表25和支持程序26,它們一起定義了另一虛擬網(wǎng)絡(luò)的節(jié)點(diǎn)在計(jì)算機(jī)上的存在。該節(jié)點(diǎn)具有地址27。存儲在列表22、25中的地址是同一虛擬網(wǎng)絡(luò)中的其他節(jié)點(diǎn)的地址。
查找系統(tǒng)我們現(xiàn)在描述分布式查找系統(tǒng),盡管其僅為本發(fā)明的應(yīng)用的一個(gè)可能示例。該系統(tǒng)使得用戶可以把評述與網(wǎng)頁關(guān)聯(lián)起來。無論用戶何時(shí)訪問該頁,他都有機(jī)會也看到其他用戶作出的評述。評述存儲在作出該評述(例如,作為文本文件)的用戶的計(jì)算機(jī)上。
觀看網(wǎng)頁的用戶(或其計(jì)算機(jī))具有該網(wǎng)頁的統(tǒng)一資源定位符(URL),所需要的是該用戶可以借以獲取到所述評述的機(jī)制。在本示例中該機(jī)制如下將文本文件存儲在作出評述的用戶的計(jì)算機(jī)上,并與在我們的國際專利申請No.WO 03/034669[代理案號A30044]中所述類型的虛擬網(wǎng)絡(luò)的節(jié)點(diǎn)相關(guān)聯(lián),該文本文件也可以是包含關(guān)于其他網(wǎng)頁的評述的其他文本文件,還可以是其他不相關(guān)的文件。該虛擬網(wǎng)絡(luò)(在本說明書的語境下被稱為主虛擬網(wǎng)絡(luò),或簡稱為主網(wǎng)絡(luò))起到這樣的作用只要具有標(biāo)識消息的標(biāo)簽,就允許在不知道其地址的情況下發(fā)送該消息。盡管這種類型的網(wǎng)絡(luò)可以通過唯一的標(biāo)簽(一個(gè)節(jié)點(diǎn)一個(gè)標(biāo)簽)來運(yùn)行,但是在本示例中標(biāo)簽是不唯一的;相反,與包含關(guān)于特定網(wǎng)頁的評述的多個(gè)文本文件相關(guān)聯(lián)的所有節(jié)點(diǎn)都具有相同標(biāo)簽。該標(biāo)簽是網(wǎng)頁URL的散列函數(shù)。該虛擬網(wǎng)絡(luò)提供了只到達(dá)一個(gè)節(jié)點(diǎn)的獲取機(jī)制。
文本文件還與次虛擬網(wǎng)絡(luò)的節(jié)點(diǎn)相關(guān)聯(lián)。其(該次虛擬網(wǎng)絡(luò))只含有與包含關(guān)于所述一個(gè)特定網(wǎng)頁的評述的文本文件相關(guān)聯(lián)的節(jié)點(diǎn)。
然而,需要指出的是,雖然使用根據(jù)我們的前述國際專利申請的主網(wǎng)絡(luò)是優(yōu)選的,但是這并不是必要的。實(shí)際上,根本上并非一定要使用虛擬網(wǎng)絡(luò);而是可以使用另一主獲取機(jī)制,其接收標(biāo)簽并返回與該標(biāo)簽對應(yīng)的一個(gè)節(jié)點(diǎn)的地址。
發(fā)布評述的計(jì)算機(jī)如圖1所示并且必須●在主網(wǎng)絡(luò)中創(chuàng)建節(jié)點(diǎn)。該節(jié)點(diǎn)具有標(biāo)簽21a和網(wǎng)絡(luò)地址24。
●在次網(wǎng)絡(luò)中創(chuàng)建節(jié)點(diǎn)。該節(jié)點(diǎn)具有網(wǎng)絡(luò)地址27。
最初地址列表22、25是空的,只是列表22包含有引導(dǎo)鏈接(bootstrap link)。稍后將描述網(wǎng)絡(luò)的自組織,其用于確保列表22包含有主網(wǎng)絡(luò)的某些其他節(jié)點(diǎn)的標(biāo)簽和地址并確保列表25包含有次網(wǎng)絡(luò)的某些其他節(jié)點(diǎn)的地址?,F(xiàn)在,在假設(shè)存在這些標(biāo)簽和地址的情況下描述該系統(tǒng)。
這里需要對地址作一些闡述。由文本文件20形成的節(jié)點(diǎn)、主虛擬網(wǎng)絡(luò)的節(jié)點(diǎn)以及次虛擬網(wǎng)絡(luò)的節(jié)點(diǎn)雖然在概念上來說具有同一性,但是它們具有它們自己的地址。在通信網(wǎng)絡(luò)10中可以為各節(jié)點(diǎn)分配不同的地址,盡管在實(shí)際中這并不是很方便。在我們的優(yōu)選實(shí)施例中每個(gè)節(jié)點(diǎn)都具有由以下三部分組成的地址●因特網(wǎng)地址,其用于“定位”計(jì)算節(jié)點(diǎn)。例如130.146.209.15●端口號,其用于定位計(jì)算節(jié)點(diǎn)處的特定通信端口。端口是因特網(wǎng)地址的標(biāo)準(zhǔn)部分。例如它們允許不同的獨(dú)立應(yīng)用程序獨(dú)立地發(fā)送和接收消息。即,每個(gè)應(yīng)用程序都以它自己的端口接收消息,并且不接收發(fā)送給其他應(yīng)用程序的消息或被這些消息“混淆”??梢詫⒁蛱鼐W(wǎng)地址與端口地址一起視為網(wǎng)絡(luò)地址(正如所使用的通信協(xié)議(如TCP/IP)的一部分那樣)。用于所有主節(jié)點(diǎn)和次節(jié)點(diǎn)的網(wǎng)絡(luò)地址都可以是相同的,但是并非一定要如此。例如,可以在與接收第二消息的端口不同的端口接收針對主節(jié)點(diǎn)的所有消息(這是用于區(qū)分這種消息的一種方式)。
●節(jié)點(diǎn)標(biāo)識符(整數(shù)值),其用于定位消息所針對的特定節(jié)點(diǎn)。例如,如果在專用端口接收主網(wǎng)絡(luò)上的所有消息,那么還存在與各節(jié)點(diǎn)相關(guān)聯(lián)的本地唯一標(biāo)識符。因此,當(dāng)存在多個(gè)節(jié)點(diǎn)時(shí),很清楚消息所針對的節(jié)點(diǎn)。該節(jié)點(diǎn)標(biāo)識符是應(yīng)用特有的地址擴(kuò)展(它不是標(biāo)準(zhǔn)網(wǎng)際協(xié)議的一部分)。簡單地將它包括在發(fā)送的消息中。接收它的進(jìn)程“知道”此情況并檢查該節(jié)點(diǎn)標(biāo)識符以確定應(yīng)當(dāng)將該消息轉(zhuǎn)發(fā)給哪個(gè)節(jié)點(diǎn)。
有可能兩個(gè)節(jié)點(diǎn)具有同一網(wǎng)絡(luò)地址,但并非一定如此。并不是每個(gè)節(jié)點(diǎn)都將具有它自己的端口(部分原因是可用端口數(shù)量受到一定限制),但是一個(gè)節(jié)點(diǎn)完全可以具有兩個(gè)端口(從而具有兩個(gè)不同的網(wǎng)絡(luò)地址)一個(gè)用于主網(wǎng)絡(luò),一個(gè)用于次網(wǎng)絡(luò)。典型地,存在多個(gè)次網(wǎng)絡(luò),它們可以全都使用同一端口。
應(yīng)當(dāng)強(qiáng)調(diào)的是,以下,提到節(jié)點(diǎn)的地址,指的是該節(jié)點(diǎn)的完整地址。
一種尤其具有吸引力的方法是規(guī)定文本文件和主節(jié)點(diǎn)以及次節(jié)點(diǎn)都具有相同的節(jié)點(diǎn)標(biāo)識符(和IP地址),只有端口號不同。這種編址協(xié)議可以提供在以下方面簡化某些處理的機(jī)會當(dāng)具有一個(gè)節(jié)點(diǎn)的地址并需要與該節(jié)點(diǎn)相關(guān)聯(lián)的另一節(jié)點(diǎn)的地址時(shí),可以根據(jù)前一節(jié)點(diǎn)的地址推斷后一節(jié)點(diǎn)的地址,而不必查找之。然而,在以下說明中,未作這種簡化,因此這些處理將與任意編址協(xié)議一起執(zhí)行。
查看網(wǎng)頁的計(jì)算機(jī)通過以下步驟獲取關(guān)聯(lián)評述●將相同的散列函數(shù)應(yīng)用于URL以獲得標(biāo)簽;●在主虛擬網(wǎng)絡(luò)上發(fā)送查詢(包含有該標(biāo)簽),以獲得一個(gè)節(jié)點(diǎn)的地址;●使用找到的地址,在次虛擬網(wǎng)絡(luò)上發(fā)送查詢以獲得次虛擬網(wǎng)絡(luò)上的更多(甚至所有)其他節(jié)點(diǎn)的地址;●使用這些地址獲取用于顯示的評述。
注意,獲取計(jì)算機(jī)并不一定要包含虛擬網(wǎng)絡(luò)的節(jié)點(diǎn);它可以是這樣的常規(guī)計(jì)算機(jī),即,該計(jì)算機(jī)加載有用于實(shí)現(xiàn)獲取處理的軟件,并具有通信接口以使該計(jì)算機(jī)可與其上駐留有虛擬網(wǎng)絡(luò)節(jié)點(diǎn)的計(jì)算機(jī)相通信。在圖1A的流程圖中示出了該處理,其如下地執(zhí)行步驟30在用戶輸入U(xiǎn)RL(或調(diào)用超鏈接)之后計(jì)算機(jī)獲取對應(yīng)的網(wǎng)頁。該步驟完全是常規(guī)的。
步驟31將散列函數(shù)應(yīng)用于URL以獲得標(biāo)簽。如在我們早先的國際專利申請中所述的,這可以使用SHA-1算法。
步驟32向主網(wǎng)絡(luò)的一節(jié)點(diǎn)發(fā)送包含有該標(biāo)簽和獲取計(jì)算機(jī)的網(wǎng)絡(luò)地址的“Find(查找)”消息。顯然,該計(jì)算機(jī)必需具有至少一個(gè)這種地址。
步驟33該獲取計(jì)算機(jī)從主網(wǎng)絡(luò)接收“Find”消息。該消息包含有已查找到的節(jié)點(diǎn)的標(biāo)簽和地址,也包含有次網(wǎng)絡(luò)的關(guān)聯(lián)節(jié)點(diǎn)的以及評述的地址。可以包括超時(shí)機(jī)制,以在未在合理時(shí)間內(nèi)接收到Find消息的情況下中止該處理。
步驟34在本示例中,將主網(wǎng)絡(luò)配置成使得其始終返回具有與在Find消息中包含的標(biāo)簽最接近的標(biāo)簽的節(jié)點(diǎn)的標(biāo)簽和地址。從而執(zhí)行檢查以查看返回的標(biāo)簽是否與要求的標(biāo)簽相同,如果不相同,結(jié)束該處理。對“最接近”的意思的說明見下。
步驟35假設(shè)所述標(biāo)簽相匹配,獲取計(jì)算機(jī)執(zhí)行處理(稍后要詳細(xì)描述),由此其使用由Find消息返回的地址來通過次網(wǎng)絡(luò)獲取進(jìn)一步的地址。
步驟36然后使用這些地址從“發(fā)布”計(jì)算機(jī)獲取包含有評述的文本文件。
次虛擬網(wǎng)絡(luò)該網(wǎng)絡(luò)的目的是用于將一組節(jié)點(diǎn)自組織成單個(gè)虛擬網(wǎng)絡(luò),隨后可以通過該單個(gè)虛擬網(wǎng)絡(luò)發(fā)現(xiàn)作為該組的一部分的所有節(jié)點(diǎn)。主要要求是所得網(wǎng)絡(luò)包含所有節(jié)點(diǎn)。另一要求是創(chuàng)建和維持網(wǎng)絡(luò)的所需系統(tǒng)負(fù)載平均地分布在所有節(jié)點(diǎn)上。這不僅是最“公平”的(當(dāng)不同的用戶向分布式應(yīng)用貢獻(xiàn)它們的資源時(shí)這是很重要的),而且有助于防止系統(tǒng)過載。
因此,該網(wǎng)絡(luò)具有以下特性●優(yōu)選地,由各節(jié)點(diǎn)維持的鏈接數(shù)量是相同的。
●所有鏈接都是雙向的。結(jié)果,到一節(jié)點(diǎn)的鏈接數(shù)量對于各節(jié)點(diǎn)來說也是相同的。這是很重要的,因?yàn)檫@影響著節(jié)點(diǎn)接收的和必須處理的消息數(shù)量。
●其具有“平”結(jié)構(gòu)。這些節(jié)點(diǎn)不會分級地排列它們自己。結(jié)果,系統(tǒng)負(fù)載平均地分布在所有節(jié)點(diǎn)上。
各節(jié)點(diǎn)的結(jié)構(gòu)各節(jié)點(diǎn)具有以下與其相關(guān)聯(lián)的數(shù)據(jù)●到其他節(jié)點(diǎn)的幾個(gè)鏈接。每個(gè)鏈接都僅僅是另一節(jié)點(diǎn)的地址。與每個(gè)鏈接相關(guān)聯(lián)的是狀態(tài),其可以是“已確認(rèn)”或“未確認(rèn)”。各節(jié)點(diǎn)只能保持最大數(shù)量個(gè)鏈接,其由系統(tǒng)寬度參數(shù)L給出。L的典型值例如是6。該參數(shù)并非必須對所有節(jié)點(diǎn)來說都相同;但是使它們不同并不會獲得益處。
●備用(spare)鏈接或短期備用的列表。各備用僅僅是另一節(jié)點(diǎn)的地址。由自組織處理使用這些備用來建立虛擬網(wǎng)絡(luò)。當(dāng)節(jié)點(diǎn)被通知無法將一節(jié)點(diǎn)添加為鏈接(要么是由于它已鏈接到該節(jié)點(diǎn),要么是由于它已具有最大鏈接數(shù)量)時(shí),該節(jié)點(diǎn)添加其他節(jié)點(diǎn)作為備用。節(jié)點(diǎn)可以保持的備用數(shù)量也受到限制,并由系統(tǒng)寬度參數(shù)S給出。S的典型值例如是3。通常備用鏈接列表并不是必需的,但是在提供這樣的附加機(jī)制方面很有價(jià)值通過該機(jī)制,不能被當(dāng)?shù)厝菁{的鏈接可以傳播到虛擬網(wǎng)絡(luò)中的某個(gè)其他點(diǎn)。但是在其中到來的通知消息始終到達(dá)次網(wǎng)絡(luò)的同一節(jié)點(diǎn)處(或很小數(shù)量的節(jié)點(diǎn)中的一個(gè))的系統(tǒng)中必須使用備用鏈接(或類似的傳播機(jī)制)。
消息為了自組織到一網(wǎng)絡(luò)中并發(fā)現(xiàn)哪個(gè)節(jié)點(diǎn)是給定網(wǎng)絡(luò)的一部分,多個(gè)節(jié)點(diǎn)相互發(fā)送消息。次網(wǎng)絡(luò)使用以下類型的消息●帶有以下內(nèi)容的AddLink消息●發(fā)送方地址●接收方地址由一節(jié)點(diǎn)(發(fā)送方)向另一節(jié)點(diǎn)(接收方)發(fā)送該消息以請求相互鏈接。
●帶有以下內(nèi)容的ChangeLink消息●發(fā)送方地址●接收方地址●對象地址由節(jié)點(diǎn)(X)向另一節(jié)點(diǎn)(Y)發(fā)送該消息以請求它將其多個(gè)鏈接(Z)中的一個(gè)改變成到其自己(X)的鏈接。該協(xié)議是這樣的,即,X將向Z發(fā)送類似的消息,該消息請求Z將它的到Y(jié)的鏈接改變成到它自己(X)的鏈接。因此,實(shí)際上,X請求將它自己插入到當(dāng)前在Y與Z之間的鏈接。
●帶有以下內(nèi)容的LinkAdded消息●發(fā)送方地址●接收方地址其用于通知一節(jié)點(diǎn)發(fā)送方剛剛向它添加了鏈接。
●帶有以下內(nèi)容的LinkError消息●發(fā)送方地址●接收方地址●對象地址●錯誤碼其用于通知一節(jié)點(diǎn)它的一個(gè)鏈接出現(xiàn)了問題。例如,該對象節(jié)點(diǎn)可以不響應(yīng),或者該鏈接可以不是相互的。該消息包括用于表示錯誤類型的錯誤碼。
●帶有以下內(nèi)容的Links消息●發(fā)送方地址●接收方地址●所有鏈接的地址●引用(reference)值●該Links消息還可以包含來自發(fā)送方節(jié)點(diǎn)的某些其他數(shù)據(jù)。在網(wǎng)頁評述示例中這是關(guān)聯(lián)評述的地址。
該消息包含有發(fā)送節(jié)點(diǎn)的所有當(dāng)前鏈接。總是響應(yīng)于LinksQuery消息發(fā)送該消息??梢詫⒃撘糜糜趨^(qū)分所響應(yīng)的具體查詢。
●帶有以下內(nèi)容的LinksQuery消息●發(fā)送方地址●接收方地址●引用值其用于請求一節(jié)點(diǎn)發(fā)送Links消息作為回復(fù)(包含有其當(dāng)前鏈接)。
●帶有以下內(nèi)容的Notify消息●發(fā)送方地址●接收方地址●對象地址●通知級別該消息用于向節(jié)點(diǎn)通知網(wǎng)絡(luò)中的另一節(jié)點(diǎn)。通知級別用于控制和限制Notify消息的傳播。如這里所述的,不使用發(fā)送方地址,但是它在調(diào)試時(shí)或在希望發(fā)送確收的情況下很有用。
建立次網(wǎng)絡(luò)該系統(tǒng)使組節(jié)點(diǎn)自組織到單個(gè)虛擬網(wǎng)絡(luò)中,使得在具有一個(gè)節(jié)點(diǎn)的地址的情況下可以查找到該組中的其他節(jié)點(diǎn)的地址。這部分描述當(dāng)發(fā)現(xiàn)應(yīng)當(dāng)屬于同一次網(wǎng)絡(luò)的節(jié)點(diǎn)時(shí)如何創(chuàng)建新鏈接。這里可以分為兩個(gè)部分發(fā)現(xiàn)應(yīng)當(dāng)屬于同一次網(wǎng)絡(luò)的節(jié)點(diǎn)對。將節(jié)點(diǎn)分組到同一網(wǎng)絡(luò)的準(zhǔn)則是應(yīng)用特有的。在該網(wǎng)頁評述示例中,應(yīng)當(dāng)將表示有關(guān)同一URL的評述的所有節(jié)點(diǎn)都一起歸組到次網(wǎng)絡(luò)中。如何發(fā)現(xiàn)應(yīng)當(dāng)歸組在一起的節(jié)點(diǎn)也是應(yīng)用特有的。稍后給出一示例。
作為節(jié)點(diǎn)發(fā)現(xiàn)的結(jié)果,對次網(wǎng)絡(luò)進(jìn)行更新/擴(kuò)展。當(dāng)發(fā)現(xiàn)應(yīng)當(dāng)屬于同一次網(wǎng)絡(luò)的一對節(jié)點(diǎn)時(shí),作為結(jié)果,系統(tǒng)可能建立一個(gè)或更多個(gè)新鏈接。新鏈接并不一定在該對節(jié)點(diǎn)之間,而是例如可以在這兩個(gè)節(jié)點(diǎn)鏈接到的節(jié)點(diǎn)之間。稍后詳細(xì)描述如何創(chuàng)建新鏈接。
初始通知消息次網(wǎng)絡(luò)的組織預(yù)先假定到來的“Notify(通知)”消息的存在性,其例如可以標(biāo)識所述組的現(xiàn)有或新成員(盡管在初始時(shí),可能兩個(gè)節(jié)點(diǎn)都不是組的一部分,然而,后來在自組織處理中,兩個(gè)節(jié)點(diǎn)可能都已經(jīng)是組的一部分)。系統(tǒng)的另一部分向次網(wǎng)絡(luò)通知應(yīng)當(dāng)屬于它的節(jié)點(diǎn)。有不同的方式可以這樣做。這里我們給出結(jié)合在我們早先的國際專利申請中描述的類型的主網(wǎng)絡(luò)一起使用次網(wǎng)絡(luò)時(shí)如何這樣做的示例。在該網(wǎng)頁評述示例中,每條評述以基于對應(yīng)網(wǎng)頁的URL的標(biāo)簽發(fā)布它自己,作為主網(wǎng)絡(luò)中的節(jié)點(diǎn)。這樣,可以使用主網(wǎng)絡(luò)查找給定URL的評述,如果存在的話。為了示出對于給定URL的所有評述,每條評述都具有與其相關(guān)聯(lián)的次網(wǎng)絡(luò)的節(jié)點(diǎn)。與關(guān)于同一URL的評述對應(yīng)的節(jié)點(diǎn)自組織到該URL特有的次網(wǎng)絡(luò)。這樣,一旦使用主網(wǎng)絡(luò)查找關(guān)于URL的單個(gè)評述,那么就可以使用次網(wǎng)絡(luò)查找關(guān)于該同一URL的其他評述。
因此在此情況下,以主網(wǎng)絡(luò)中的同一標(biāo)簽發(fā)布應(yīng)當(dāng)歸組在一起的次網(wǎng)絡(luò)的各節(jié)點(diǎn)。以下將描述這樣的機(jī)制,即,通過該機(jī)制,在主網(wǎng)絡(luò)中,節(jié)點(diǎn)定期執(zhí)行“推(Push)”更新以建立和保持鏈接,該機(jī)制包括一變型,使得只要節(jié)點(diǎn)知道以同一標(biāo)簽發(fā)布了另一節(jié)點(diǎn),就生成所需的Notify消息。
處理Notify消息當(dāng)節(jié)點(diǎn)接收到與其尚未鏈接到的節(jié)點(diǎn)有關(guān)的Notify消息時(shí),將發(fā)生以下幾者之一如果接收節(jié)點(diǎn)已具有最大允許鏈接數(shù),則它將其添加為備用(除非它已將其作為備用)。如果這樣做時(shí)該節(jié)點(diǎn)將超過它的最大備用數(shù)量,則它將刪除一個(gè)備用。然后它還可以把Notify消息轉(zhuǎn)發(fā)給刪除的備用。是否這樣做取決于通知級別的值。每次都降低通知級別以防止消息無窮傳播。
否則,如果對象節(jié)點(diǎn)也尚未具有最大鏈接數(shù),則接收節(jié)點(diǎn)試圖在兩個(gè)節(jié)點(diǎn)之間創(chuàng)建相互鏈接。圖2(圖a和b)示出了該情況。其中,L=3,節(jié)點(diǎn)1接收到關(guān)于節(jié)點(diǎn)2的Notify消息。由于兩個(gè)節(jié)點(diǎn)都只有兩個(gè)鏈接,所以在節(jié)點(diǎn)1與節(jié)點(diǎn)2之間創(chuàng)建一鏈接。
否則,當(dāng)對象節(jié)點(diǎn)已具有最大鏈接數(shù)時(shí),不可能簡單地在兩個(gè)節(jié)點(diǎn)之間創(chuàng)建相互鏈接。因此將發(fā)生的是接收節(jié)點(diǎn)試圖將它自己插入到現(xiàn)有鏈接中。圖2(圖c和d)示出了此情況。其中,節(jié)點(diǎn)2與節(jié)點(diǎn)3之間的鏈接是斷開的,但是它被兩個(gè)新鏈接來取代節(jié)點(diǎn)1與節(jié)點(diǎn)2之間的鏈接,和節(jié)點(diǎn)1與節(jié)點(diǎn)3之間的鏈接。因此總鏈接數(shù)增加了一。即使節(jié)點(diǎn)2和節(jié)點(diǎn)3已具有最大鏈接數(shù),也是起作用的。然而,為此,節(jié)點(diǎn)1需要能夠創(chuàng)建兩個(gè)新鏈接。在圖3到圖9的流程圖中更詳細(xì)地闡述了該處理。
圖3示出了節(jié)點(diǎn)如何處理到來的Notify消息。其中確定是否應(yīng)當(dāng)創(chuàng)建新鏈接,并且如果創(chuàng)建的話如何創(chuàng)建(通過添加新鏈接或通過把現(xiàn)有鏈接改變成兩個(gè)鏈接)。如果不創(chuàng)建新鏈接,則可以更新備用組并可以發(fā)送另一Notify消息。
在步驟300處,接收到Notify消息,其包含有發(fā)送它的節(jié)點(diǎn)(發(fā)送方)的地址、對象節(jié)點(diǎn)的地址以及傳播極限值notifylevel。接收節(jié)點(diǎn)首先檢查(301)是否存在建立新鏈接的空間,若存在,檢查(302)是否存在到對象節(jié)點(diǎn)的鏈接。如果不存在,則試圖建立與對象的鏈接。
在步驟303處向?qū)ο蠊?jié)點(diǎn)發(fā)送LinksQuery消息,在步驟304處,等待回復(fù)。一旦接收到回復(fù)——Links消息,則再次檢查(305)是否還存在空間建立新鏈接(在其間已接收并處理任何其他消息并作為結(jié)果創(chuàng)建鏈接的情況下)。如果存在,然后(306)檢查接收的Links消息以檢查對象節(jié)點(diǎn)是否存在空間建立新鏈接。如果存在,然后在步驟307和308處接收節(jié)點(diǎn)把對象節(jié)點(diǎn)的地址添加到它的鏈接列表(但是被標(biāo)記為“未確認(rèn)”)并向?qū)ο蠊?jié)點(diǎn)發(fā)送AddLink消息。
然而,如果在步驟306處確定對象節(jié)點(diǎn)無法接受更多鏈接,那么接收節(jié)點(diǎn)如先前參照圖2所述的那樣試圖把它自己插入到現(xiàn)有鏈接中。第一步驟(309)將檢查接收節(jié)點(diǎn)是否存在用于兩個(gè)鏈接的空間;如果不存在,則終止處理。然而如果存在,那么接收節(jié)點(diǎn)從鏈接列表隨機(jī)選擇接收的Links消息中的鏈接(但是不選擇接收節(jié)點(diǎn)已存在到其的鏈接的節(jié)點(diǎn)),即,對象節(jié)點(diǎn)與另一節(jié)點(diǎn)(這里被稱為其他節(jié)點(diǎn))之間的鏈接。然后接收節(jié)點(diǎn)試圖通過以下步驟將它自己插入到該鏈接中311把對象節(jié)點(diǎn)(未確認(rèn))的地址添加到它的鏈接列表;312把其他節(jié)點(diǎn)(未確認(rèn))的地址添加到它的鏈接列表;313向?qū)ο蠊?jié)點(diǎn)發(fā)送包含有其他節(jié)點(diǎn)的地址的ChangeLink消息314向其他節(jié)點(diǎn)發(fā)送包含有對象節(jié)點(diǎn)的地址的ChangeLink消息然而,假設(shè)在步驟301處確定接收節(jié)點(diǎn)不存在添加鏈接的空間,或者在步驟302處已存在到對象節(jié)點(diǎn)的鏈接,那么處理檢查接收節(jié)點(diǎn)是否應(yīng)當(dāng)向它的備用鏈接列表添加鏈接。在步驟315中,如果發(fā)現(xiàn)對象節(jié)點(diǎn)已存在于備用列表中,則處理結(jié)束。在316處檢查是否存在向備用列表添加鏈接的空間,如果存在,則在317處及時(shí)添加鏈接。如果不存在,那么在318處隨機(jī)選擇備用鏈接中的一現(xiàn)有鏈接,并在步驟319處刪除它,從而在步驟317處可以將它替換為到對象的鏈接。此外,在320處使變量notifylevel遞減,如果(步驟321)該值保持非零,則在步驟322處將最初的Notify消息(連同該新值notifylevel)轉(zhuǎn)發(fā)給隨機(jī)選擇的現(xiàn)有鏈接所指向的節(jié)點(diǎn)(稱為替換節(jié)點(diǎn))。
該處理的效果是當(dāng)已具有全組鏈接的節(jié)點(diǎn)A接收到要求它鏈接到對象節(jié)點(diǎn)B的Notify消息時(shí),將B的地址記錄為備用鏈接。該鏈接保持休眠,直到A的備用鏈接列表已滿為止。然后,當(dāng)A接收到稍后的要求它鏈接到節(jié)點(diǎn)C的Notify消息并且在步驟318處選擇了到節(jié)點(diǎn)B的備用鏈接時(shí),在步驟322處生成的新Notify消息事實(shí)上是對節(jié)點(diǎn)B的請求以創(chuàng)建從它自己到節(jié)點(diǎn)C的鏈接。
還提供了這樣一種機(jī)制(但是在流程圖上未示出),通過該機(jī)制,當(dāng)鏈接是未確認(rèn)的并且在給定時(shí)段內(nèi)接收節(jié)點(diǎn)未(通過如下參照圖6所述的LinkAdded消息的方式)接收到確認(rèn)時(shí),刪除未確認(rèn)鏈接。注意,當(dāng)接收節(jié)點(diǎn)具有仍然處于“未確認(rèn)”狀態(tài)的鏈接時(shí),它響應(yīng)于LinksQuery消息返回這些未確認(rèn)鏈接(當(dāng)然也返回確認(rèn)的鏈接),使得其他節(jié)點(diǎn)可以確認(rèn)它試圖建立鏈接。
在圖3中,步驟305和309的“否”分支導(dǎo)致處理終止;然而如果希望,可以將它們導(dǎo)向在步驟315處開始的“備用鏈接”處理,這可以稍微提高效率。
在步驟309到314中,實(shí)際上節(jié)點(diǎn)斷開一個(gè)對象鏈接并將它自己插入到這之間。在流程圖中未示出的另一可選做法是節(jié)點(diǎn)斷開它自己的一個(gè)鏈接(當(dāng)然假設(shè)它已具有至少一個(gè)鏈接)并將對象插入到這之間。如果實(shí)施該做法,則應(yīng)當(dāng)在從步驟301的“否”分支之后立即嘗試該做法。首先,接收節(jié)點(diǎn)需要檢查對象是否具有少于L一1個(gè)鏈接、隨機(jī)選擇它自己的(到節(jié)點(diǎn)其他的)多個(gè)鏈接中的一個(gè)、將該鏈接替換為到對象的未確認(rèn)鏈接、并向?qū)ο蟀l(fā)送AddLink消息。為了建立對象與其他之間的雙向鏈接,然后(a)接收節(jié)點(diǎn)向?qū)ο蟀l(fā)送特殊的AddLink消息,該消息要求對象無條件地將其他作為未確認(rèn)鏈接添加到它的鏈接列表;(b)向其他發(fā)送特殊的ChangeLink消息,該消息以接收節(jié)點(diǎn)作為待刪除舊鏈接并將對象稱為待添加的新鏈接。除了步驟309到314,也可以包括該做法,或以該做法取代步驟309到314。
接收節(jié)點(diǎn)斷開它自己的一個(gè)鏈接的另一做法可以是它(首先驗(yàn)證了對象具有少于L-1個(gè)鏈接)向?qū)ο蟀l(fā)送把它自己當(dāng)作對象的Notify消息。這將得到同樣的結(jié)果,但是要花費(fèi)稍多的消息開銷。
圖4示出了節(jié)點(diǎn)如何處理到來的ChangeLink消息。當(dāng)接收到Notify消息的節(jié)點(diǎn)X想要把現(xiàn)有鏈接改變成兩個(gè)新鏈接時(shí)發(fā)送這些ChangeLink消息(見圖2)。接收節(jié)點(diǎn)Y在400處接收Notify消息,該Notify消息以節(jié)點(diǎn)Z為對象,即,要求節(jié)點(diǎn)Y將它的到節(jié)點(diǎn)Z的現(xiàn)有鏈接替換為到節(jié)點(diǎn)X的鏈接。如果它已具有到X的鏈接,則不再采取進(jìn)一步的動作(401),然而如果(402)它實(shí)際上不具有到節(jié)點(diǎn)Z的鏈接,則向發(fā)送方X發(fā)送(403)錯誤消息。
假設(shè)一切正常,則它向發(fā)送方X發(fā)送(404)LinksQuery消息并等待(405)來自發(fā)送節(jié)點(diǎn)X的回復(fù)Links消息,以檢查發(fā)送節(jié)點(diǎn)X是否確實(shí)創(chuàng)建了它在改變對象鏈接之間應(yīng)當(dāng)已創(chuàng)建的兩個(gè)新鏈接。如果這些檢查(406、407)是成功的,則接收節(jié)點(diǎn)刪除它到Z的鏈接(408)、添加X作為確認(rèn)鏈接(409)并把LinkAdded消息返回給發(fā)送方X(410)。
圖5示出了節(jié)點(diǎn)如何處理到來的AddLink消息。當(dāng)節(jié)點(diǎn)想要創(chuàng)建與一節(jié)點(diǎn)的新鏈接時(shí)發(fā)送這些消息(見圖1)。在501處接收到該消息之后,在步驟502處節(jié)點(diǎn)檢查它是否具有用于另一鏈接的空間,如果沒有,則在503處返回錯誤消息。否則,向發(fā)送方發(fā)送(504)LinksQuery消息并等待(505)發(fā)送節(jié)點(diǎn)回復(fù)的Links消息,使得它在506處可以檢查發(fā)送方是否確實(shí)創(chuàng)建了到接收節(jié)點(diǎn)的鏈接。若否,則它拒絕添加鏈接并終止,但是若是,那么它添加發(fā)送方作為確認(rèn)鏈接(507),并通過確認(rèn)把LinkAdded消息返回給發(fā)送方(508)。
圖6示出了節(jié)點(diǎn)如何處理到來的LinkAdded消息。當(dāng)另一節(jié)點(diǎn)接受了到接收節(jié)點(diǎn)的鏈接時(shí)發(fā)送這些消息,或者響應(yīng)于ChangeLink或AddLink消息發(fā)送這些消息。當(dāng)在600處接收到表示已接受鏈接的LinkAdded消息時(shí),在步驟601處將其狀態(tài)改變成“已確認(rèn)”。然后保持該鏈接,直到它被新鏈接改變(響應(yīng)于ChangeLink消息)或該鏈接被斷開為止。
圖7示出了節(jié)點(diǎn)如何處理到來的LinkError消息。當(dāng)在接收節(jié)點(diǎn)請求相互鏈接之后節(jié)點(diǎn)無法創(chuàng)建到該接收節(jié)點(diǎn)的鏈接(通過ChangeLink或AddLink消息)時(shí),或當(dāng)鏈接似乎被斷開時(shí)(位于另一端的節(jié)點(diǎn)可能對消息不響應(yīng),或者鏈接可能不是相互的),發(fā)送這些LinkError消息。不是由自組織處理而是在客戶機(jī)遍歷次網(wǎng)絡(luò)(如稍后要闡述的)時(shí)檢測斷開的鏈接。
在700處接收到該消息之后,確定(701)該消息是否與接收節(jié)點(diǎn)到其具有未確認(rèn)鏈接的節(jié)點(diǎn)有關(guān)。若是,那么(702)該消息攜帶表示未能創(chuàng)建所請求的鏈接的錯誤碼,然后在703處刪除該鏈接。然而如果該消息與接收節(jié)點(diǎn)到其具有未確認(rèn)鏈接的節(jié)點(diǎn)無關(guān),則接收節(jié)點(diǎn)向?qū)ο蟀l(fā)送(704)LinksQuery消息,等待(705)回復(fù)的Links消息,在706處檢查該回復(fù)以檢查對象是否具有到它自己的鏈接,若否,那么在步驟703處刪除到對象節(jié)點(diǎn)的該鏈接。
圖8示出了節(jié)點(diǎn)如何處理到來的LinksQuery消息。當(dāng)另一節(jié)點(diǎn)想要知道接收節(jié)點(diǎn)的鏈接時(shí)發(fā)送這些消息,因此,接收節(jié)點(diǎn)在800處接收到該消息時(shí)在801以Links消息作為響應(yīng)。
圖9示出了節(jié)點(diǎn)如何處理到來的Links消息。如何處理該消息完全取決于為什么發(fā)送對應(yīng)的LinksQuery消息。由于不同的原因而發(fā)送該消息,如在圖3、圖4、圖5以及圖7中所示。因此要發(fā)生的是當(dāng)發(fā)送LinksQuery消息時(shí),給定當(dāng)?shù)匚ㄒ坏囊弥挡⒁幌⑻幚砥髋c該引用關(guān)聯(lián)起來。然后,當(dāng)接收到Links消息時(shí)(900),識別出合適的消息處理器并在步驟902處將該消息轉(zhuǎn)發(fā)給該合適的消息處理器,以按正確的方式處理該消息。
當(dāng)然可能發(fā)生沒有響應(yīng)于LinksQuery而接收到任何Links消息的情況,例如這是因?yàn)榻邮展?jié)點(diǎn)已關(guān)機(jī)。因此,如果在給定時(shí)段之后未接收到任何Links消息,則刪除對應(yīng)的消息處理器。盡管這里所討論的任何流程圖中都未明確示出該情況,但是這僅僅意味著當(dāng)鏈接查詢超時(shí)時(shí),不再采取進(jìn)一步的動作并且“完成”整個(gè)流程圖。
獲取節(jié)點(diǎn)給定次網(wǎng)絡(luò)的單個(gè)節(jié)點(diǎn)的地址,可以發(fā)現(xiàn)網(wǎng)絡(luò)中的其他(有可能全部)節(jié)點(diǎn)??梢赃@樣做的方法是非常簡單的。向已知節(jié)點(diǎn)發(fā)送LinksQuery消息以請求它的所有鏈接。該節(jié)點(diǎn)以Links消息作為回復(fù),該Links消息包含有該節(jié)點(diǎn)鏈接到的所有節(jié)點(diǎn)的地址。然后可以依次聯(lián)系這些節(jié)點(diǎn)中的每一個(gè),請求它們的鏈接并由此獲得所有它們的鏈接的地址。通過按此方式繼續(xù)下去,遍歷該網(wǎng)絡(luò)并逐漸發(fā)現(xiàn)它包含的所有節(jié)點(diǎn)。
圖10更詳細(xì)地示出了該處理。應(yīng)當(dāng)明白,這是在圖1A所示的獲取步驟35中使用的處理。把已成功聯(lián)系到的所有已知節(jié)點(diǎn)的地址放在“已確認(rèn)”列表中??梢酝瑫r(shí)對數(shù)據(jù)進(jìn)行獲取。在“網(wǎng)頁評述”示例的情況下,數(shù)據(jù)的相關(guān)項(xiàng)是評述的地址,并且也把它輸入到確認(rèn)列表中與節(jié)點(diǎn)地址并排在一起。然后該確認(rèn)列表提供在圖1A中的“獲取”評述步驟(36)所需的地址。另一方面,“未確認(rèn)”列表包含有尚未聯(lián)系的已知節(jié)點(diǎn)的地址。最后,“已知”列表包含有所有已知節(jié)點(diǎn)的地址。它包括“確認(rèn)”和“未確認(rèn)”列表中的所有地址,但是也包括已聯(lián)系并且未響應(yīng)的節(jié)點(diǎn)的地址。已知列表還具有針對輸入到該列表中的每個(gè)地址的用于包含源地址(即,該地址是這樣的節(jié)點(diǎn)的地址,從該節(jié)點(diǎn)的列表獲得了當(dāng)前指針指向的地址)的附加字段,以用于錯誤報(bào)告的目的。
在何處發(fā)生獲取處理并不重要可以在節(jié)點(diǎn)處,或其他地方。在步驟1000處,與啟動地址(即,已被確定屬于所討論的虛擬網(wǎng)絡(luò)的一個(gè)節(jié)點(diǎn)的地址)一起接收到對獲取節(jié)點(diǎn)地址的請求。在步驟1002處,最初將地址指針當(dāng)前設(shè)置為該地址,而最初將第二地址指針源設(shè)置為空(1003)。
在步驟1004和1005處向由當(dāng)前所給定的地址發(fā)送LinksQuery消息,并等待回復(fù)。當(dāng)接收到Links消息時(shí),將當(dāng)前與來自Links消息的評述地址一起添加到已確認(rèn)列表(步驟1006)。
在步驟1007處,進(jìn)入子處理,針對包含在Links消息中的每個(gè)地址執(zhí)行該子處理。如果(1008)該地址已在已知列表中,該處理進(jìn)行到下一地址。否則將該地址添加到已知列表和未確認(rèn)列表中(步驟1009、1010)。此外(1011),將當(dāng)前中的地址輸入到已知列表中作為所添加地址的源。
一旦完成了該子處理,然后(除非未確認(rèn)列表是空的,在此情況下在步驟1012處結(jié)束該處理)在步驟1013處從未確認(rèn)列表隨機(jī)選擇一地址。該地址成為新當(dāng)前地址,并從未確認(rèn)列表刪除該地址。下一步驟(1014)是在已知列表中查找當(dāng)前以獲取與之相關(guān)聯(lián)的源地址,并把該源地址輸入到源指針中。并非一定要進(jìn)行隨機(jī)選擇。例如,在未確認(rèn)列表中可以選擇當(dāng)前作為“最老的”節(jié)點(diǎn),或者可以按照另一準(zhǔn)則(例如,節(jié)點(diǎn)的地址)對列表進(jìn)行排序并且當(dāng)前可以始終是該列表中的“第一個(gè)”節(jié)點(diǎn)。然而,對當(dāng)前的隨機(jī)選擇具有它的優(yōu)點(diǎn)。這將負(fù)載分布在系統(tǒng)中(尤其是并非總是獲取所有節(jié)點(diǎn)時(shí)),并且還分布對網(wǎng)絡(luò)鏈接的測試,使得更快速地發(fā)現(xiàn)斷開鏈接。
然后再從步驟1004繼續(xù)該處理并一直重復(fù),直到未確認(rèn)列表為空為止——即,不能再找到新地址。
獲取處理的副作用是發(fā)現(xiàn)斷開的鏈接。例如,可能節(jié)點(diǎn)不響應(yīng),或鏈接不是相互的。后者是這樣的情況節(jié)點(diǎn)A鏈接到節(jié)點(diǎn)B,但是節(jié)點(diǎn)B在其鏈接表中沒有節(jié)點(diǎn)A。當(dāng)發(fā)現(xiàn)斷開鏈接時(shí),通過LinkError消息通知作為該鏈接的“源”的節(jié)點(diǎn)。如圖7已示出的,然后該源節(jié)點(diǎn)可以檢查該鏈接本身(以確認(rèn)錯誤報(bào)告的準(zhǔn)確性),結(jié)果可以刪除該鏈接。通過步驟1005處的失敗識別出未響應(yīng)的節(jié)點(diǎn),以在設(shè)置的超時(shí)時(shí)段內(nèi)接收Links消息,并在步驟1015處向源發(fā)送錯誤消息,該錯誤消息包含有當(dāng)前的地址和“未回復(fù)”錯誤碼,于是控制返回到步驟1012。通過在步驟1016處的測試識別鏈接的非相互性,以確定為當(dāng)前接收的Links消息是否包含有源地址若否,向源發(fā)送(步驟1017)包含有當(dāng)前地址和“非相互的”錯誤碼的錯誤消息,但是獲取處理照舊進(jìn)行,因?yàn)椴扇⊙a(bǔ)救措施(根據(jù)圖7的處理)是源節(jié)點(diǎn)的責(zé)任。如果源是空的,則跳過步驟1016處的測試。
注意,即使多個(gè)已確認(rèn)節(jié)點(diǎn)可能鏈接到對Links消息沒有響應(yīng)的節(jié)點(diǎn),也只通知首先貢獻(xiàn)該鏈接的節(jié)點(diǎn)(源節(jié)點(diǎn))“沒有回復(fù)”。這部分地是因?yàn)檫@使得更容易理解流程圖。然而,可以證明存在另一實(shí)際的好處??赡艽嬖谶@樣的情況節(jié)點(diǎn)由于暫時(shí)過載而未(及時(shí))回復(fù)。在此情況下,不能希望多個(gè)節(jié)點(diǎn)同時(shí)向它發(fā)送LinksQuery消息以測驗(yàn)是否存在錯誤(如圖7中的那樣)。無論如何,如果希望,當(dāng)發(fā)現(xiàn)這種鏈接時(shí),都可以直接更新節(jié)點(diǎn)獲取算法以通知被斷開鏈接影響的所有已知節(jié)點(diǎn)。
在圖10中節(jié)點(diǎn)獲取一直進(jìn)行到已聯(lián)系所有已知節(jié)點(diǎn)。實(shí)際中,可能希望早一些結(jié)束該處理。例如,如果用戶在尋找下載文件的位置,為他或她提供十個(gè)可能的下載地址就足夠了,而不是例如全部一千個(gè)。
完全串行地示出了圖10中的算法。每次只聯(lián)系一個(gè)節(jié)點(diǎn)。只在已接收到回復(fù)(或已超時(shí))之后向前一節(jié)點(diǎn)發(fā)送另一LinksQuery消息。然而,實(shí)際中,我們更愿意通過并行發(fā)出多個(gè)LinksQuery消息來加速獲取。也可以是這樣的情況在框1000處,由圖10的處理的多個(gè)實(shí)例同時(shí)處理多個(gè)獲取請求。
討論自組織的成功性次虛擬網(wǎng)絡(luò)的目的是把應(yīng)當(dāng)歸組在一起的所有節(jié)點(diǎn)自組織到單個(gè)網(wǎng)絡(luò)中,而不是自組織到幾個(gè)不相連接的網(wǎng)絡(luò)。是否是這種情況很大程度上取決于如何生成最初的Notify消息。例如,如果存在應(yīng)當(dāng)全部被歸組在一起的一組12個(gè)節(jié)點(diǎn),但是在該組中5個(gè)節(jié)點(diǎn)只接收到有關(guān)這5個(gè)節(jié)點(diǎn)的組中的其他節(jié)點(diǎn)的通知,并且其他7個(gè)節(jié)點(diǎn)中沒有一個(gè)節(jié)點(diǎn)被通知這5個(gè)節(jié)點(diǎn)中的任何一個(gè),那么這些節(jié)點(diǎn)不可能自組織成單個(gè)網(wǎng)絡(luò)。相反,它們排列成兩個(gè)獨(dú)立網(wǎng)絡(luò),一個(gè)是5個(gè)節(jié)點(diǎn)的,一個(gè)是7個(gè)節(jié)點(diǎn)的。然而,只要最初的通知不會使得不可能將節(jié)點(diǎn)自組織成單個(gè)網(wǎng)絡(luò),那么自組織處理就幾乎不可能使節(jié)點(diǎn)不自組織成單個(gè)網(wǎng)絡(luò)。對自組織導(dǎo)致單個(gè)網(wǎng)絡(luò)的可能性的計(jì)算是很復(fù)雜的,并且依賴于生成初始通知的機(jī)制。然而,在仿真處理中我們已經(jīng)試驗(yàn)了幾種不同的初始通知機(jī)制,到目前為止節(jié)點(diǎn)從未無法自組織成單個(gè)網(wǎng)絡(luò)。
對惡意節(jié)點(diǎn)的健壯性迄今為止假定所有節(jié)點(diǎn)都遵守協(xié)議。但是,有可能存在不遵守規(guī)則的惡意節(jié)點(diǎn)。它們可能試圖斷開由其他節(jié)點(diǎn)保持的鏈接并且/或者試圖獲得太多到它們自己的連接。希望整個(gè)系統(tǒng)對這種惡意盡可能地健壯。
迄今所述的系統(tǒng)已經(jīng)對惡意節(jié)點(diǎn)相當(dāng)健壯了。這是因?yàn)槊總€(gè)節(jié)點(diǎn)在改變它自己的連接之前總是與其他相關(guān)節(jié)點(diǎn)保持的鏈接檢查LinksQuery-Links消息交換。例如,當(dāng)節(jié)點(diǎn)接收到AddLink消息(見圖3)時(shí),它在添加發(fā)送方作為它自己的鏈接之前首先檢查發(fā)送節(jié)點(diǎn)是否確實(shí)已鏈接到它。
然而,系統(tǒng)仍然具有相對的脆弱性。實(shí)際上,當(dāng)節(jié)點(diǎn)響應(yīng)Links消息時(shí)它們很容易“撒謊”。往往節(jié)點(diǎn)發(fā)送LinksQuery消息以檢查鏈接到它的接收節(jié)點(diǎn)。接收節(jié)點(diǎn)在知道這種情況的前提下可以回復(fù)假的Links消息,該消息被修改成使得其始終包含Links消息的發(fā)送方作為鏈接。這使得節(jié)點(diǎn)可以具有比允許數(shù)量L個(gè)節(jié)點(diǎn)多得多的到其的鏈接。因而,這將降低系統(tǒng)中的“好”鏈接的總數(shù)量。
幸運(yùn)的是,存在解決該脆弱性的方法。只要節(jié)點(diǎn)通過代理節(jié)點(diǎn)發(fā)送它們的LinksQuery就可以了。每當(dāng)節(jié)點(diǎn)想要發(fā)送查詢時(shí)隨機(jī)選擇這些代理。每個(gè)節(jié)點(diǎn)例如可以使用它當(dāng)前鏈接到的節(jié)點(diǎn)作為代理。這樣,想要知道另一節(jié)點(diǎn)(B)的鏈接的節(jié)點(diǎn)(A)對于節(jié)點(diǎn)B來說不了解,因?yàn)樗邮盏降腖inksQuery消息來自代理節(jié)點(diǎn)(C),并且節(jié)點(diǎn)B從節(jié)點(diǎn)C接收的消息根本不涉及節(jié)點(diǎn)A。因此節(jié)點(diǎn)B沒有可行的方法來發(fā)送對整個(gè)系統(tǒng)具有重要影響的假消息。
當(dāng)然,存在惡意代理的后果如何的問題。盡管顯然惡意代理具有有害影響(不可避免地,不遵守協(xié)議的節(jié)點(diǎn)一定程度上會影響性能),但是該影響是有限的。原因是它們只能惡意處理它們被要求轉(zhuǎn)發(fā)的LinksQuery,這些請求在所有節(jié)點(diǎn)上大體上平均地散布開來。另一方面,當(dāng)不使用代理時(shí),惡意節(jié)點(diǎn)可以通過變得特別活躍而導(dǎo)致嚴(yán)重破壞。如果這些節(jié)點(diǎn)發(fā)送許多虛假的AddLink消息,并對它們隨后發(fā)送的許多Links消息造假,那么對整個(gè)系統(tǒng)的影響要大得多。
主虛擬網(wǎng)絡(luò)在我們的前述國際專利申請中詳細(xì)描述了主網(wǎng)絡(luò)。這里,與使得可以生成用于驅(qū)動次網(wǎng)絡(luò)的自組織的Notify消息的修改例一起對基本獲取和自組織機(jī)制進(jìn)行描述。
首先需要說明由該機(jī)制使用的虛擬坐標(biāo)空間的概念。已經(jīng)提到過,每個(gè)節(jié)點(diǎn)都具有標(biāo)簽。將該標(biāo)簽翻譯成虛擬空間中的坐標(biāo)。該空間可以是一維、二維或更高維的。確切的翻譯機(jī)制并不是很關(guān)鍵對于一維空間,可以把被視為二進(jìn)制數(shù)的標(biāo)簽直接用作坐標(biāo)。對于二維或更高維,優(yōu)選方法是把被視為位串的標(biāo)簽劃分成兩個(gè)或更多個(gè)相等的組,被視為二進(jìn)制數(shù)的每個(gè)組都形成一個(gè)坐標(biāo)。將每個(gè)坐標(biāo)(或者,在一維空間中是坐標(biāo))都縮放成位于范圍
內(nèi)。
如果希望,可以使用虛擬空間中兩個(gè)標(biāo)簽之間的兩個(gè)坐標(biāo)組之間的歐幾里得距離的距離(盡管可以使用其他距離,如城市塊距離(通常被稱為曼哈頓距離))。坐標(biāo)空間是卷起來的,因此在x方向上x1與x2之間的距離是Min{(1-|x1-x2|),|x1-x2|}因此在點(diǎn)(x1,y1)與(x2,y2)之間的二維歐幾里得距離是 至此,我們還記得每個(gè)節(jié)點(diǎn)都具有列表22(圖1),該列表22帶有表示到其他節(jié)點(diǎn)的鏈接的數(shù)量個(gè)條目。每個(gè)條目都由標(biāo)簽和這種另一節(jié)點(diǎn)的地址組成。最初,該列表是空的,因此該節(jié)點(diǎn)具有第二個(gè)類似的引導(dǎo)鏈接列表——即,較少的鏈接(典型的是4個(gè)),使得最初可以聯(lián)系網(wǎng)絡(luò)中的其他節(jié)點(diǎn)。除了列表22中的鏈接(被稱為短程鏈接),節(jié)點(diǎn)還可以具有附加的分級排列的列表,和/或長程鏈接列表。在我們早先的國際專利申請中描述了這些列表,但是,由于它們是可選的,所以這里不描述它們。
消息首先,使用以下消息(注意,在主虛擬網(wǎng)絡(luò)中使用的消息與在次虛擬網(wǎng)絡(luò)中使用的消息不同,并且與之完全獨(dú)立)。
FIND消息用于啟動和完成節(jié)點(diǎn)查找并用于支持“拉(PULL)”更新。
它們包含有●目標(biāo)節(jié)點(diǎn)的標(biāo)簽●啟動查詢的節(jié)點(diǎn)的地址FOUND消息用于返回查詢結(jié)果。它們包含有●目標(biāo)節(jié)點(diǎn)的標(biāo)簽●找到的節(jié)點(diǎn)的標(biāo)簽
●找到的節(jié)點(diǎn)的地址●與找到的節(jié)點(diǎn)相關(guān)聯(lián)的次網(wǎng)絡(luò)的節(jié)點(diǎn)的地址●應(yīng)用特有數(shù)據(jù)——在此情況下是與找到的節(jié)點(diǎn)相關(guān)聯(lián)的評述節(jié)點(diǎn)的地址PUSH消息把節(jié)點(diǎn)的標(biāo)簽通告給其他節(jié)點(diǎn)。它們包含有●對象節(jié)點(diǎn)的標(biāo)簽●對象節(jié)點(diǎn)的地址●到達(dá)目標(biāo)節(jié)點(diǎn)的跳程(hop to go)數(shù)NOTIFY消息用于傳播Push更新。它們包含有●對象節(jié)點(diǎn)的標(biāo)簽●對象節(jié)點(diǎn)的地址獲取圖11示出了每個(gè)節(jié)點(diǎn)如何處理到來的Find消息。原則上,接收節(jié)點(diǎn)尋找這樣的節(jié)點(diǎn)該節(jié)點(diǎn)比接收節(jié)點(diǎn)本身到Find消息中標(biāo)識出的目標(biāo)節(jié)點(diǎn)更近。如果找到了,傳遞該Find消息。如果未找到,返回它自己的地址和標(biāo)簽。通過執(zhí)行以下步驟來執(zhí)行該處理步驟1100節(jié)點(diǎn)接收到Find消息,該Find消息包含有目標(biāo)節(jié)點(diǎn)的標(biāo)簽和啟動節(jié)點(diǎn)的地址;步驟1105節(jié)點(diǎn)將目標(biāo)節(jié)點(diǎn)的坐標(biāo)翻譯成標(biāo)簽空間中的坐標(biāo),并計(jì)算在標(biāo)簽空間中該節(jié)點(diǎn)所記錄的所有鏈接(節(jié)點(diǎn))中哪個(gè)鏈接距目標(biāo)節(jié)點(diǎn)最近。將相關(guān)節(jié)點(diǎn)指定為最近的節(jié)點(diǎn);步驟1110節(jié)點(diǎn)對它自己的坐標(biāo)與目標(biāo)節(jié)點(diǎn)的坐標(biāo)之間的距離與最近節(jié)點(diǎn)的坐標(biāo)與目標(biāo)節(jié)點(diǎn)的坐標(biāo)之間的距離進(jìn)行比較;步驟1115如果它自己的坐標(biāo)與目標(biāo)節(jié)點(diǎn)的坐標(biāo)之間的距離較小(或相等),則節(jié)點(diǎn)通過網(wǎng)絡(luò)10向啟動節(jié)點(diǎn)發(fā)送包含有它自己的標(biāo)簽和地址的Found消息;步驟1120如果最近節(jié)點(diǎn)的坐標(biāo)與目標(biāo)節(jié)點(diǎn)的坐標(biāo)之間的距離較小,則節(jié)點(diǎn)把Find消息轉(zhuǎn)發(fā)給最近的節(jié)點(diǎn)。
在步驟1115中返回的節(jié)點(diǎn)的地址要么是帶有目標(biāo)標(biāo)簽的節(jié)點(diǎn)的地址,要么是在標(biāo)簽空間中距它最近的節(jié)點(diǎn)的地址。當(dāng)返回的標(biāo)簽與目標(biāo)標(biāo)簽不匹配時(shí),這可能意味著目標(biāo)節(jié)點(diǎn)不存在或虛擬網(wǎng)絡(luò)不是足夠自組織的。
Push各節(jié)點(diǎn)自發(fā)地啟動Push更新。例如,各節(jié)點(diǎn)可以定期啟動Push更新處理。在Push更新中,節(jié)點(diǎn)通過隨機(jī)節(jié)點(diǎn)序列(在設(shè)置了該序列的長度限制的情況下)發(fā)送帶有它自己的標(biāo)簽和地址的Push消息。該序列中的最后一個(gè)節(jié)點(diǎn)向啟動節(jié)點(diǎn)發(fā)回Notify消息。圖12、13以及14示出了該處理的各個(gè)部分。
圖12示出了節(jié)點(diǎn)如何通過以下步驟啟動Push更新步驟1200節(jié)點(diǎn)從它的引導(dǎo)鏈接中隨機(jī)選擇鏈接并輸入由所選鏈接標(biāo)識的節(jié)點(diǎn)地址作為下一消息的轉(zhuǎn)發(fā)地址;步驟1205節(jié)點(diǎn)在“Push”消息中為跳程字段輸入較小的正隨機(jī)數(shù);步驟1210節(jié)點(diǎn)輸入它自己的標(biāo)簽和地址作為“Push”消息中的對象節(jié)點(diǎn)的標(biāo)簽和地址,并通過網(wǎng)絡(luò)10向位于轉(zhuǎn)發(fā)地址的節(jié)點(diǎn)發(fā)送該“Push”消息。
圖13和14示出了如何更新短程鏈接。將“Push”消息與Notify消息一起用于更新短程鏈接。在該更新處理中有兩個(gè)階段。在第一階段,各節(jié)點(diǎn)隨機(jī)轉(zhuǎn)發(fā)“Push”消息,直到接收到的消息中的跳程值是“0”為止。如果跳程值是“0”,則接收節(jié)點(diǎn)將通過發(fā)送Notify消息啟動“Push”更新的第二階段。在第二階段中,將Notify消息相繼轉(zhuǎn)發(fā)給這樣的節(jié)點(diǎn)其標(biāo)簽在虛擬空間中距對象節(jié)點(diǎn)的標(biāo)簽逐漸較近。如果找不到帶有較近標(biāo)簽的節(jié)點(diǎn),那么必要時(shí)更新最后找到的節(jié)點(diǎn)的鏈接。當(dāng)否則無法找到給定的對象節(jié)點(diǎn)(例如,由于它尚未建立短程鏈接)時(shí)總是如此。然后最后找到的節(jié)點(diǎn)還向可能還改進(jìn)它們的鏈接設(shè)置的節(jié)點(diǎn)發(fā)送附加的Notify消息。
參照圖13,處理到來的Push消息的Push更新的第一階段包括以下步驟步驟1300節(jié)點(diǎn)接收Push消息。該P(yáng)ush消息包含作為對象節(jié)點(diǎn)的啟動節(jié)點(diǎn)的標(biāo)簽和地址并具有跳程字段值;步驟1305接收節(jié)點(diǎn)從它的引導(dǎo)鏈接中隨機(jī)選擇鏈接并輸入由所選鏈接標(biāo)識的節(jié)點(diǎn)地址作為下一消息的轉(zhuǎn)發(fā)地址;步驟1310和1315接收節(jié)點(diǎn)使跳程字段值減1并檢查減小的跳程值是否仍然大于零;步驟1320如果減小的跳程值仍然大于零,節(jié)點(diǎn)向它已輸入的轉(zhuǎn)發(fā)地址轉(zhuǎn)發(fā)Push消息;步驟1325如果該值為零,那么節(jié)點(diǎn)輸入(在接收的Push消息中給定的)啟動節(jié)點(diǎn)的標(biāo)簽和地址作為Notify消息中的對象節(jié)點(diǎn)并向它已輸入的轉(zhuǎn)發(fā)地址發(fā)送Notify消息。
參照圖14,處理Push更新的第二階段(用于處理Notify消息)包括以下步驟步驟1400節(jié)點(diǎn)接收Notify消息,該Notify消息包含有節(jié)點(diǎn)的標(biāo)簽和地址作為對象節(jié)點(diǎn);步驟1401接收節(jié)點(diǎn)檢查Notify消息的對象是否具有與接收節(jié)點(diǎn)相同的標(biāo)簽;步驟1402若是,接收節(jié)點(diǎn)檢查Notify消息的對象是否具有與接收節(jié)點(diǎn)相同的地址。在此情況下它不再采取進(jìn)一步的動作;然而如果Notify消息的對象是具有與接收節(jié)點(diǎn)相同的標(biāo)簽但是不同的地址的節(jié)點(diǎn),那么將出現(xiàn)兩種情況。首先(步驟1403)接收節(jié)點(diǎn)向到來的Notify消息的對象節(jié)點(diǎn)發(fā)送Notify消息,該Notify消息把從接收節(jié)點(diǎn)自己的短程鏈接列表隨機(jī)選出的節(jié)點(diǎn)當(dāng)作對象。其次,步驟1404針對次網(wǎng)絡(luò)的動作導(dǎo)致Notify消息的生成。然而,接收節(jié)點(diǎn)不能直接生成這種消息。通常,我們傾向于避免在不同虛擬網(wǎng)絡(luò)之間在通信網(wǎng)絡(luò)上發(fā)送消息,但是主要問題在于接收節(jié)點(diǎn)不僅需要次網(wǎng)絡(luò)自己的節(jié)點(diǎn)地址,而且需要與對象節(jié)點(diǎn)相關(guān)聯(lián)的次節(jié)點(diǎn)的節(jié)點(diǎn)地址。接收節(jié)點(diǎn)沒有該地址。因此,使用雙階段處理。
首先,接收節(jié)點(diǎn)把特殊的CrossNotify消息發(fā)送給被指定為到來的Notify消息的對象的主網(wǎng)絡(luò)節(jié)點(diǎn)。該消息包含●發(fā)送方地址,被設(shè)置為接收節(jié)點(diǎn)(即,接收到來的(主網(wǎng)絡(luò))消息的節(jié)點(diǎn))的地址;●接收方(或目的地)地址,被設(shè)置為包含在到來的Notify消息中的地址;●對象地址,被設(shè)置為與接收節(jié)點(diǎn)相關(guān)聯(lián)的次網(wǎng)絡(luò)節(jié)點(diǎn)的地址。
注意,前兩個(gè)地址是主網(wǎng)絡(luò)上的節(jié)點(diǎn)地址,第三個(gè)地址是次網(wǎng)絡(luò)上的節(jié)點(diǎn)地址。
其次,實(shí)際上,接收CrossNotify消息的主網(wǎng)絡(luò)節(jié)點(diǎn)將其轉(zhuǎn)發(fā)給次網(wǎng)絡(luò)的相關(guān)節(jié)點(diǎn)。若有必要,轉(zhuǎn)發(fā)節(jié)點(diǎn)可以將該消息的格式改成在次網(wǎng)絡(luò)上使用的格式,并將(主網(wǎng)絡(luò))接收方地址替換成次網(wǎng)絡(luò)的相關(guān)節(jié)點(diǎn)地址。然后正如圖3所示的那樣處理該消息。我們說“實(shí)際上”的原因是,實(shí)際中,我們傾向于接收CrossNotify消息的主網(wǎng)絡(luò)節(jié)點(diǎn)僅僅向它的次網(wǎng)絡(luò)相關(guān)節(jié)點(diǎn)發(fā)送簡單的本地消息,該消息包含有在該CrossNotify消息的對象字段中指定的地址。在該情況下,將圖3的處理修改成包括把notifylevel設(shè)置成合適的值的步驟。
參照圖15通過示例說明該處理,該圖中,方框表示節(jié)點(diǎn),箭頭表示消息。假設(shè)在圖14的步驟1400中主網(wǎng)絡(luò)的節(jié)點(diǎn)P1接收到Notify消息,該Notify消息包含作為對象的主網(wǎng)絡(luò)節(jié)點(diǎn)P2的標(biāo)簽LP2和地址AP2。在節(jié)點(diǎn)P1處,它識別出(圖14中的步驟1401、1402)對象節(jié)點(diǎn)具有與P1相同的標(biāo)簽(即,LP1=LP2)但是不同的地址(AP1≠AP2)。節(jié)點(diǎn)P1知道它的次網(wǎng)絡(luò)節(jié)點(diǎn)S1的地址AS1,并以發(fā)送方地址AP1、接收方地址AP2以及對象地址AS1生成(在圖14的步驟1404處)CrossNotify消息。在主網(wǎng)絡(luò)節(jié)點(diǎn)P2處接收到該消息,并且該節(jié)點(diǎn)把帶有地址AS1的本地通知消息發(fā)送給次網(wǎng)絡(luò)的相關(guān)節(jié)點(diǎn)S2。另選地,次網(wǎng)絡(luò)節(jié)點(diǎn)S2在收到LocalNotify消息時(shí)可以不根據(jù)圖3的處理創(chuàng)建鏈接本身,而是生成(次網(wǎng)絡(luò)的)又一將自己當(dāng)作對象的Notify消息(由圖12的虛線所示),節(jié)點(diǎn)S2把該Notify消息發(fā)送給節(jié)點(diǎn)S1。然后在節(jié)點(diǎn)S1處理該Notify消息,然后節(jié)點(diǎn)S1使用圖3的處理。該做法涉及附加消息,但是其優(yōu)點(diǎn)在于當(dāng)執(zhí)行圖3的處理時(shí),實(shí)際上其地址在該消息的對象字段中的節(jié)點(diǎn)已發(fā)送Notify消息,并由此內(nèi)在地將對象節(jié)點(diǎn)確認(rèn)為仍然存在。
現(xiàn)在回到圖14步驟1405接收節(jié)點(diǎn)將對象節(jié)點(diǎn)的標(biāo)簽翻譯成坐標(biāo),并計(jì)算它已記錄的短程鏈接中的哪一個(gè)得到這樣的節(jié)點(diǎn)標(biāo)簽,即,該節(jié)點(diǎn)標(biāo)簽的坐標(biāo)在虛擬空間中距對象節(jié)點(diǎn)的坐標(biāo)最近。將相關(guān)節(jié)點(diǎn)指定為最近的節(jié)點(diǎn);步驟1415接收節(jié)點(diǎn)對它自己的坐標(biāo)與對象節(jié)點(diǎn)的坐標(biāo)之間的距離與最近節(jié)點(diǎn)的坐標(biāo)與對象節(jié)點(diǎn)的坐標(biāo)之間的距離進(jìn)行比較。
如果在步驟1415處發(fā)現(xiàn)接收節(jié)點(diǎn)與對象節(jié)點(diǎn)之間的距離相等或更短,那么接收節(jié)點(diǎn)將對象節(jié)點(diǎn)的標(biāo)簽和地址添加為它自己的短程鏈接組中的鏈接((步驟1420)以下參照圖16對該處理進(jìn)行進(jìn)一步的討論)、向?qū)ο蠊?jié)點(diǎn)發(fā)送包含有接收節(jié)點(diǎn)的標(biāo)簽和地址的Notify消息(步驟1430)并向最近節(jié)點(diǎn)發(fā)送包含有對象節(jié)點(diǎn)的標(biāo)簽和地址的Notify消息(步驟1435);如果在步驟1415處發(fā)現(xiàn)最近的節(jié)點(diǎn)與對象節(jié)點(diǎn)之間的距離較遠(yuǎn),則接收節(jié)點(diǎn)回到步驟1435,在步驟1435處它向最近節(jié)點(diǎn)發(fā)送包含有對象節(jié)點(diǎn)的標(biāo)簽和地址的Notify消息。
圖16詳細(xì)示出了節(jié)點(diǎn)在更新其短程鏈接時(shí)如何動作。它把新鏈接添加到它的短程鏈接并刪除由該鏈接取代的所有短程鏈接。
參照圖16,例如由于圖14的步驟1420的結(jié)果,節(jié)點(diǎn)可能需要將新鏈接添加到它的短程鏈接列表。
步驟1600更新節(jié)點(diǎn)(即,正在對其短程鏈接組執(zhí)行更新的節(jié)點(diǎn))具有新鏈接的節(jié)點(diǎn)的標(biāo)簽和地址;步驟1605更新節(jié)點(diǎn)識別出所有現(xiàn)有的這樣的鏈接其節(jié)點(diǎn)距新節(jié)點(diǎn)比距更新節(jié)點(diǎn)更近。將要取代這些被識別的鏈接。為了識別這些鏈接,更新節(jié)點(diǎn)針對每個(gè)現(xiàn)有鏈接計(jì)算新節(jié)點(diǎn)的坐標(biāo)與在它的現(xiàn)有鏈接中所指定的節(jié)點(diǎn)的坐標(biāo)之間的距離。它對這些距離中的每個(gè)距離與它自己的坐標(biāo)與在相應(yīng)的現(xiàn)有鏈接中所指定的節(jié)點(diǎn)的坐標(biāo)之間的距離進(jìn)行比較;
步驟1610從短程鏈接中刪除所有這樣的鏈接其相對于新節(jié)點(diǎn)的距離比相對于更新節(jié)點(diǎn)的距離要短;步驟1620更新節(jié)點(diǎn)將新節(jié)點(diǎn)的鏈接添加到它的短程鏈接。
權(quán)利要求
1.一種計(jì)算機(jī)網(wǎng)絡(luò),其包含多個(gè)節(jié)點(diǎn)并且具有第一獲取裝置,對標(biāo)簽的輸入作出響應(yīng)以識別與該標(biāo)簽匹配的節(jié)點(diǎn)的地址;第二獲取裝置,被連接以接收第一獲取裝置識別的地址,并且可以響應(yīng)于其進(jìn)行操作以識別與同一標(biāo)簽匹配的其他節(jié)點(diǎn)的地址;其中,與給定標(biāo)簽匹配的各個(gè)節(jié)點(diǎn)具有與其相關(guān)聯(lián)的用于包含與同一標(biāo)簽匹配的其他節(jié)點(diǎn)的地址的數(shù)據(jù)存儲區(qū),并且對查詢消息進(jìn)行響應(yīng)以返回包含列表地址的消息;并且其中,第二獲取裝置可以進(jìn)行操作以向第一獲取裝置識別的地址發(fā)送查詢消息,并且在接收到響應(yīng)時(shí)反復(fù)向?qū)υ摬樵兿⒌捻憫?yīng)中包含的地址發(fā)送查詢消息,或者對隨后的查詢消息的響應(yīng)可以是該情況。
2.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)網(wǎng)絡(luò),其中,第一獲取裝置由多個(gè)虛擬節(jié)點(diǎn)的主網(wǎng)絡(luò)形成,各個(gè)節(jié)點(diǎn)是通過到次網(wǎng)絡(luò)的其他節(jié)點(diǎn)的鏈接的列表來定義的,列表中的各個(gè)條目包括各個(gè)其他節(jié)點(diǎn)的標(biāo)簽和地址;并且其中,各個(gè)節(jié)點(diǎn)包括對接收到包含有標(biāo)簽的請求消息作出響應(yīng)以在網(wǎng)絡(luò)中傳播該請求消息的裝置,以及對接收到包含有與接收其的節(jié)點(diǎn)的標(biāo)簽匹配的標(biāo)簽的請求消息作出響應(yīng)以生成回復(fù)消息的裝置。
3.根據(jù)權(quán)利要求1或2所述的計(jì)算機(jī)網(wǎng)絡(luò),其中,第二獲取裝置由多個(gè)虛擬節(jié)點(diǎn)的次網(wǎng)絡(luò)形成,各個(gè)節(jié)點(diǎn)是通過到主網(wǎng)絡(luò)的其他節(jié)點(diǎn)的鏈接的列表來定義的,列表中的各個(gè)條目包括各個(gè)其他節(jié)點(diǎn)的地址;并且其中,各個(gè)節(jié)點(diǎn)包括對接收到請求消息作出響應(yīng)以生成包含所述列表的地址的回復(fù)消息的裝置。
4.根據(jù)從屬于權(quán)利要求2時(shí)的權(quán)利要求3所述的計(jì)算機(jī)網(wǎng)絡(luò),其中,主網(wǎng)絡(luò)的節(jié)點(diǎn)生成的回復(fù)消息包括與生成該回復(fù)消息的節(jié)點(diǎn)相關(guān)聯(lián)的次網(wǎng)絡(luò)的該節(jié)點(diǎn)的地址。
5.根據(jù)從屬于權(quán)利要求2時(shí)的權(quán)利要求3或者權(quán)利要求4所述的計(jì)算機(jī)網(wǎng)絡(luò),其中主網(wǎng)絡(luò)的各個(gè)節(jié)點(diǎn)包括可以進(jìn)行操作以啟動并傳播試探消息的裝置,各個(gè)試探消息包含主網(wǎng)絡(luò)的啟動節(jié)點(diǎn)的標(biāo)簽和地址;各個(gè)節(jié)點(diǎn)在接收到包含與接收節(jié)點(diǎn)的標(biāo)簽匹配的標(biāo)簽和與接收節(jié)點(diǎn)的地址不匹配的地址的試探消息時(shí)可以進(jìn)行操作以生成用于添加到次網(wǎng)絡(luò)的鏈接的通知消息,所述通知消息對啟動試探消息的節(jié)點(diǎn)進(jìn)行標(biāo)識并且包含與接收節(jié)點(diǎn)相關(guān)聯(lián)的次網(wǎng)絡(luò)的節(jié)點(diǎn)的地址。
6.根據(jù)權(quán)利要求5所述的計(jì)算機(jī)網(wǎng)絡(luò),其中,通知消息包含作為目的地的啟動節(jié)點(diǎn)的地址,啟動節(jié)點(diǎn)在其接收時(shí)可以進(jìn)行操作以向與該啟動節(jié)點(diǎn)相關(guān)聯(lián)的次網(wǎng)絡(luò)的節(jié)點(diǎn)轉(zhuǎn)發(fā)一消息,該消息請求添加在啟動節(jié)點(diǎn)與地址包含在所述通知消息中的節(jié)點(diǎn)之間的鏈接。
7.根據(jù)權(quán)利要求1至6中的任一項(xiàng)所述的計(jì)算機(jī)網(wǎng)絡(luò),其中,次網(wǎng)絡(luò)的各個(gè)節(jié)點(diǎn)包括被編程以執(zhí)行以下操作的處理裝置接收消息;對請求關(guān)于列表內(nèi)容的信息的消息進(jìn)行響應(yīng);遵照接收的請求從列表中刪除地址,并將另一地址插入列表中;以及響應(yīng)于接收到請求該節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的鏈接的消息執(zhí)行以下操作(A)生成到第二節(jié)點(diǎn)的消息,該消息請求關(guān)于其列表內(nèi)容的信息;(B)確定第一節(jié)點(diǎn)和第二節(jié)點(diǎn)二者是否在各種情況下都在其列表中具有少于預(yù)定數(shù)量的數(shù)量個(gè)地址;(C)在滿足該條件的情況下,將第二節(jié)點(diǎn)的地址插入其列表中,并生成到第二節(jié)點(diǎn)的消息,該消息請求第二節(jié)點(diǎn)將該節(jié)點(diǎn)的地址添加到其列表;(D)在不滿足該條件的情況下,確定所述節(jié)點(diǎn)是否在其列表中具有比所述預(yù)定數(shù)量少至少兩個(gè)的數(shù)量個(gè)地址,如果是,則執(zhí)行以下操作(a)從第二節(jié)點(diǎn)的列表中選擇第三節(jié)點(diǎn)的地址;(b)將第二節(jié)點(diǎn)的地址插入第一節(jié)點(diǎn)的列表中,并且將第三節(jié)點(diǎn)的地址插入到第一節(jié)點(diǎn)的列表中;(c)生成到第二節(jié)點(diǎn)的消息,該消息請求從第二節(jié)點(diǎn)的列表中刪除第三節(jié)點(diǎn)的地址,并且插入所述節(jié)點(diǎn)的地址;以及(d)生成到第三節(jié)點(diǎn)的消息,該消息請求從第三節(jié)點(diǎn)的列表中刪除第二節(jié)點(diǎn)的地址,并且插入所述節(jié)點(diǎn)的地址。
8.一種操作包含多個(gè)節(jié)點(diǎn)的計(jì)算機(jī)網(wǎng)絡(luò)的方法,該方法包括以下步驟響應(yīng)于標(biāo)簽的輸入而執(zhí)行第一獲取操作,以識別與該標(biāo)簽匹配的節(jié)點(diǎn)的地址;響應(yīng)于第一獲取裝置識別的地址而執(zhí)行第二獲取操作,以識別與同一標(biāo)簽匹配的其他節(jié)點(diǎn)的地址;其中,與給定標(biāo)簽匹配的各個(gè)節(jié)點(diǎn)具有與其相關(guān)聯(lián)的用于包含與同一標(biāo)簽匹配的其他節(jié)點(diǎn)的地址的數(shù)據(jù)存儲區(qū),并且對查詢消息進(jìn)行響應(yīng)以返回包含列表地址的消息;并且其中,第二獲取操作包括向第一獲取裝置識別出的地址發(fā)送查詢消息,并且在接收到響應(yīng)時(shí)反復(fù)向?qū)υ摬樵兿⒌捻憫?yīng)中包含的地址發(fā)送查詢消息,或者對隨后的查詢消息的響應(yīng)可以是該情況。
9.根據(jù)權(quán)利要求8所述的方法,其中,第一獲取操作使用多個(gè)虛擬節(jié)點(diǎn)的主網(wǎng)絡(luò),各個(gè)節(jié)點(diǎn)是通過到所述主網(wǎng)絡(luò)的其他節(jié)點(diǎn)的鏈接的列表來定義的,列表中的各個(gè)條目包括各個(gè)其他節(jié)點(diǎn)的標(biāo)簽和地址;并且包括如下步驟接收包含標(biāo)簽的請求消息;在網(wǎng)絡(luò)中傳播該請求消息;以及當(dāng)包含的標(biāo)簽與接收該請求消息的節(jié)點(diǎn)的標(biāo)簽匹配的請求消息到達(dá)該節(jié)點(diǎn)時(shí)生成回復(fù)消息。
10.根據(jù)權(quán)利要求8或9所述的方法,其中,第二獲取操作使用多個(gè)虛擬節(jié)點(diǎn)的次網(wǎng)絡(luò),各個(gè)節(jié)點(diǎn)是通過到所述次網(wǎng)絡(luò)的其他節(jié)點(diǎn)的鏈接的列表來定義的,列表中的各個(gè)條目包括各個(gè)其他節(jié)點(diǎn)的地址;并且包括以下步驟當(dāng)請求消息到達(dá)節(jié)點(diǎn)時(shí)生成包含該節(jié)點(diǎn)的列表的地址的回復(fù)消息。
11.根據(jù)從屬于權(quán)利要求9時(shí)的權(quán)利要求10所述的方法,其中,主網(wǎng)絡(luò)的節(jié)點(diǎn)生成的回復(fù)消息包括與生成該回復(fù)消息的節(jié)點(diǎn)相關(guān)聯(lián)的次網(wǎng)絡(luò)的該節(jié)點(diǎn)的地址。
12.根據(jù)從屬于權(quán)利要求9時(shí)的權(quán)利要求10或者權(quán)利要求1所述的方法,其中,主網(wǎng)絡(luò)的各個(gè)節(jié)點(diǎn)包括可以進(jìn)行操作以啟動并傳播試探消息的裝置,各個(gè)試探消息包含主網(wǎng)絡(luò)的啟動節(jié)點(diǎn)的標(biāo)簽和地址;并且包括以下步驟當(dāng)包含與接收節(jié)點(diǎn)的標(biāo)簽匹配的標(biāo)簽和與接收節(jié)點(diǎn)的地址不匹配的地址的試探消息到達(dá)該接收節(jié)點(diǎn)時(shí),生成用于添加到次網(wǎng)絡(luò)的鏈接的通知消息,所述通知消息對啟動試探消息的節(jié)點(diǎn)進(jìn)行標(biāo)識并包含與接收節(jié)點(diǎn)相關(guān)聯(lián)的次網(wǎng)絡(luò)的節(jié)點(diǎn)的地址。
13.根據(jù)權(quán)利要求12所述的方法,其中,通知消息包含作為目的地的啟動節(jié)點(diǎn)的地址,啟動節(jié)點(diǎn)在其接收時(shí)向與該啟動節(jié)點(diǎn)相關(guān)聯(lián)的次網(wǎng)絡(luò)的節(jié)點(diǎn)轉(zhuǎn)發(fā)一消息,該消息請求添加在啟動節(jié)點(diǎn)與地址包含在所述通知消息中的節(jié)點(diǎn)之間的鏈接。
14.根據(jù)權(quán)利要求10到13中的任一項(xiàng)所述的方法,進(jìn)一步包括以下步驟(i)接收請求在次虛擬網(wǎng)絡(luò)的第一節(jié)點(diǎn)與第二節(jié)點(diǎn)之間的鏈接的通知消息;(ii)確定第一節(jié)點(diǎn)和第二節(jié)點(diǎn)二者是否在各種情況下都在其列表中具有比預(yù)定數(shù)量少的數(shù)量個(gè)地址;(iii)在滿足該條件的情況下,將第一節(jié)點(diǎn)的地址插入第二節(jié)點(diǎn)的列表中,并將第二節(jié)點(diǎn)的地址插入到第一節(jié)點(diǎn)的列表中;(iv)在不滿足該條件的情況下,確定第一節(jié)點(diǎn)在其列表中是否具有比所述預(yù)定數(shù)量少至少兩個(gè)的數(shù)量個(gè)地址,如果是則執(zhí)行以下操作(a)從第二節(jié)點(diǎn)的列表中選擇第三節(jié)點(diǎn)的地址;(b)從第二節(jié)點(diǎn)的列表中刪除第三節(jié)點(diǎn)的地址;(c)從第三節(jié)點(diǎn)的列表中刪除第二節(jié)點(diǎn)的地址;以及(d)將第二節(jié)點(diǎn)的地址插入第一節(jié)點(diǎn)的列表中,并將第三節(jié)點(diǎn)的地址插入第一節(jié)點(diǎn)的列表中;(e)將第一節(jié)點(diǎn)的地址插入第二節(jié)點(diǎn)的列表中,并將第一節(jié)點(diǎn)的地址插入第三節(jié)點(diǎn)的列表中。
15.根據(jù)權(quán)利要求14所述的方法,其中,在第一節(jié)點(diǎn)處接收請求鏈接的消息,并且其中,在步驟(ii i)中將第二節(jié)點(diǎn)的地址連同表示它未被確認(rèn)的標(biāo)記插入第一節(jié)點(diǎn)的列表中;從第一節(jié)點(diǎn)向第二節(jié)點(diǎn)發(fā)送一消息,該消息請求第二節(jié)點(diǎn)將第一節(jié)點(diǎn)的地址添加到第二節(jié)點(diǎn)的鏈接;在第二節(jié)點(diǎn)處照此添加所述地址并向第一節(jié)點(diǎn)發(fā)送確認(rèn)消息;以及在第一節(jié)點(diǎn)處,當(dāng)接收到確認(rèn)消息時(shí)刪除“未確認(rèn)”標(biāo)記。
16.根據(jù)權(quán)利要求15所述的方法,其中,節(jié)點(diǎn)在接收到請求其向其列表添加指定節(jié)點(diǎn)的地址的消息時(shí),首先向該指定節(jié)點(diǎn)發(fā)送請求該指定節(jié)點(diǎn)的列表的副本的消息,然后僅在它從該指定節(jié)點(diǎn)接收到包含有接收該請求的節(jié)點(diǎn)的地址的列表的情況下才遵照所述請求。
17.根據(jù)權(quán)利要求14至16中的任一項(xiàng)所述的方法,其中,在第一節(jié)點(diǎn)處接收請求鏈接的消息,并且其中第一節(jié)點(diǎn)向第二節(jié)點(diǎn)發(fā)送對第二節(jié)點(diǎn)的列表的副本的請求;第二節(jié)點(diǎn)向第一節(jié)點(diǎn)發(fā)送所請求的副本;在第一節(jié)點(diǎn)處執(zhí)行從所述列表選擇第三節(jié)點(diǎn)的地址的步驟(iv)(a);并且按如下方式執(zhí)行步驟(iv)(a)和(b)第一節(jié)點(diǎn)向第一節(jié)點(diǎn)的列表添加第二節(jié)點(diǎn)的地址和第三節(jié)點(diǎn)的地址,在每種情況下都連同添加表示它未被確認(rèn)的標(biāo)記;第一節(jié)點(diǎn)向第二節(jié)點(diǎn)發(fā)送一消息,該消息請求第二節(jié)點(diǎn)從它的列表刪除第三節(jié)點(diǎn)的地址并將其替換為第一節(jié)點(diǎn)的地址;第一節(jié)點(diǎn)向第三節(jié)點(diǎn)發(fā)送一消息,該消息請求第三節(jié)點(diǎn)從它的列表刪除第二節(jié)點(diǎn)的地址并將其替換為第一節(jié)點(diǎn)的地址;第二節(jié)點(diǎn)在接收到這種消息時(shí)從它的列表刪除第三節(jié)點(diǎn)的地址,將其替換為第一節(jié)點(diǎn)的地址,并向第一節(jié)點(diǎn)發(fā)送確認(rèn)消息;第三節(jié)點(diǎn)在接收到這種消息時(shí)從它的列表刪除第二節(jié)點(diǎn)的地址,將其替換為第一節(jié)點(diǎn)的地址,并向第一節(jié)點(diǎn)發(fā)送確認(rèn)消息;第一節(jié)點(diǎn)在接收到來自第二節(jié)點(diǎn)或第三節(jié)點(diǎn)的確認(rèn)消息時(shí)從它的列表刪除相應(yīng)的“未確認(rèn)”標(biāo)記。
18.根據(jù)權(quán)利要求17所述的方法,其中,節(jié)點(diǎn)在接收到請求其從其列表刪除另一節(jié)點(diǎn)的地址并將該地址替換為指定節(jié)點(diǎn)的地址的消息時(shí),首先向該指定節(jié)點(diǎn)發(fā)送請求該指定節(jié)點(diǎn)的列表的副本的消息,然后僅在其從該指定節(jié)點(diǎn)接收到包含有接收該請求的節(jié)點(diǎn)的地址的列表的情況下才遵照所述請求。
19.根據(jù)權(quán)利要求16或18所述的方法,其中,按照不將發(fā)送列表請求消息的節(jié)點(diǎn)的地址通知給所述指定節(jié)點(diǎn)的方式,通過中間節(jié)點(diǎn)來發(fā)送針對所述指定節(jié)點(diǎn)的列表請求消息和對該消息的回復(fù)。
20.根據(jù)權(quán)利要求14至19中的任一項(xiàng)所述的方法,其中,各節(jié)點(diǎn)還具有用于存儲至少一個(gè)備用鏈接的裝置,并且包括以下步驟在當(dāng)?shù)谝还?jié)點(diǎn)的列表中的地址數(shù)量等于預(yù)定數(shù)量時(shí)接收到請求第一節(jié)點(diǎn)與第二節(jié)點(diǎn)之間的鏈接的消息的情況下,將第二節(jié)點(diǎn)的地址插入所述備用鏈接存儲裝置中;以及當(dāng)接收到后面的請求第一節(jié)點(diǎn)與另一節(jié)點(diǎn)之間的鏈接的消息時(shí),將該消息轉(zhuǎn)發(fā)給從第一節(jié)點(diǎn)的備用鏈接存儲裝置獲取的地址。
全文摘要
通過響應(yīng)于標(biāo)簽的輸入執(zhí)行第一獲取操作(32)以識別與該標(biāo)簽匹配的節(jié)點(diǎn)的地址,并響應(yīng)于第一獲取裝置識別的地址執(zhí)行第二獲取操作(35)以識別與同一標(biāo)簽匹配的其它節(jié)點(diǎn)的地址,從而找出計(jì)算機(jī)網(wǎng)絡(luò)的節(jié)點(diǎn)。與給定標(biāo)簽匹配的各個(gè)節(jié)點(diǎn)具有用于包含與同一標(biāo)簽匹配的其它節(jié)點(diǎn)的地址的數(shù)據(jù)存儲區(qū),并且對查詢消息進(jìn)行響應(yīng)以返回包含列表地址的消息。第二獲取操作包括以下步驟向第一獲取裝置識別的地址發(fā)送查詢消息,并且在接收到響應(yīng)時(shí)反復(fù)向?qū)ο惹安樵兿⒌捻憫?yīng)中包含的地址發(fā)送查詢消息。
文檔編號H04L12/24GK1768519SQ200480008539
公開日2006年5月3日 申請日期2004年9月13日 優(yōu)先權(quán)日2003年9月25日
發(fā)明者歐文·雷恩·邦斯馬 申請人:英國電訊有限公司