專利名稱:對等名稱解析電信協(xié)議及在此使用的消息格式數(shù)據(jù)結(jié)構(gòu)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及對等架構(gòu)中的通信協(xié)議,特別涉及某種對等圖中實現(xiàn)結(jié)構(gòu)化通信的消息格式數(shù)據(jù)結(jié)構(gòu)。
背景技術(shù):
互聯(lián)網(wǎng)上的多種通信技術(shù)使具有共同興趣的用戶能協(xié)同工作、共享文件、互相聊天、組播音頻與視頻進(jìn)行演示及小組會議,以及參加多玩家的游戲。但是現(xiàn)在,互聯(lián)網(wǎng)上多數(shù)的通信是發(fā)生在某種服務(wù)器為中心的環(huán)境中的,在這種環(huán)境中所有的通信都流向或流經(jīng)大的中央服務(wù)器,個人可以連接到這些服務(wù)器以加入或參加這樣的通信。
隨著對等技術(shù)的重新出現(xiàn),當(dāng)前的互聯(lián)網(wǎng)通信以服務(wù)器為中心的模式正在被迅速替代。確實,對等技術(shù)使用戶能在沒有服務(wù)器的環(huán)境中互相聯(lián)絡(luò),而從基于服務(wù)器的互聯(lián)網(wǎng)通信的限制中解放出來。在一個基于對等的系統(tǒng)中,由于通信是直接在網(wǎng)絡(luò)中同等點之間發(fā)生的,用戶的匿名與隱私就得以維護(hù)。但是,盡管個別的通信和文件共享在對等網(wǎng)絡(luò)中相對是很好設(shè)立的,設(shè)立、發(fā)現(xiàn)、加入、維護(hù)及共享信息在對等環(huán)境中卻不是很好設(shè)立的。
對等通信,以及實際上所有類型的通信,都依賴于在選定的實體或節(jié)點間建立有效連接的可能性。這些實體或節(jié)點可以是同等點(如用戶或機(jī)器)或在一個對等網(wǎng)絡(luò)中形成的組。這些節(jié)點之間的連接形成了對等圖,使通信及信息可以傳遞向這些節(jié)點,或在這些節(jié)點之間傳遞。但是,實體可能具有會變化的一個或幾個地址,因為實體會在網(wǎng)絡(luò)中移動,拓?fù)鋾兓赓U的地址不能續(xù)租,組的功能或目的變化,等等。對于這種尋址問題的一種經(jīng)典的架構(gòu)解決辦法是對每個實體賦一個穩(wěn)定的名稱,并在需要連接的時候?qū)⑦@個名稱“解析”成某個當(dāng)前的地址。這一名稱到地址的轉(zhuǎn)化必須非常魯棒,還必須能夠容易且快速地更新。
為了增加那些尋求連接到某個實體的實體找到該實體地址的可能性,許多對等協(xié)議允許實體通過多種機(jī)制公布其個別或組地址。有些協(xié)議還允許客戶端通過處理來自網(wǎng)絡(luò)中其它客戶端的請求來獲取其它實體地址的知識。確實,這樣的地址知識的獲取通過維護(hù)一個魯棒的圖實現(xiàn)了這些對等網(wǎng)絡(luò)的成功運(yùn)作。也就是說,關(guān)于網(wǎng)絡(luò)中其它同等點或組的信息越好(即圖越魯棒),對某特定資源或記錄的檢索能命中的可能性就越大。
如在某個以服務(wù)器為中心的環(huán)境中一樣,對等圖可以完全開放以實現(xiàn)在該圖內(nèi)檢索與共享互聯(lián)網(wǎng)文件。但是,由于對等網(wǎng)絡(luò)是作為一個分布用戶或同等點的圖而構(gòu)成的,在網(wǎng)絡(luò)內(nèi)所有同等點認(rèn)識所共享的信息之前,必需將通信和數(shù)據(jù)(記錄)從一個同等點傳遞給另一個。提供這樣的路由的系統(tǒng)包括Usenet和OSPF。然而,這樣的現(xiàn)有系統(tǒng)受到那些到現(xiàn)在為止已限制了對等技術(shù)的充分發(fā)展的局限的困擾。而且,對等網(wǎng)絡(luò)現(xiàn)在受到缺乏適當(dāng)?shù)膱D管理的困擾,圖管理有時在某個成員離開組時能使圖“斷裂”或分離。在這一情況下,來自該圖的某一部分的信息可能不再能傳遞給由于同等點之一的離開所產(chǎn)生分隔的另一端的對等成員。此外的一個缺點是,不存在適當(dāng)?shù)臋C(jī)制來探測這樣的分隔。
除了在已有技術(shù)中存在的功能問題之外,網(wǎng)絡(luò)流量的數(shù)量也會輕易地淹沒參與在網(wǎng)絡(luò)中的同等點。消息大小與結(jié)構(gòu)使同等點快速處理消息的能力變得復(fù)雜,并且在網(wǎng)絡(luò)的大小增長時導(dǎo)致通信的延誤或丟棄。
所以,在已有技術(shù)中就存在對一種能解決上述的以及在已有技術(shù)中存在的其它問題的對等消息協(xié)議和數(shù)據(jù)結(jié)構(gòu)的需求。
發(fā)明內(nèi)容
在本申請中所披露的發(fā)明性概念包括一種適用于一種對等名稱解析協(xié)議的可擴(kuò)展的消息數(shù)據(jù)結(jié)構(gòu)。這一消息數(shù)據(jù)結(jié)構(gòu)利用消息數(shù)據(jù)字段來構(gòu)建用于PNRP的多種消息。這些消息數(shù)據(jù)字段的每一個都包含一個消息元素。較佳的是,第一個字段是消息頭元素,包括協(xié)議信息并標(biāo)識消息的類型。
至于消息本身,每個消息元素都包含許多消息元素數(shù)據(jù)字段。這些消息元素字段包括一個類型字段、一個長度字段和該消息元素的內(nèi)容或載荷。類型字段包括一個指定消息元素的類型的標(biāo)識符。長度字段標(biāo)識了包括字段類型和長度字段的該消息元素的長度。
在某一實施例中,為恰當(dāng)運(yùn)行對等名稱解析協(xié)議(PNRP),至少要十個消息來構(gòu)成。這十個消息包括一個“解析”消息、一個“回應(yīng)”消息、一個“懇求”消息、一個“廣告”消息、一個“請求”消息、一個“充溢”消息、一個“查詢”消息、一個“授權(quán)”消息、一個“應(yīng)答”消息和一個“修復(fù)”消息。這些消息是以在某一較佳實施例中所存在的二十二種不同消息元素構(gòu)建的。
所附錄并且構(gòu)成本說明一部分的附圖例示了本發(fā)明的幾個方面,并且與描述一起,用來解釋本發(fā)明的原則。在這些附圖中圖1是一幅一般性地例示本發(fā)明所存屬的一個示例性計算機(jī)系統(tǒng)的框圖;圖2是一幅例示對等名稱解析協(xié)議(PNRP)的功能元素的簡化框圖;圖3是一幅例示本發(fā)明的一個方面的協(xié)議消息流圖;圖4是一幅例示本發(fā)明的另一個方面的協(xié)議消息流圖;圖5是一幅例示本發(fā)明的可擴(kuò)展數(shù)據(jù)結(jié)構(gòu)模型的數(shù)據(jù)結(jié)構(gòu)圖,該模型實現(xiàn)構(gòu)造本發(fā)明的消息;圖6是一幅例示構(gòu)造本發(fā)明的一個示例性消息的簡化數(shù)據(jù)結(jié)構(gòu)圖;盡管本發(fā)明將聯(lián)系某些較佳實施例來描述,但我們并無意將本發(fā)明限制于那些實施例。相反的是,我們的意圖是覆蓋包括在如所附權(quán)利要求所定義的本發(fā)明的精神和范圍內(nèi)的所有的可替換方法、修改和等價物。
具體實施例方式
參見附圖(其中同樣的索引編號表示同樣的元素),本發(fā)明被例示成是實現(xiàn)在一個適當(dāng)?shù)挠嬎悱h(huán)境中。盡管并不需要,但本發(fā)明將在計算機(jī)可執(zhí)行指令的一般上下文中描述,例如由個人計算機(jī)執(zhí)行的程序模塊。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的過程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等。而且,相關(guān)技術(shù)的行家將了解本發(fā)明可以以其它計算機(jī)系統(tǒng)配置來實施,包括手持設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程的消費(fèi)電子品、網(wǎng)絡(luò)PC、小型計算機(jī)、大型計算機(jī)等等。本發(fā)明還可以在分布式計算環(huán)境中實施,在分布式計算環(huán)境中任務(wù)是由通過某種通信網(wǎng)絡(luò)相聯(lián)接的遠(yuǎn)端處理設(shè)備來執(zhí)行。在一個分布式計算環(huán)境中,程序模塊可以位于本地和遠(yuǎn)端內(nèi)存存儲設(shè)備上。
圖1例示了一個本發(fā)明可以在其中實現(xiàn)的合適的計算系統(tǒng)環(huán)境100的一個示例。計算系統(tǒng)環(huán)境100只是合適的計算環(huán)境的一個例子,而不是打算建議關(guān)于本發(fā)明的使用或功能范圍的任何限制。計算環(huán)境100不應(yīng)當(dāng)解讀成對在該示例性操作環(huán)境100中所例示的任一部件或其組合具有任何依賴或要求。
本發(fā)明可運(yùn)作于多種其它通用或?qū)S糜嬎阆到y(tǒng)環(huán)境或配置??梢赃m用于本發(fā)明的眾所周知的計算系統(tǒng)、環(huán)境和/或配置的例子包括(但不限于)個人計算機(jī)、服務(wù)器計算機(jī)、手持或膝上設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機(jī)頂盒、可編程消費(fèi)電子品、網(wǎng)絡(luò)PC、小型計算機(jī)、大型計算機(jī)、包括任何以上系統(tǒng)或設(shè)備的分布式計算系統(tǒng),等等。
本發(fā)明可以以計算機(jī)可執(zhí)行指令的一般上下文來描述,例如由計算機(jī)執(zhí)行的程序模塊。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的過程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等。本發(fā)明還可以在分布式計算環(huán)境中實現(xiàn),在分布式環(huán)境中任務(wù)是由通過某種通訊網(wǎng)絡(luò)相聯(lián)接的遠(yuǎn)端處理設(shè)備來執(zhí)行。在分布式計算環(huán)境中,程序模塊可以位于包括內(nèi)存存儲設(shè)備的本地或遠(yuǎn)端計算機(jī)存儲媒介中。
參照圖1,一個用于實現(xiàn)本發(fā)明的示例性系統(tǒng)包括一臺計算機(jī)110形式的通用計算設(shè)備。計算機(jī)110的部件可以包括(但不限于)一個處理單元120、一個系統(tǒng)內(nèi)存130,以及一個將包括系統(tǒng)內(nèi)存的多個系統(tǒng)部件連接到處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可以是幾種總線架構(gòu)之一,包括內(nèi)存總線或內(nèi)存控制器、外圍設(shè)備總線,以及使用多種總線架構(gòu)之一的局部總線。舉例而言(但非限制),這樣的架構(gòu)包括工業(yè)標(biāo)準(zhǔn)架構(gòu)(ISA)總線、微通道架構(gòu)(MCA)總線、增強(qiáng)ISA(EISA)總線、視頻電子標(biāo)準(zhǔn)協(xié)會(VESA)局部總線,以及也稱為Mezzanine總線的外圍部件互連(PCI)總線。
計算機(jī)110一般包括多種計算機(jī)可讀取媒介。計算機(jī)可讀取媒介可以是能由計算機(jī)110所訪問的任何可用的媒介,包括易失和不易失媒介、可移動和不可移動媒介。舉例來說(但非限制),計算機(jī)可讀取媒介可以由計算機(jī)存儲媒介和通訊媒介組成。計算機(jī)存儲媒介包括以任何存儲信息(如計算機(jī)可讀取指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù))的方法或技術(shù)實現(xiàn)的易失和不易失媒介、可移動和不可移動媒介。計算機(jī)存儲媒介包括(但不限于)RAM、ROM、EEPROM、閃存或其它內(nèi)存技術(shù)、CD-ROM、數(shù)字萬用盤(DVD)或其它光盤存儲器、盒式磁帶、磁帶、磁盤存儲器或其它磁存儲設(shè)備,或可用以存儲所需要信息并能由計算機(jī)110訪問的任何其它媒介。通訊媒介一般將計算機(jī)可讀取指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)實現(xiàn)在某種調(diào)制了的數(shù)據(jù)信號中,如某種載波或其它傳輸機(jī)制,并包括任何信息傳遞媒介。術(shù)語“調(diào)制了的數(shù)據(jù)信號”意指某種信號,其一個或多個特征可以某種方式設(shè)置或改變,以便將信息編碼到該信號中。舉例而言(但非限制),通訊媒介包括聯(lián)線媒介(如聯(lián)線網(wǎng)絡(luò)或直接線纜連接)和無線媒介(如聲音、FR、紅外或其它無線媒介)。以上的任意組合也應(yīng)當(dāng)包括在計算機(jī)可讀取媒介的范圍內(nèi)。
系統(tǒng)存儲器130包括易失和/或非易失內(nèi)存形式的計算機(jī)存儲媒介,如只讀存儲器(ROM)131和隨機(jī)訪問存儲器(RAM)132。在ROM 131中一般存儲了一個基本輸入/輸出系統(tǒng)133(BIOS),含有(如在啟動時)幫助在計算機(jī)110內(nèi)各元件間傳遞信息的基本過程。RAM 132一般包含可由處理單元120立即訪問和/或當(dāng)前在處理單元120上執(zhí)行的數(shù)據(jù)和/或程序模塊。舉例而言(但非限制),圖1例示了操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136、以及程序數(shù)據(jù)137。
計算機(jī)110還可以包括其它可移動/不可移動的、易失/不易失的計算機(jī)存儲媒介。僅舉例而言,圖1例示了一個讀寫不可移動不易失磁媒介的硬盤驅(qū)動器141、一個讀寫可移動不易失磁盤152的磁盤驅(qū)動器151,以及一個讀寫可移動非易失光盤156(如CDROM或其它光媒介)的光盤驅(qū)動器155。其它可以用于該示例性操作環(huán)境的可移動/不可移動、易失/不易失計算機(jī)存儲媒介包括(但不限于)盒式磁帶、閃存卡、數(shù)字萬用盤、數(shù)字錄影帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅(qū)動器141一般通過一個不可移動存儲器接口(如接口140)連接到系統(tǒng)總線121,而磁盤驅(qū)動器151和光盤驅(qū)動器155一般由一個可移動存儲器接口(如接口150)連接到系統(tǒng)總線121。
上面所討論并在圖1中例示的計算機(jī)存儲媒介為計算機(jī)110提供計算機(jī)可讀取指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲。例如,在圖1中,硬盤驅(qū)動器141被例示成存儲著操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147。請注意這些部件可以相同也可以不同于操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136和程序數(shù)據(jù)137。這里賦予操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147不同的編號,是為了例示至少它們是不同的拷貝。用戶可以通過輸入設(shè)備如鍵盤162和指點設(shè)備161(一般指鼠標(biāo)、軌跡球或觸摸板)來將命令和信息輸入計算機(jī)110。其它輸入設(shè)備(未示出)可以包括麥克風(fēng)、游戲桿、游戲手柄、衛(wèi)星天線、掃描儀等等。這些及其它輸入設(shè)備通常通過一個與系統(tǒng)總線相連的用戶輸入接口160來連接到處理單元120,但也可以由其它接口和總線結(jié)構(gòu)來連接,如并口、游戲口或通用串行總線(USB)。監(jiān)視器191或其它類型的顯示設(shè)備也通過一個接口(如視頻接口190)來連接到系統(tǒng)總線121。除監(jiān)視器以外,計算機(jī)還可以包括通過輸出外圍接口195連接的其它外圍輸出設(shè)備(如揚(yáng)聲器197和打印機(jī)196)。
計算機(jī)110可以在某個與一臺或多臺遠(yuǎn)端計算機(jī)(如遠(yuǎn)端計算機(jī)180)邏輯連接的聯(lián)網(wǎng)環(huán)境中運(yùn)行。遠(yuǎn)端計算機(jī)180可以是另一臺個人計算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備或其它普通網(wǎng)絡(luò)節(jié)點,并且一般包括在上面關(guān)于個人計算機(jī)110所描述的多個或所有元件(盡管在圖1中只例示了一個內(nèi)存存儲設(shè)備181)。在圖1中所描述的邏輯連接包括局域網(wǎng)(LAN)171和廣域網(wǎng)(WAN)173,但也可以包括其它網(wǎng)絡(luò)。在辦公室、企業(yè)范圍的計算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和互聯(lián)網(wǎng)中,這樣的聯(lián)網(wǎng)環(huán)境是很普遍的。
當(dāng)在LAN聯(lián)網(wǎng)環(huán)境中使用時,個人計算機(jī)110通過一個網(wǎng)絡(luò)接口或適配器170連接到LAN 171。當(dāng)在WAN聯(lián)網(wǎng)環(huán)境中使用時,計算機(jī)110一般包括調(diào)制解調(diào)器172或其它用于在廣域網(wǎng)173(如互聯(lián)網(wǎng))上建立通信的手段。調(diào)制解調(diào)器172(可以是內(nèi)置的或外置的)可以通過用戶輸入接口160或其它合適的機(jī)制連接到系統(tǒng)總線121。在聯(lián)網(wǎng)環(huán)境中,關(guān)于個人計算機(jī)110(或其各部分)所描述的程序模塊可以存儲在遠(yuǎn)端內(nèi)存存儲設(shè)備中。舉例而言(并非限制),圖1將遠(yuǎn)端應(yīng)用程序185例示為駐留在內(nèi)存設(shè)備181上。可以了解,所示出的網(wǎng)絡(luò)連接是示例性的,還可以使用在計算機(jī)間建立通訊鏈路的其它手段。
在下面的描述中,除非另外指明,本發(fā)明將引述由一臺或多臺計算機(jī)所執(zhí)行的動作和操作的符號表示來描述。這樣,就能理解這樣的有時被指出是由計算機(jī)執(zhí)行的動作和操作包括由該計算機(jī)的處理單元操作以某種結(jié)構(gòu)化形式表示數(shù)據(jù)的電子信號。這一操作在該計算機(jī)的內(nèi)存系統(tǒng)中轉(zhuǎn)換或維護(hù)數(shù)據(jù),這些數(shù)據(jù)以相關(guān)技術(shù)的行家所充分理解的方式重新配置或者改變該計算機(jī)的運(yùn)行。維護(hù)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)就是具有由數(shù)據(jù)格式所定義的特定屬性的內(nèi)存物理位置。但是,盡管本發(fā)明是在前面的上下文中描述的,但并不限制如相關(guān)技術(shù)的行家所了解的那樣,此后所描述的多種動作和操作也可以在硬件中實現(xiàn)。
如上面所介紹的那樣,對等(P2P)協(xié)議的成功依賴于該協(xié)議在選定的實體之間建議有效連接的能力。同樣,在這一P2P網(wǎng)絡(luò)中組的形成也依賴于這一能力。由于某個特定用戶可能在具有不同地址的多個地點以多種方式連接入網(wǎng)絡(luò),一個較佳的方法是為該用戶或組賦一個唯一的標(biāo)識,而后通過該協(xié)議將該標(biāo)識解析成一個或多個特定地址。這樣一個當(dāng)前發(fā)明的標(biāo)識管理系統(tǒng)及方法所特別適用于的對等名稱解析協(xié)議(PNRP)在同時未決的申請編號09/942164(題為對等名稱解析協(xié)議(PNRP)及與之使用的多層緩存,2001年8月29日入檔)、同時未決的申請編號10/122863(題為用于對等名稱解析協(xié)議(PNRP)的多層緩存架構(gòu)和緩存管理方法,2002年4月15日入檔)和同時未決的申請編號09/955923(題為用于維護(hù)對等圖的對等組管理及方法,2001年9月19日入檔)中都有所描述,這些申請的教義和揭示都通過索引在此完整附錄。
同樣,同時未決的申請編號09/956260(題為對等名稱解析協(xié)議(PNRP)安全基礎(chǔ)架構(gòu)及方法,2001年9月19日入檔)描述了一個根本的安全基礎(chǔ)架構(gòu),能確保網(wǎng)絡(luò)內(nèi)多個實體的標(biāo)識有效,而不會不必要地以過度的流量增加網(wǎng)絡(luò)負(fù)擔(dān)。在P2P分組環(huán)境中,同時未決的申請編號09/955924(題為對等名稱解析協(xié)議(PNRP)組安全基礎(chǔ)架構(gòu)及方法,2001年9月19日入檔)描述了用于這樣的組的根本的安全基礎(chǔ)架構(gòu)。這些申請的教義和揭示也都通過索引在此完整附錄。但是,盡管本發(fā)明的接口與方法特別適用于和互操作于這樣的PNRP,相關(guān)技術(shù)的行家將認(rèn)識到本發(fā)明并不因而被限制,而是適用于希望提供P2P圖管理功能的任何P2P系統(tǒng)或協(xié)議。
如在上面所附的描述PNRP并提供某些有用背景的同時未決申請中所討論的那樣,對等名稱解析協(xié)議(PNRP)是一個基于同等點的名稱到地址解析協(xié)議。同等點資源可以被賦予一個同等點名稱。某個應(yīng)用可以以PNRP注冊一個同等點名稱,以使其能被其它同等點發(fā)現(xiàn)。其它的應(yīng)用可以使用PNRP來解析某個同等點名稱,以獲得所注冊應(yīng)用的相應(yīng)IP地址和端口。PNRP并不提供任何尋找或瀏覽同等點名稱的機(jī)制。發(fā)布同等點名稱的機(jī)制必須通過其它手段來做。同等點名稱到地址的解析是通過讓參與的同等點合作彼此傳遞消息,并維護(hù)一個同等點名稱到地址映射的分布式緩存來做到的。除了啟動以外,注冊與解析機(jī)制并不依賴于服務(wù)器的存在。當(dāng)某個PNRP實例第一次啟動時,需要找到某些可以與之交換數(shù)據(jù)的其它PNRP實例的地址。如果沒有其它手段可用,則使用眾所周知的服務(wù)器來獲取一個其它PNRP實例的列表。
換句話說,PNRP讓對等應(yīng)用注冊一個同等點名稱到端點的映射,并解析某個同等點名稱以獲取端點。此時,某些定義將是適當(dāng)?shù)?。一個同等點名稱是一個標(biāo)識著某個同等點資源的字符串。為了能注冊一個同等點名稱,應(yīng)用必須能訪問一個公/私密鑰對。該密鑰對用來對某些消息簽名,以避免篡改。同等點名稱也可以來源于公鑰,以便能驗證標(biāo)識的主人。端點是一個IPv6/IPv4地址、端口與協(xié)議。實際上可以用單個同等點名稱注冊一個端點列表,并在解析該同等點名稱時返回該列表。節(jié)點是PNRP協(xié)議服務(wù)的一個實例。每臺計算機(jī)一般有一個節(jié)點。網(wǎng)絡(luò)是一個能彼此到達(dá)的節(jié)點網(wǎng)絡(luò)。單個節(jié)點可以連接到多于一個的網(wǎng)絡(luò)。網(wǎng)絡(luò)具有一個等同于IPv6中所定義的范圍的范圍屬性—“全局”、“場點局域”和“鏈路局域”。一個節(jié)點可以具有多個場點局域網(wǎng)絡(luò)和多個鏈路局域網(wǎng)絡(luò)。節(jié)點間的通信不應(yīng)當(dāng)從一個網(wǎng)絡(luò)竄到另一個。網(wǎng)絡(luò)名稱用來區(qū)分網(wǎng)絡(luò)。一個同等點名稱可以注冊在多于一個節(jié)點上。PNRP保持每個不同的注冊。與每個同等點名稱實例相關(guān)聯(lián)的端點列表都將是不同的。在一個節(jié)點內(nèi),也可能將一個同等點名稱注冊在與該節(jié)點相連接的多于一個的網(wǎng)絡(luò)上。這些注冊的每一個都是不同的。一般而言,這些實例的每一個中的端點列表也將是不同的。當(dāng)一個節(jié)點試圖解析某個同等點名稱時,是在某個選定的網(wǎng)絡(luò)中來做。只有在該同等點名稱已在該網(wǎng)絡(luò)中注冊時,解析才會成功。也有可能同時在多于一個的網(wǎng)絡(luò)上解析一個同等點名稱,但這些都被看待成獨立的解析請求。
如在圖2中所例示的那樣,PNRP服務(wù)由一起工作的幾個模塊構(gòu)成。服務(wù)管理部件200處理簡單的總務(wù),例如啟動和停止PNRP服務(wù)。RPC服務(wù)器和接頭202提供客戶端進(jìn)程和PNRP服務(wù)之間的接口。它管理暴露的接口,提供請求的條目和事件與請求完成的通告。它還處理從客戶端進(jìn)程中斷中的恢復(fù)。網(wǎng)絡(luò)管理器204維護(hù)特定客戶端請求的狀態(tài),并維護(hù)可用的PNRP網(wǎng)絡(luò)的列表。它負(fù)責(zé)創(chuàng)建網(wǎng)絡(luò)并通知客戶端網(wǎng)絡(luò)狀態(tài)的變化。
緩存管理器206維護(hù)本地的PNRP緩存和每個網(wǎng)絡(luò)的本地注冊PNRP名稱的列表。它是分布式PNRP緩存的一部分。它為來自其它計算機(jī)的解析請求提供檢索和下一站選擇。它通過定期啟動解析請求來維護(hù)其自己的緩存,以確保較好結(jié)構(gòu)化的緩存。它探測網(wǎng)絡(luò)的分隔,并嘗試修復(fù)。它提供擁有多個注冊同等點ID并結(jié)構(gòu)化緩存以支持每個ID的能力。協(xié)議管理器208處理創(chuàng)建與發(fā)送有效的PNRP消息,并處理接收到的PNRP消息。它與緩存管理器206一起工作,以實現(xiàn)PNRP協(xié)議。最后,消息傳送器210處理消息的實際發(fā)送和接收。它操縱多個網(wǎng)絡(luò)接口和地址,并探測本地地址集中的變化。如果需要多協(xié)議(IPv4和IPv6),則該部件將處理兩種協(xié)議。
每個PNRP節(jié)點都維護(hù)一個網(wǎng)絡(luò)中某些其它節(jié)點的同等點名稱到端點映射的緩存。按照本發(fā)明所構(gòu)造的消息在節(jié)點之間交換,以將關(guān)于同等點名稱的信息發(fā)布給網(wǎng)絡(luò)中的節(jié)點。每個節(jié)點都有責(zé)任恰當(dāng)?shù)鼐S護(hù)其緩存。如由上面所標(biāo)識的申請所描述的那樣,PNRP協(xié)議定義了一個編號的命名空間。每個同等點名稱都被轉(zhuǎn)換到一個編號,而這些編號可以比對,以確定在命名空間中的接近性。當(dāng)一個解析某個同等點名稱的請求到達(dá)一個節(jié)點時,該節(jié)點可以將該編號與其緩存中的編號相比對,以找出一個在編號上與所需要的節(jié)點比較接近的節(jié)點。解析請求以這種方式從節(jié)點傳遞到節(jié)點,在每一站都逐漸接近其目標(biāo)。
同等點名稱被使用上面所附申請中所描述的雜湊(hash)函數(shù)轉(zhuǎn)換成稱為P2P ID的128位編號。同樣的同等點名稱總是產(chǎn)生相同的P2P ID。一個同等點名稱注冊的特定實例也具有一個稱為服務(wù)位置的128位編號。這兩個一起成為一個稱為PNRP ID的256位編號。PNRP ID的服務(wù)位置部分使同等點名稱注冊的特定實例在網(wǎng)絡(luò)中唯一。
一個應(yīng)用可以以PNRP注冊一個同等點名稱。PNRP ID是從該名稱產(chǎn)生,并發(fā)送消息通知其它節(jié)點該注冊。同一同等點名稱可以在多于一個節(jié)點上注冊。P2P ID在每個節(jié)點上都相同,但PNRP ID對于每個節(jié)點是唯一的。一個應(yīng)用可以要求將某個同等點名稱解析成一個地址。P2P ID是來源于同等點名稱,并發(fā)送消息給其它節(jié)點,以定位某個注冊了這一P2P ID的節(jié)點。當(dāng)某個P2P ID被解析成一個地址時,就返回了一個驗證了的同等點地址(CPA)。這一CPA包括了目標(biāo)的PNRP ID的服務(wù)位置部分、當(dāng)前IP地址、公鑰以及許多其它字段。簽署CPA是為了防止篡改。
一個給定的P2P ID可以由許多不同的節(jié)點注冊。PNRP使用一個“服務(wù)位置”后綴來確保每個注冊了的實例都具有一個唯一的PNRP ID?!胺?wù)位置”是一個對應(yīng)于某個唯一網(wǎng)絡(luò)服務(wù)端點的128位編號。其數(shù)值是通過組合IPv6地址、端口、協(xié)議和公鑰的一部分而產(chǎn)生的。服務(wù)位置可以認(rèn)為是對PNRP客戶端不透明的。一個服務(wù)位置具有兩個重要的屬性。在任何時候,一個服務(wù)位置都標(biāo)識一個唯一的同等點名稱的實例。在比對兩個服務(wù)位置時,每一個的共同前綴的長度就是對網(wǎng)絡(luò)接近性的一個合理的測度。以相同四位開始的兩個服務(wù)位置通常不會比以相同三位開始的兩個相距更遠(yuǎn)。這些優(yōu)點只適用于“全局”范圍的自然單播IPv6地址。
PNRP ID的產(chǎn)生和注冊只是PNRP服務(wù)的一部分。PNRP服務(wù)的執(zhí)行可以分成四個階段。第一個是PNRP網(wǎng)絡(luò)發(fā)現(xiàn)。一個新的節(jié)點必須找到一個它所希望加入的網(wǎng)絡(luò)中已存在的節(jié)點。該網(wǎng)絡(luò)可以是全局PNRP網(wǎng)絡(luò)、某個場點局域(企業(yè))的網(wǎng)絡(luò)或某個鏈路局域的網(wǎng)絡(luò)。第二階段是加入某個PNRP網(wǎng)絡(luò)。一旦新節(jié)點找到一個已存在的節(jié)點,它就執(zhí)行SYNCHRONIZE過程,以獲取該已存在節(jié)點的頂緩存層的一部分。單個緩存層的一個子集提供了一個新節(jié)點開始參加入網(wǎng)絡(luò)的足夠信息。第三階段專注于積極參加入網(wǎng)絡(luò)。在初始化完成后,該節(jié)點可以參加入PNRP ID的注冊和解析。在這一階段中,同等點還進(jìn)行定期的緩存維護(hù)。最后階段是關(guān)于同等點離開網(wǎng)絡(luò)。節(jié)點注銷任何已本地注冊的PNRP ID,而后再終止。
為了完成PNRP的多種功能,本發(fā)明的PNRP協(xié)議包含十種不同的消息類型。在高層次上,這些消息包括一種用以請求將某個目標(biāo)PNRP ID解析成一個CPA的“解析”消息、一種用作某個完成“解析”請求的結(jié)果的“回應(yīng)”消息、一種包含一個打算供接收者的PNRP緩存使用的CPA的“充溢”消息、一種用以要求某個PNRP節(jié)點“廣告”其頂層緩存的“懇求”消息、一種包含一個針對某節(jié)點頂層緩存中CPA的PNRP ID列表的“廣告”消息、一種用以要求某個節(jié)點充溢一個“廣告”了的CPA的子集的“請求”消息、一種用以詢問某個節(jié)點是否某特定PNRP ID已在該節(jié)點上注冊的“查詢”消息、一種用以確認(rèn)某個PNRP ID的本地注冊并可選地提供一個證書鏈以協(xié)助驗證該ID的CPA的“授權(quán)”消息、一種用以應(yīng)答接收到和/或成功處理某些消息的“應(yīng)答”消息,以及最后一種用以嘗試合并可能已分隔的網(wǎng)絡(luò)的“修復(fù)”消息。
一個節(jié)點在PNRP中可以啟動六種基本類型的事務(wù),本發(fā)明的那些消息可以在這些過程中利用。這些事務(wù)包括網(wǎng)絡(luò)發(fā)現(xiàn)、同步、解析、充溢、標(biāo)識驗證和修復(fù)。為提供對這些事務(wù)(其細(xì)節(jié)在上面所標(biāo)識的申請中已有解釋)的基本理解,提供這些事務(wù)的一個關(guān)于本發(fā)明的消息與消息結(jié)構(gòu)的簡要描述。
網(wǎng)絡(luò)發(fā)現(xiàn)事務(wù)使一個同等點能發(fā)現(xiàn)一個同等點網(wǎng)絡(luò)。在某一較佳實施例中,每個節(jié)點都可以加入某些數(shù)量的網(wǎng)絡(luò)??梢约尤氲木W(wǎng)絡(luò)集取決于該節(jié)點所具有的網(wǎng)絡(luò)連接性。如果某臺節(jié)點計算機(jī)具有多個接口適配器,則其可以加入多個鏈路局域的網(wǎng)絡(luò)。如果某個節(jié)點使一個支持IPv6的場點的一部分,則其可以訪問一個場點局域的網(wǎng)絡(luò)。如果某個節(jié)點擁有到多于1個這樣場點的連接(可能是經(jīng)由VPN),則其可以訪問多個場點局域的網(wǎng)絡(luò)。如果某個節(jié)點連接到互聯(lián)網(wǎng),則其可以訪問全局網(wǎng)絡(luò)。
一個節(jié)點可以選擇加入或是不加入某個其能訪問的網(wǎng)絡(luò)。當(dāng)某個應(yīng)用第一次請求在某個網(wǎng)絡(luò)上注冊一個同等點名稱或解析某個網(wǎng)絡(luò)上的同等點名稱時,如果該節(jié)點還沒有加入該網(wǎng)絡(luò),則其必須加入該網(wǎng)絡(luò)。要加入該網(wǎng)絡(luò),它必須嘗試定位在同一網(wǎng)絡(luò)中的至少一個其它節(jié)點。如果它不能找到另一節(jié)點,則可以假定它是在該網(wǎng)絡(luò)中的第一個節(jié)點,并將等待其它節(jié)點稍后加入。
每次一個PNRP節(jié)點加入一個網(wǎng)絡(luò)時,它必須進(jìn)行網(wǎng)絡(luò)發(fā)現(xiàn),以便找到另一節(jié)點。如果該P(yáng)NRP實現(xiàn)判定其緩存不健康并需要獲取更多的緩存條目,則網(wǎng)絡(luò)發(fā)現(xiàn)也可以在稍后進(jìn)行。如果起初的緩存發(fā)現(xiàn)嘗試不行,則可以稍后進(jìn)行進(jìn)一步的嘗試。網(wǎng)絡(luò)發(fā)現(xiàn)使用以下的過程來進(jìn)行。首先,一個同等點可以從所維持的緩存進(jìn)行發(fā)現(xiàn)。在這一過程中,該同等點首先檢查所維持的緩存。如果沒有維持緩存,則該同等點必須嘗試通過下面所討論的供應(yīng)的節(jié)點地址來發(fā)現(xiàn)。如果已維持了緩存條目,則該同等點通過對沒有過期的CPA,而后對具有長生命期的CPA,再而后對過期時間最近的CPA設(shè)定優(yōu)先選擇,來為所有緩存條目計算一個優(yōu)先級。而后該同等點嘗試按順序與所選擇的節(jié)點同步,直至其中之一提供某些緩存條目。
如上所述,如果沒有維持的緩存,則該同等點嘗試通過供應(yīng)的節(jié)點地址來進(jìn)行發(fā)現(xiàn)。在這一過程中該同等點檢查管理性配置是否指定了某個要連接的同等點集合。如果沒有,則該同等點嘗試下面所討論的組播發(fā)現(xiàn)。不然,則該同等點對每個指定的端點按順序嘗試同步,直至其中之一提供某些緩存條目。
至于組播發(fā)現(xiàn),如果簡單服務(wù)發(fā)現(xiàn)協(xié)議(SSDP)可用,則該同等點發(fā)出一個針對所希望網(wǎng)絡(luò)中的某個PNRP服務(wù)實例的“SSDP檢索”。在該SSDP檢索消息中使用的檢索目標(biāo)字符串是“urnMicrosoft Windows Peer NameResolution Protocol<major><Protocol><Scope>”,其中<major>是一個表示版本的編號,<Protocol>是“IPV6”,<Scope>是“全局”、“場點局域”或“鏈路局域”之一。該檢索可以事先發(fā)出,這樣回應(yīng)就能及時可用。如果SSDP不可用,則該同等點可以嘗試這些其它的發(fā)現(xiàn)協(xié)議。如果沒有一個協(xié)議可用,則該同等點將不得不嘗試下面所描述的目錄名稱服務(wù)器(DNS)發(fā)現(xiàn)。但是,如果接收到了回應(yīng),則將該回應(yīng)放入一個要嘗試節(jié)點的列表。如果在某個短時間段內(nèi)沒有回應(yīng)可用,則該節(jié)點可能需要嘗試其它的發(fā)現(xiàn)協(xié)議。這段時間可以由該實現(xiàn)來判定。該同等點可以以所選擇的節(jié)點按順序嘗試同步,直至其中之一提供某些緩存條目。
至于DNS發(fā)現(xiàn),該同等點發(fā)出一個針對某臺種子服務(wù)器的眾所周知名稱的DNS查詢。這個用于全局網(wǎng)絡(luò)的名稱可以是例如SEED.PNRP.NET。如果成功,則該同等點可以進(jìn)行下面所描述的同步。如果到此時網(wǎng)絡(luò)發(fā)現(xiàn)還沒有成功,則PNRP將該網(wǎng)絡(luò)的狀態(tài)設(shè)置成不能發(fā)現(xiàn)該網(wǎng)絡(luò)的其它成員,并假定它是在該網(wǎng)絡(luò)中的第一個節(jié)點。它可以稍后再此嘗試同步。
同步使一個節(jié)點能從另一個節(jié)點的緩存獲取一個CPA集合。同步是在網(wǎng)絡(luò)發(fā)現(xiàn)后進(jìn)行。它在從網(wǎng)絡(luò)發(fā)現(xiàn)所返回的節(jié)點集合中隨機(jī)選擇的某單個節(jié)點上進(jìn)行。同步是受安全保護(hù)的,以減輕某些攻擊。如果某個網(wǎng)絡(luò)的緩存由于變老而變空,也可以進(jìn)行同步,但這只是偶爾發(fā)生。在開始同步前,該節(jié)點必須確保其擁有至少一個本地注冊的CPA。如果還沒有注冊一個同等點名稱,則該節(jié)點可以在該網(wǎng)絡(luò)中為其自身生成一個節(jié)點ID。同步過程包括五種類型的本發(fā)明的消息,包括“懇求”、“廣告”、“請求”、“充溢”和“應(yīng)答”。
圖3例示了一個簡單的用于同步的消息交換。在這一圖3中,假定節(jié)點A212啟動與節(jié)點B 214的同步。在這一情況下,這些節(jié)點間的消息流將如圖3中所例示的那樣出現(xiàn)。明確來說,“懇求”消息216從一個在網(wǎng)絡(luò)發(fā)現(xiàn)中選擇的節(jié)點214請求一個PNRP ID的列表。這一“懇求”消息216如表1中所描述的那樣填寫。
表1節(jié)點跟蹤用以創(chuàng)建雜湊現(xiàn)時的“現(xiàn)時”值。計時器與這一狀態(tài)相關(guān)聯(lián),還有一個重試計數(shù)。如果回應(yīng)于發(fā)出的“懇求”216沒有接收到一個“廣告”消息218,則將重發(fā)該“懇求”216。如果超過了重試計數(shù),則釋放該狀態(tài)并終止該事務(wù)。
接收到一個“懇求”216的節(jié)點214以一個“廣告”消息218回應(yīng)?!皬V告”218包含一個PNRP ID數(shù)組。節(jié)點214首先進(jìn)行節(jié)流啟發(fā)以確定其是否愿意參加一個同步事務(wù)。如果它正忙,就回應(yīng)一個在數(shù)組中沒有PNRP ID的“廣告”消息218。不然,它就從其緩存中選擇一個很好地發(fā)布了的PNRP ID集合。這可以通過使用頂層緩存條目或通過隨機(jī)選擇來做到。如果在緩存中沒有足夠的條目,則節(jié)點214應(yīng)當(dāng)也將其自己本地注冊的ID也包括進(jìn)來?!皬V告”消息218包括來自“懇求”消息216的雜湊現(xiàn)時。“廣告”消息218可以認(rèn)為是對“懇求”216的一個應(yīng)答。
如果PNRP ID數(shù)組不為空,則節(jié)點214還保留具有雜湊“現(xiàn)時”值的“廣告”218所發(fā)送的狀態(tài)。這一狀態(tài)可以是在某個位圖中的一位。一個計時器與這一狀態(tài)相關(guān)聯(lián),這樣如果在譬如15秒內(nèi)沒有接收到一個匹配的消息,則中止該事務(wù)并釋放該狀態(tài)。節(jié)點214還可以將來自“懇求”216的“源CPA”添加到其緩存。“廣告”消息218如表2中所指示的那樣填寫。
表2當(dāng)節(jié)點212接收到“廣告”218時,它首先確保已經(jīng)發(fā)送了一個相應(yīng)的“懇求”216。如果沒有,則它丟棄該消息。“廣告”218被作為對“懇求”216的一個應(yīng)答來對待。如果在“廣告”218中的PNRP ID數(shù)組是空的,則該事務(wù)完成。不然,則節(jié)點212檢查在“廣告”218中的PNRP ID數(shù)組,并選擇它需要包括在其緩存中的那些ID。它發(fā)出一個“請求”消息220,包括一個選定的PNRP ID的數(shù)組。它在“請求”消息220中放置用以針對“懇求”消息216而創(chuàng)建雜湊“現(xiàn)時”的原始“現(xiàn)時”值。“請求”消息220如表3中所指示的那樣填寫。
表3“請求”消息220被發(fā)送給節(jié)點B 214,節(jié)點B 214以一個“應(yīng)答”222回應(yīng),以指示接收到并避免重新發(fā)送。如果在某個定時方式中沒有接收到一個“應(yīng)答”222,則節(jié)點A 212將重新發(fā)送該“請求”。如果所有的重新發(fā)送都窮盡了,卻沒有接收到針對該“請求”的一個“應(yīng)答”,則該事務(wù)失敗并終止。
如果該事務(wù)成功,即節(jié)點212接收到來自節(jié)點214的“應(yīng)答”222,則節(jié)點214隨后驗證該“現(xiàn)時”是有效的。它通過雜湊所接收到的“現(xiàn)時”并檢查其是否與上面所保存的狀態(tài)匹配來做驗證。如果不匹配,則不進(jìn)行進(jìn)一步的處理。如果該現(xiàn)時是有效的,則它針對數(shù)組中每個還在其緩存中的PNRP ID發(fā)送“充溢”消息2241、2242、...224N。“充溢”消息224包括針對PNRP ID的CPA。應(yīng)當(dāng)注意,“充溢”消息224不是同步的。也就是說,“充溢”(ID=1)2241不需要在發(fā)送“充溢”(ID=2)2242?前被應(yīng)答。在同等點212接收到“充溢”224后,進(jìn)行對該“充溢”消息224的正常處理。這包括發(fā)送一個“應(yīng)答”226和驗證該CPA的有效性。
如果選定的ID的數(shù)量不足夠大,懇求的節(jié)點212可以決定重復(fù)這一過程。在這一情況下,它應(yīng)當(dāng)利用一個不同的節(jié)點來與之同步,這樣就能得到一個不同的ID列表。
解析過程是由某個節(jié)點通過發(fā)送一個“解析”消息來啟動。由于某個應(yīng)用請求將某個同等點名稱解析成一個地址(作為注冊一個PNRP ID的一部分,或作為緩存維護(hù)的一部分)或探測網(wǎng)絡(luò)分隔,可以啟動一個“解析”。一個“解析”消息包含某些調(diào)整解析過程、設(shè)定在解析嘗試中訪問多少節(jié)點的限制、引導(dǎo)ID匹配的準(zhǔn)確性的標(biāo)志和代碼。它指明所希望的目標(biāo)PNRP ID。在每一站都插入下一站的ID以及至此所發(fā)現(xiàn)的最佳匹配的CPA。而且,也包括了一個已訪問的節(jié)點端點的數(shù)組,以跟蹤該“解析”消息從站到站的路徑。“解析”消息的發(fā)起者將其自身作為第一個條目添加到該路徑中。解析事務(wù)將某個PNRP ID解析成一個“驗證了的同等點地址”。只有CPA的擁有者可以可信地滿足一個對其CPA的解析請求。緩存的CPA只能用作對路由的“解析”請求的提示,不能用以設(shè)置一個“解析”或“回應(yīng)”的“最佳匹配”字段。
當(dāng)?shù)竭_(dá)主持目標(biāo)PNRP ID的節(jié)點時,或當(dāng)所訪問節(jié)點的數(shù)量等于在“解析”中設(shè)定的“最大站數(shù)”時,或當(dāng)路徑中的任一節(jié)點都不再可能將“解析”傳遞給某個更好的節(jié)點時,該“解析”消息終止。在終止后,來自該“解析”的選定內(nèi)容被傳入一個新的“回應(yīng)”消息,該“回應(yīng)”消息被向回傳遞往該“解析”的發(fā)起者。該“回應(yīng)”包含來自該“解析”的“最佳匹配”CPA,以及所訪問節(jié)點的列表。在該“回應(yīng)”到達(dá)“解析”的發(fā)起者后,該發(fā)起者可以通過將該“最佳匹配”CPA的PNRP ID與目標(biāo)相比對而輕易地驗證它們是否找到了目標(biāo)CPA。
在圖4中例示了某個解析/回應(yīng)事務(wù)的一個三節(jié)點示例。在這一簡化了的示例中,節(jié)點A 228嘗試經(jīng)由節(jié)點B 230解析節(jié)點T 232。除了“應(yīng)答”外,該解析事務(wù)還包括3種消息“解析”、“回應(yīng)”和“授權(quán)”。在該解析完成后,節(jié)點A 228可以如下面將討論的那樣,向節(jié)點T 232直接發(fā)送一個“查詢”消息。
對于“解析”消息,要考慮三種情況,在圖4中例示了前兩種。這三種情況是在節(jié)點228啟動一個“解析”234、將一個“解析”236從節(jié)點A 228傳遞給另一節(jié)點B 230、將一個“解析”從某個節(jié)點發(fā)回(在圖4中未示出)。這些場景的每一種將依次討論。
首先討論在節(jié)點A 228啟動一個“解析”。如圖4中所例示的那樣,節(jié)點A 228由于某些原因啟動一個“解析”。這些原因包括應(yīng)用的解析請求、注冊廣告、緩存幅度維護(hù)或網(wǎng)絡(luò)分隔探測。發(fā)起者228還指定一個操作代碼,指示該“解析”是否可以由某個本地注冊的ID來滿足。如果可以,則節(jié)點A 228掃描本地注冊的ID集合來尋找匹配。如果找到一個匹配,則該“解析”在節(jié)點A 228自身內(nèi)以所匹配的ID完成。如果本地注冊的ID不可接受,或者如果沒有本地ID匹配,則以在表4中所示出的字段創(chuàng)建一個“解析”消息234。而后將這一“解析”消息傳遞給某些其它的節(jié)點230,以作如下面所描述的處理。
表4當(dāng)節(jié)點A 228想要或需要將一個“解析”234傳遞給另一節(jié)點B 230時,必須首先選擇該下一節(jié)點。為了選擇下一站,節(jié)點A 228制作一個與“目標(biāo)ID”(節(jié)點T 232)最接近的三個PNRP ID的緩存的CPA的列表L,排除那些地址已經(jīng)在“路徑”中列出的,以及那些并不比A的最接近的本地注冊ID更接近“目標(biāo)ID”的。如果“目標(biāo)ID”在列表L中,則選擇該條目作為下一站。不然,如果列表L不為空,則隨機(jī)選擇一個條目。換句話說,節(jié)點A 228找到某些比該節(jié)點更接近目標(biāo)的新節(jié)點,并選擇其中之一以向之傳遞“解析”消息234。
如果節(jié)點A 228能夠選擇某個下一站,則節(jié)點A 228將一個適當(dāng)?shù)臈l目插入“已接收位圖”。節(jié)點A 228將其自身加入“路徑”中,為所選定的下一站選擇其最佳地址,并將該條目標(biāo)記成“已接受”。節(jié)點A 228將“下一站”設(shè)定成所選定目的地的期望PNRP ID,并將“解析”消息234傳遞給節(jié)點B 230。如果“解析”消息234被成功發(fā)送,則發(fā)送的節(jié)點228預(yù)期將接收到一個“授權(quán)”消息238形式的應(yīng)答。如果接收到該“授權(quán)”消息238,則節(jié)點228維護(hù)一個針對“解析”234的上下文,并等待一個將返回的“回應(yīng)”240,直至超時。如果在某段時間后仍沒有接收到“授權(quán)”238,則重新發(fā)送該“解析”234。在假定“下一站”無效前,將重試總共N次。在某一較佳實施例中,N=3。如果超過了重試計數(shù),則將“下一站”的CPA從本地緩存中刪除,并將該條目作為一個失敗的站加入“路徑”。如果沒有超過站計數(shù),則從本地緩存中選擇另一個“下一站”,并重復(fù)該過程。如果在“路徑”中的條目數(shù)量等于或超過“最大站數(shù)”,則以“回應(yīng)代碼”RESULT_MAX_HOP_LIMIT_HIT生成一個“回應(yīng)”消息,并發(fā)送給“路徑”中標(biāo)記成“已接受”的最近的條目。
如果該節(jié)點不能夠找到某個下一站,則它檢查“目標(biāo)ID”是否應(yīng)該是在最低層的緩存層中。如果應(yīng)該是,則該節(jié)點懷疑該“目標(biāo)ID”可能不存在。該節(jié)點檢查已有的“路徑”條目,并對那些被標(biāo)記成“可疑”的條目計數(shù)。如果這一計數(shù)超過某個閾值,則以“回應(yīng)代碼”RESULT_TOO_MANY_MISSES生成一個“回應(yīng)”消息,并發(fā)送給“路徑”中標(biāo)記成“已接受”的最近的條目。如果該節(jié)點不能夠找到某個下一站,但“可疑”計數(shù)沒有超出,則該節(jié)點將該“解析”發(fā)回給“路徑”中標(biāo)記成“已接受”的最后的條目。該節(jié)點首先將其自身加入“路徑”中,為目的地節(jié)點選擇其最佳地址,并將該條目標(biāo)記成“已拒絕”。它將“下一站”設(shè)定成0,并設(shè)置RF_IGNORE_NEXTHOP標(biāo)志以指示原路返回。如果該“目標(biāo)ID”應(yīng)該在該節(jié)點的最低緩存層中,則它懷疑該“目標(biāo)ID”可能不存在。在這一情況下,該節(jié)點也將其“路徑”條目標(biāo)記成“可疑”。如果該節(jié)點不能夠找到某個下一站,而且在“路徑”中沒有節(jié)點(除其自身外),則它就是該“解析”消息的發(fā)起者。在這一情況下,它以“回應(yīng)代碼”RESULT_NO_BETTER_PATH_FOUND將一個結(jié)果返回給呼叫者,指示解析失敗。“最佳匹配”CPA變得對該呼叫者可用。
節(jié)點B 230接收到一個“解析”消息234,包含一個目標(biāo)PNRP ID、一個“最佳匹配”CPA、一個“下一站”PNRP ID和一個列出了處理過該“解析”的所有節(jié)點的地址的“路徑”。如果標(biāo)志字段沒有設(shè)置RF_IGNORE_NEXTHOP,而“最佳匹配”CPA可能具有一個CPA或為空,則節(jié)點B 230檢查其本地處理負(fù)載。如果負(fù)載太高不能處理新的“解析”請求,則它以一個將標(biāo)志字段設(shè)置成“AF_REJECT_TOO_BUSY”的“授權(quán)”238來回應(yīng),而處理完成。該“授權(quán)”的接收者負(fù)責(zé)將拒絕的節(jié)點端點加入路徑數(shù)組,并重新路由該“解析”請求到別處。
接收節(jié)點230檢查該“路徑”數(shù)組包含至少1個標(biāo)記成“已接受”的地址,而最后一個這樣的地址與該消息的來源相同。如果不是,則不做進(jìn)一步處理。接收節(jié)點還檢查所接收到請求中的參數(shù)。如果某些參數(shù)不在有效范圍內(nèi),則它以一個將標(biāo)志字段設(shè)置成“AF_INVALID_REQUEST”的“授權(quán)”消息來回應(yīng),而處理完成。無效參數(shù)的一個示例是“最大站數(shù)”是否太大。該“授權(quán)”的接收者負(fù)責(zé)將拒絕的節(jié)點端點加入路徑數(shù)組,并重新路由該“解析”請求到別處。
接收節(jié)點(例如節(jié)點B 230)檢查“下一站”ID是否是本地注冊的。種子服務(wù)器可以跳過這一測試。如果失敗,則它該“授權(quán)”的接收者負(fù)責(zé)重新路由該“解析”請求到別處。在接收到AF_UNKNOWN_ID時,該“授權(quán)”的接收者還應(yīng)當(dāng)從其緩存中刪除該“授權(quán)”發(fā)送者的PNRP ID。如果在該消息中包括“最佳匹配”CPA,則該節(jié)點盡其可能驗證該“最佳匹配”。如果該CPA無效,則該節(jié)點將該“最佳匹配”CPA從該消息中刪除。如果該“最佳匹配”CPA有效,則該節(jié)點遵循通常的用以決定是否將該CPA加入其緩存的規(guī)則。
該節(jié)點還檢查在“路徑”中是否已有一個針對它的條目。如果有,由于這不是一個原路返回的“解析”,就存在一個環(huán)路。則該節(jié)點以一個將標(biāo)志字段設(shè)置成“AF_REJECT_LOOP”的“授權(quán)”來回應(yīng),而處理完成。該“授權(quán)”的接收者負(fù)責(zé)將拒絕的節(jié)點端點加入“路徑”數(shù)組,并重新路由該“解析”請求到別處。
如果所有前面的檢查都通過,則節(jié)點B 230發(fā)送一個“授權(quán)”238以應(yīng)答該“解析”消息234。如果設(shè)置了“解析”標(biāo)志RF_SEND_CHAIN,則在該“授權(quán)”238中包括了針對“下一站”的證書鏈。在該“授權(quán)”消息中包括了對應(yīng)于下一站的PNRP ID的同等點名稱的“分類符”字符串部分。
節(jié)點B 230檢查其是否具有某個比當(dāng)前的“最佳匹配”更匹配的本地注冊的CPA。如果是,則它用這一CPA替換“最佳匹配”。該節(jié)點還檢查其是否具有某個滿足該“解析”標(biāo)準(zhǔn)(基于“操作代碼”、“精度”和“目標(biāo)ID”)的本地注冊的CPA。如果有滿足的,或者如果在路徑中條目的數(shù)量>=“最大站數(shù)”,則該節(jié)點以當(dāng)前的“最佳匹配”創(chuàng)建一個“回應(yīng)”消息。將該“解析”消息的路徑拷貝成該“回應(yīng)”消息的路徑。該節(jié)點設(shè)置“回應(yīng)代碼”以指示RESULT_FOUND_MATCH或RESULT_MAX_HOP_LIMIT_HIT。而后該節(jié)點從路徑中刪除其地址以及標(biāo)記成“已拒絕”的后續(xù)條目,并將該“回應(yīng)”發(fā)送給路徑中標(biāo)記成“已接受”的最近的條目。
如果節(jié)點B 230沒有發(fā)送“回應(yīng)”(如圖4所例示的那樣),則它嘗試將該“解析”消息236傳遞給下一個節(jié)點T 232。這一傳遞遵循上面所描述的過程。也就是說,節(jié)點T 232起初以一個“授權(quán)”消息242來回應(yīng)。而后它進(jìn)行上面所討論的檢查,并判定它與“目標(biāo)”匹配,以一個將其自身標(biāo)識成“最佳匹配”的“回應(yīng)”消息244回應(yīng)給節(jié)點B 230?;貞?yīng)于該“回應(yīng)”消息244,節(jié)點B 230發(fā)送回一個“應(yīng)答”消息246。而后節(jié)點B 230檢查該路徑并將“回應(yīng)”消息240傳遞給節(jié)點A 228,而節(jié)點A 228以一個“應(yīng)答”消息248回應(yīng)。
如上面所指示的那樣,節(jié)點還必須處理某個原路返回的“解析”。當(dāng)一個節(jié)點接收到一個“解析”消息R時,它包含一個“目標(biāo)ID”PNRP ID、一個“最佳匹配”CPA、一個“下一站”PNRP ID和一個列出所有已處理過該“解析”的節(jié)點的地址的“路徑”。對于一個標(biāo)志字段沒有設(shè)置RF_IGNORE_NEXTHOP的原路返回的“解析”,該節(jié)點首先檢查其“已接收位圖”,以驗證它以前傳遞過該“解析”。如果該位沒有設(shè)置,就丟棄該消息。而后該節(jié)點檢查“路徑”,以確保其地址是在該“路徑”上,而且它是在該“路徑”中標(biāo)記成“已接受”的最頂上的條目。不然,就丟棄該消息。如果沒有丟棄該消息,則該節(jié)點將一個“授權(quán)”發(fā)送回給發(fā)送者,以“應(yīng)答”該消息。它不包括一個證書鏈。
如果在“路徑”中的條目數(shù)量>=“最大站數(shù)”,則該節(jié)點以當(dāng)前“最佳匹配”創(chuàng)建一個“回應(yīng)”消息S。將“解析”消息R的“路徑”拷貝成S的“路徑”。該節(jié)點設(shè)置“回應(yīng)代碼”以指示超出了“最大站數(shù)”。而后該節(jié)點從“路徑”中刪除其地址,并將該“回應(yīng)”發(fā)送回“路徑”中標(biāo)記成“已接受”的最近的條目。如果該節(jié)點沒有發(fā)送一個“回應(yīng)”,則它嘗試將該“解析”傳遞給下一站。這遵循上面所描述的過程,除了某些例外a)不符合“節(jié)點B 230檢查其是否具有某個比當(dāng)前的‘最佳匹配’更匹配的本地注冊的CPA。如果是,則它用這一CPA替換‘最佳匹配’?!?;以及b)如果當(dāng)前節(jié)點是該“解析”事務(wù)的發(fā)起者,并且原因是REASON_REPAIR_DETECTION,則處理完成。
如上面所簡要討論的那樣,當(dāng)一個節(jié)點接收到一個“回應(yīng)”消息244、240時,它包含一個“目標(biāo)ID”PNRP ID、一個“最佳匹配”CPA和一個列出所有已處理過該“解析”的節(jié)點的地址的“路徑”。接收節(jié)點還檢查其“已接收位圖”,以驗證它以前發(fā)送過一個與該“回應(yīng)”240、244相匹配的“解析”234、236。如果該位沒有設(shè)置,就丟棄該消息。接收節(jié)點還檢查“路徑”,以確保其地址是在該“路徑”上的最后一個(最近的),而且它是標(biāo)記成“已接受”的。不然,就丟棄該消息。如果沒有丟棄該消息,則該接收節(jié)點發(fā)送一個“授權(quán)”246、248,以應(yīng)答接收。該節(jié)點盡其可能驗證“最佳匹配”CPA,并將之加入其緩存。將CPA加入緩存服從一組規(guī)則,這些規(guī)則可能要求交換進(jìn)一步的消息,這樣P就可以驗證“最佳匹配”CPA。這已在上面所標(biāo)識的申請中描述。
而后該節(jié)點將其自身從“路徑”中刪除。該節(jié)點還刪除前面的標(biāo)記成“已拒絕”的條目,直至它遇到一個標(biāo)記成“已接受”的條目或該列表耗盡。如果找到了某個標(biāo)記成“已接受”的條目,則該節(jié)點將該“回應(yīng)”傳遞給這一節(jié)點。如果該“回應(yīng)”所傳遞給的節(jié)點沒有用一個“應(yīng)答”來回應(yīng),則該節(jié)點重新發(fā)送該“回應(yīng)”,直至N次。如果重發(fā)次數(shù)超過,則該節(jié)點將該失敗了的目的地節(jié)點從“路徑”中刪除,并重試在本段中所討論的“回應(yīng)”處理。如果在“路徑”中已沒有更多的條目,則該節(jié)點就是原來的“解析”234的發(fā)起者。節(jié)點228驗證是否其發(fā)起該請求。如果不是,則丟棄該“回應(yīng)”。如果“回應(yīng)代碼”指示成功,則節(jié)點228在“最佳匹配”CPA的來源上進(jìn)行標(biāo)識驗證檢查。這包括將一個“查詢”消息250發(fā)送給目標(biāo)節(jié)點232,以及驗證返回的“授權(quán)”消息252。如果該標(biāo)識驗證失敗,則它將回應(yīng)代碼改變成IDENTITY_FAILURE。它將這些結(jié)果返回給呼叫者。
“授權(quán)”消息可以由發(fā)送者分段??拷邮照邅泶_保其在處理該“授權(quán)”消息前接收到所有的分段。如果在某個合理的時間范圍內(nèi)沒有接收到某個分段,則應(yīng)當(dāng)重新發(fā)送原來的消息(“查詢”或“解析”),除非超過了重試計數(shù)。如果該“授權(quán)”消息設(shè)置了AF_CERT_CHAIN標(biāo)志,則該節(jié)點應(yīng)當(dāng)在所緩存的針對“驗證ID”所指明的PNRP ID的CPA上進(jìn)行鏈驗證操作。應(yīng)當(dāng)檢查該鏈以確保其中的所有證書都是有效的,并且該鏈的根與葉之間的關(guān)系也是有效的。用于該鏈的根的公鑰雜湊應(yīng)當(dāng)與該CPA的同等點名稱中的授權(quán)相比對,以確保匹配。用于該鏈的葉的公鑰應(yīng)當(dāng)與用以簽署該CPA的密鑰相比對,以確保匹配。最后,應(yīng)當(dāng)檢查P2P ID,根據(jù)創(chuàng)建P2P ID的規(guī)則看它是否是“授權(quán)”和“分類符”的雜湊。如果上面的任一檢查失敗,則應(yīng)當(dāng)將該CPA從緩存中刪除,并且應(yīng)當(dāng)通過將發(fā)送該“授權(quán)”消息的節(jié)點的地址加入該“解析”消息的“路徑”并將該條目標(biāo)記成“已拒絕”來更改該“解析”消息。
如果設(shè)置了AF_UNKNOWN_ID,則應(yīng)當(dāng)將該CPA從緩存中刪除。如果沒有設(shè)置AF_CERT_CHAIN,但對應(yīng)于“驗證ID”PNRP ID的CPA要求一個證書鏈來驗證,則應(yīng)當(dāng)將該CPA從緩存中刪除,并且應(yīng)當(dāng)通過將發(fā)送該“授權(quán)”消息的節(jié)點的地址加入該“解析”消息的“路徑”并將該條目標(biāo)記成“已拒絕”來更改該“解析”消息。
當(dāng)對應(yīng)于“驗證ID”PNRP ID的CPA被驗證后,應(yīng)當(dāng)將其標(biāo)記成已充分驗證的。將“分類符”字符串從該“授權(quán)”消息中析出,并與該CPA一起保持。如果AF_REJECT_TOO_BUSY、AF_UNKOWN_ID、AF_REJECT_LOOP和AF_INVALID_REQUEST都未設(shè)置,則接受該“解析”以作處理,而“授權(quán)”處理完成。
在某些情況下某個接收到“解析”消息的節(jié)點可能選擇不接受該消息以作傳遞,但仍向發(fā)送節(jié)點提供一個“下一站”建議。在這一情況下,該節(jié)點在“授權(quán)”消息中返回一個建議的“推舉端點”和“推舉PNRP ID”。在這一情況下,該“授權(quán)”的標(biāo)志值應(yīng)當(dāng)包含AF_REDIRECT。接收到有AF_REDIRECT的“授權(quán)”的節(jié)點可以選擇是否使用該“推舉端點”來發(fā)送“解析”消息。在這兩種情況下,回應(yīng)該“授權(quán)”的節(jié)點都被加入“路徑”。節(jié)點應(yīng)當(dāng)使用該“推舉端點”的唯一時候是在發(fā)起該“解析”的節(jié)點是為了探測網(wǎng)絡(luò)分隔,并已向某臺PNRP種子服務(wù)器發(fā)送一個具有REASON_REPAIR“原因”的“解析”的情況下。在其它情況下,該節(jié)點應(yīng)當(dāng)忽略該“推舉端點”。
PNRP使用導(dǎo)向的充溢來在節(jié)點間傳播CPA緩存。充溢是在幾種情況下使用。在回應(yīng)于某個“請求”消息的同步期間,將所請求的CPA充溢到發(fā)送該“請求”的同等點。只有在已接受一個“懇求”消息并且已發(fā)送一個“廣告”消息后,才能接受該“請求”消息。無論何時當(dāng)將一個CPA加入緩存的最低層時,就將所添加的CPA充溢到離本地注冊ID最近的n個同等點。n的值可以調(diào)整,而值最好是4。如果添加CPA的原因是由于接收到一個“充溢”,則不應(yīng)當(dāng)將該CPA充溢到其地址在所接收到的“充溢”的“已充溢”列表中的節(jié)點。如果沒有足夠的空間,則應(yīng)當(dāng)將所接收到的“已充溢”列表中的地址拷貝到新的“充溢”消息的“已充溢”列表。無論何時接收到一個包含CPA撤回的“充溢”后當(dāng)將一個CPA從緩存的最低層刪除時,就將所撤回的CPA充溢到離本地注冊ID最近的n個同等點。同樣,n的值可以調(diào)整,但值最好是4。不應(yīng)當(dāng)將該CPA充溢到其地址在所接收到的“充溢”的“已充溢”列表中的節(jié)點。如果沒有足夠的空間,則應(yīng)當(dāng)將所接收到的“已充溢”列表中的地址拷貝到新的“充溢”消息的“已充溢”列表。最后,當(dāng)接收到一個針對某新同等點的“充溢”消息,而該CPA已被加入緩存的最低層時,則將一個“充溢”消息以本地節(jié)點的ID發(fā)送給該新同等點。如果該“充溢”的來源就是該新同等點,則是一個例外。
PNRP并不創(chuàng)建持久的鄰居關(guān)系。在最松散的意義上,每個由CPA緩存中的一個CPA所代表的節(jié)點都可以認(rèn)為是一個鄰居。但是,從緩存中添加和刪除CPA不需要通知該CPA的發(fā)布者。在某個節(jié)點的緩存中具有一個同等點的CPA并不確保這個鄰居在其緩存中具有該節(jié)點的CPA。這里關(guān)系是不對稱的。但是,上面所描述的最后的“充溢”條件確實試圖對彼此接近的ID創(chuàng)建對稱。
每個UDP“充溢”消息于在其上采取任何行動之前,都由一個“應(yīng)答”來應(yīng)答?!俺湟纭钡陌l(fā)送者維護(hù)針對發(fā)送“充溢”的某些時間的狀態(tài)。如果接收到“應(yīng)答”,則釋放該狀態(tài)。如果在某一時間段內(nèi)沒有接收到“應(yīng)答”,則重新發(fā)送該“充溢”并重新設(shè)定計時器。重試該“充溢”直至某個給定的次數(shù),最好是3次。如果在最后的重試后還沒有接收到“應(yīng)答”,則釋放該狀態(tài)。而且,如果該“充溢”的目的地是在發(fā)送者的緩存中,則刪除該緩存條目,以避免將來再試圖發(fā)送消息給該無回應(yīng)的節(jié)點。
當(dāng)節(jié)點接收到一個“充溢”消息時,首先通過發(fā)送一個“應(yīng)答”應(yīng)答該“充溢”消息來處理它。如果“驗證ID” 出現(xiàn)并且不是本地注冊的,則將標(biāo)志字段設(shè)置成“KF_NACK”。接著,驗證該“充溢”消息。這包括進(jìn)行CPA簽名和內(nèi)容的本地驗證。如果該CPA被驗證,則它判定是否將該CPA加入緩存。如果該CPA是針對一個在同一節(jié)點上本地注冊的PNRP ID的,則無需將其加入緩存。如果用以簽署該CPA的標(biāo)識不能由該CPA單獨驗證,而該CPA將被加入緩存視圖的兩個較低層之一,則需要如下面所將討論的那樣來進(jìn)行標(biāo)識驗證。如果驗證失敗,則該節(jié)點丟棄該“充溢”消息。如果成功,則該節(jié)點繼續(xù)處理該“充溢”。如果該CPA已經(jīng)過時,則該節(jié)點丟棄該“充溢”。如果該CPA是一個撤回的CPA,則該節(jié)點從緩存中刪除相應(yīng)的CPA(如果存在)。如果找到了某一個,則該節(jié)點通過發(fā)送“充溢”消息將該撤回傳遞給其它的鄰居。
如果該CPA不是一個撤回CPA,則該節(jié)點更新緩存。如果在緩存中已有一個匹配的CPA,則該節(jié)點以新的CPA數(shù)據(jù)更新該緩存條目。如果這是一個新的條目,則該節(jié)點創(chuàng)建一個新的條目,并試圖將其加入緩存。如果需要刪除另一條目來為其騰出空間,但所存在的條目由于更高的信任等級或更好的接近性而優(yōu)于該新條目,則該條目可能不能添加。如果該條目屬于最低的緩存層,則應(yīng)當(dāng)添加它。如果該CPA屬于最低的緩存層,則應(yīng)當(dāng)將其傳遞給某些鄰居,即使無法將其加入緩存。如果在同步期間接收到“充溢”,則止住“充溢”消息的傳遞,因為假定其它節(jié)點已經(jīng)知道所有已發(fā)現(xiàn)的CPA。如果需要傳遞“充溢”,則選擇離本地注冊ID最近的n個PNRP ID集合。以該新的CPA和一個“已充溢列表”將一個“充溢”消息發(fā)送給該集合中的每一個,該“已充溢列表”包括該n個鄰居加上在所接收到的“充溢”消息中接收到的“已充溢列表”的內(nèi)容。
標(biāo)識驗證是一種用以驗證CPA的減緩?fù){的設(shè)計。它具有兩個目的。首先,標(biāo)識驗證確保在一個CPA中所指明的PNRP節(jié)點具有該CPA所本地注冊的PNRP ID。其次,對于安全的PNRP ID,標(biāo)識驗證確保該CPA是用一把與該P(yáng)NRP ID中的授權(quán)有可密碼證明的關(guān)系的密鑰來簽署的。標(biāo)識驗證如何完成這兩個目的的細(xì)節(jié)可以在上面所標(biāo)識的未決申請中找到。
標(biāo)識驗證在兩個不同的時間發(fā)生。首先,標(biāo)識驗證在將一個CPA加入最低兩個緩存層時發(fā)生。在最低兩個緩存層中的CPA驗證對于PNRP解析PNRPID的能力是很關(guān)鍵的。在將一個CPA加入這兩層之一前進(jìn)行標(biāo)識驗證減緩了幾種攻擊。在這一情況下,該CPA將被在一個列表中保持多至譬如30秒,等待“授權(quán)”消息。其次,標(biāo)識驗證在“解析”期間尋機(jī)發(fā)生。PNRP緩存有很高的周轉(zhuǎn)率。因此,多數(shù)緩存條目在被使用之前就被在緩存中覆蓋。PNRP并不驗證多數(shù)的CPA,直至它們被實際使用。當(dāng)用一個CPA來路由某個“解析”路徑時,PNRP將標(biāo)識驗證背負(fù)在該“解析”消息頭上。該“解析”包含一個“下一站”ID,該ID如同在“查詢”消息中的“目標(biāo)ID”一樣對待。該“解析”以一個“授權(quán)”消息來應(yīng)答,如同對于一個“查詢”所預(yù)期的一樣。如果某個尋機(jī)的標(biāo)識驗證失敗,則該“解析”的接收者不是發(fā)送者所相信的。因此,該“解析”被路由到別處,而該無效的CPA被從緩存中刪除。
為例示這一驗證,假定P是一個請求對PNRP ID“T”標(biāo)識驗證的節(jié)點。N是接收該標(biāo)識驗證請求的節(jié)點。P以目標(biāo)ID=T生成一個“查詢”消息,或以下一站=T(并且不設(shè)置RF_IGNORE_NEXTHOP)生成一個“解析”消息。N檢查其本地注冊PNRP ID的列表。如果T不在該列表中,則N以一個指示ID T不是本地注冊的“授權(quán)”消息來回應(yīng)。如果所接收到的消息是一個“解析”,則丟棄該“解析”,因為P將負(fù)責(zé)將它傳遞給別處。當(dāng)T是在N上的PNRP ID列表中,則N構(gòu)建一個“授權(quán)”消息,并將目標(biāo)ID設(shè)置成T。如果設(shè)置了RF_SEND_CHAIN標(biāo)志,則N獲取關(guān)于用以向?qū)NRP ID T的授權(quán)簽署該CPA的密鑰的證書鏈(如果存在)。該證書鏈被插入到該“授權(quán)”消息中。同等點名稱的“分類符”部分也被加入該“授權(quán)”消息。
N將該“授權(quán)”消息發(fā)送給P。如果該“授權(quán)”消息長于1216字節(jié),則將該消息分割成幾個1216字節(jié)或少于1216字節(jié)的分段,并發(fā)送每個分段。如果T是一個不安全的ID,或該CPA已經(jīng)驗證(以RF_SEND_CHAIN發(fā)送了“解析”),則處理完成。P驗證該CPA的簽署密鑰和用以產(chǎn)生PNRP ID的授權(quán)之間的關(guān)系。如果驗證失敗,則丟棄該CPA。如果驗證失敗而啟動消息是一個“解析”,則P將該“解析”傳遞給別處。
如在上面所標(biāo)識的申請所解釋以及上面所簡要討論的那樣,PNRP網(wǎng)絡(luò)有可能分隔。這可以以兩種方式發(fā)生。第一,網(wǎng)絡(luò)可能是獨立啟動的,并需要合并。第二,網(wǎng)絡(luò)可能是作為一個而啟動的,但該網(wǎng)絡(luò)的某些分段變得與該網(wǎng)絡(luò)的其它部分相隔離。為了橋接任何可能的分隔,假定該網(wǎng)絡(luò)將有指定的種子服務(wù)器。這是用于經(jīng)由DNS引導(dǎo)的相同的服務(wù)器。如果在一個網(wǎng)絡(luò)中有多臺種子服務(wù)器,則這些種子服務(wù)器必須定期互相通信,以確保交換在它們緩存中的ID。這可以使用同步過程來做到。這將避免產(chǎn)生孤島。
一個網(wǎng)絡(luò)中的節(jié)點將定期輪詢種子服務(wù)器,以測試該網(wǎng)絡(luò)是否已變得與主網(wǎng)相隔離,并在必要時試圖合并回去。網(wǎng)絡(luò)測試分隔的頻率與其對該網(wǎng)絡(luò)大小的預(yù)計成反比。這是為了防止測試分隔發(fā)生得太頻繁。一個新近加入網(wǎng)絡(luò)得節(jié)點在假定其能夠估計該網(wǎng)絡(luò)得大小之前應(yīng)當(dāng)?shù)却欢螘r間,等其緩存被傳播。
為了確保網(wǎng)絡(luò)的合并,要使用PNRP“修復(fù)”消息?!靶迯?fù)”具有一個PNRPID、一個節(jié)點的IP地址和一個“修復(fù)層次”編號。緩存層是編碼成0為頂層(最廣泛的編號范圍),而每個后續(xù)層(更小范圍)高1。當(dāng)首次探測到一個分隔時,將“修復(fù)層次”初始化為0。當(dāng)某個節(jié)點決定其應(yīng)當(dāng)對某個分隔代碼進(jìn)行一次測試時,該節(jié)點將使用某臺已知種子服務(wù)器的地址作為IP地址、一個本地注冊的PNRP ID和一個0層次來內(nèi)部產(chǎn)生一個“修復(fù)”。它自己來處理這個“修復(fù)”。
在處理一個“修復(fù)”時,該節(jié)點對分隔進(jìn)行一次測試。它首先找到一個與該“修復(fù)”消息中的最接近的本地注冊ID。而后它發(fā)送一個針對這一ID+1的“解析”給該“修復(fù)”消息中所指明的IP地址。這一“解析”應(yīng)當(dāng)具有一個“修復(fù)”的“原因代碼”。如果這解析到了某個已知的節(jié)點,則并沒有分隔。
如果解析到了某個新的節(jié)點,則懷疑有一個分隔。如果發(fā)現(xiàn)該新節(jié)點是在底層緩存(最高編號),則如通常一樣進(jìn)行充溢。在該“充溢”中設(shè)置一個“修復(fù)”的“原因代碼”。同樣,如果接收到該“解析”的節(jié)點將來源ID放入其最低緩存層,則該節(jié)點將充溢條目到該來源。所有的這些充溢將導(dǎo)致與新的網(wǎng)絡(luò)交換幾個ID。所有經(jīng)由充溢發(fā)現(xiàn)的新節(jié)點都以這一方式來跟蹤。
現(xiàn)在很顯然,PNRP協(xié)議包括十種消息類型。每個消息以一個PNRP頭開始,以特定于該消息類型的字段隨后。運(yùn)轉(zhuǎn)開銷(例如字段描述)在每個消息字段表的“長度”列單獨計算。在以下的描述中,描述了一個由所有這些消息共享的一般消息數(shù)據(jù)結(jié)構(gòu),跟著是對本發(fā)明的協(xié)議中所包括的十種消息中每一種的消息數(shù)據(jù)結(jié)構(gòu)的詳細(xì)描述。在這一討論后,將提供用以構(gòu)造本發(fā)明的消息的每個字段數(shù)據(jù)結(jié)構(gòu)的描述。
在圖5中例示的是一幅例示了用以構(gòu)造本發(fā)明的十種PNRP消息的基本消息數(shù)據(jù)結(jié)構(gòu)的示例性數(shù)據(jù)結(jié)構(gòu)圖??梢钥吹剑?shù)據(jù)結(jié)構(gòu)260包含許多字段2621-N。在某一較佳實施例中,第一個字段2621被保留為PNRP頭。針對用以構(gòu)造消息260的每個單獨字段2621-N的字段數(shù)據(jù)結(jié)構(gòu)包括一個類型成份266、一個長度成份268和字段數(shù)據(jù)結(jié)構(gòu)264的實際內(nèi)容或載荷270。長度成份268是按照整個字段264的長度272來計算的。按這種方式,此協(xié)議是完全可擴(kuò)展的。
“解析”消息按照本發(fā)明的數(shù)據(jù)結(jié)構(gòu)來構(gòu)造。如從圖6的簡化數(shù)據(jù)結(jié)構(gòu)圖可以看到的,“解析”消息280是以許多字段282-292構(gòu)造的。這多種字段也是按照本發(fā)明的字段數(shù)據(jù)結(jié)構(gòu)來構(gòu)造。舉例來說,PNRP_HEADER字段282包含字段數(shù)據(jù)結(jié)構(gòu)294。這一數(shù)據(jù)結(jié)構(gòu)294的成份包括類型(字段ID 296)、長度298。這一PNRP_HEADER數(shù)據(jù)結(jié)構(gòu)294的內(nèi)容包括一個協(xié)議成份300、一個主版本成份302、一個副版本成份304、一個消息類型成份306和一個消息ID成份308。類似的是,VALIDATE_PNRP_ID字段288包含字段數(shù)據(jù)結(jié)構(gòu)310。如所有其它的字段數(shù)據(jù)結(jié)構(gòu)一樣,VALIDATE_PNRP_ID字段數(shù)據(jù)結(jié)構(gòu)310以一個類型成份(字段ID 312)和一個長度成份314來開頭。這一字段數(shù)據(jù)結(jié)構(gòu)的內(nèi)容包括P2P ID成份316和服務(wù)位置成份318。每個不同字段都以某種類似圖5中所例示的式樣構(gòu)造,其描述將在下面提供。
如現(xiàn)已顯明并將在下面例示的那樣,這一“解析”消息包含一個要解析的目標(biāo)PNRP ID、該“解析”發(fā)起者的CPA、“最佳匹配”的CPA以及一個已處理過該“解析”的節(jié)點的列表。該“解析”包括一個“標(biāo)志”字段。對于Resolve_Controls字段的標(biāo)志子字段定義了兩個標(biāo)志RF_SEND_CHAIN-0x0001,要求接收者在“授權(quán)”回應(yīng)中發(fā)送一個證書鏈(如果存在);RF_IGNORE_NEXTHOP-0x0004,用于“解析”的原路返回路徑。如果某個節(jié)點接收到一個作為原路返回一部分的“解析”,則發(fā)送者并不知道這一節(jié)點的PNRP ID。“下一站”字段設(shè)成零,并設(shè)置RF_IGNORE_NEXTHOP,以指示該“授權(quán)”將只用作對“解析”的“應(yīng)答”。如上面所討論的那樣,“解析”的接收是以一個“授權(quán)”消息來應(yīng)答的。在本發(fā)明的某一較佳實施例中,“頭部”中的“消息類型”設(shè)成5。在表5中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的“解析”消息的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表5在這一表5中,P是編碼了的CPA的字節(jié)長度,向上取整到最接近的DWORD邊界。A是在已標(biāo)記數(shù)組中條目的數(shù)量。它不能超過“最大站數(shù)”的值。
在“解析”到達(dá)擁有目標(biāo)PNRP ID的節(jié)點時,或者在已標(biāo)記路徑的大小等于“解析”“最大站數(shù)”時,產(chǎn)生一個“回應(yīng)”。在生成“回應(yīng)”時,將來自相應(yīng)“解析”的已標(biāo)記路徑的所有條目拷貝入“回應(yīng)”路徑。經(jīng)由“路徑”中所有標(biāo)記了“接受”的地址自底向頂路由“回應(yīng)”消息,直至每個適當(dāng)?shù)木W(wǎng)絡(luò)端點都處理過該“回應(yīng)”,且該“回應(yīng)”返回到“解析”的發(fā)起者。如上面所討論的那樣,“回應(yīng)”的接收是由一個“應(yīng)答”消息來應(yīng)答。在某一較佳實施例中,“頭部”中的“消息類型”設(shè)成6。在表6中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的“回應(yīng)”消息的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表6在這一表6中,P是編碼了的源CPA的字節(jié)長度,向上取整到最接近的DWORD邊界。B是在端點數(shù)組中條目的數(shù)量。
“懇求”消息請求接收者從其緩存中向發(fā)送者“廣告”某些條目。發(fā)送者包括一個接收者可能加入其緩存的CPA。必須在該“廣告”消息中返回“雜湊的現(xiàn)時”。“懇求”的接收由一個“廣告”消息來應(yīng)答。在某一較佳實施例中,“頭部”中的“消息類型”設(shè)成1。在表7中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的“懇求”消息的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。在這一表7中,P是編碼了的源CPA的字節(jié)長度,向上取整到最接近的DWORD邊界。
表7“廣告”消息回應(yīng)于某個“懇求”而產(chǎn)生。“廣告”從廣告者的緩存中列出某些PNRP ID。這使該“廣告”的接收者能有選擇性地“請求”CPA傳播其緩存?!皬V告”的接受扮演對“懇求”的一個應(yīng)答。對于“廣告”不產(chǎn)生應(yīng)答。任何不是扮演對“懇求”的應(yīng)答的“廣告”都應(yīng)當(dāng)默默地丟棄?!半s湊現(xiàn)時”值必須與在該“懇求”消息中所接收到的同樣。一個接收“廣告”的節(jié)點必須能夠驗證該“雜湊的現(xiàn)時”是有效的。在某一較佳實施例中,“頭部”中的“消息類型”設(shè)成2。在表8中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的“廣告”消息的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。在這一表中,A是ID數(shù)組中的條目數(shù)量。
表8“請求”消息用于請求某個廣告者“充溢”“廣告”了的CPA的一個子集。“現(xiàn)時”應(yīng)當(dāng)被雜湊過,并與在原始“懇求”消息中所接收到的“雜湊的現(xiàn)時”相比對。ID數(shù)組包含發(fā)送者意欲“充溢”回發(fā)送者的PNRP ID,這樣它就能獲得那些CPA?!罢埱蟆钡慕邮沼梢粋€“應(yīng)答”消息來應(yīng)答。在本發(fā)明的某一較佳實施例中,“頭部”中的“消息類型”設(shè)成3。在表9中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的“請求”消息的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。在這一表中,A是ID數(shù)組中的條目數(shù)量。
表9“充溢”消息由PNRP用來傳播緩存了的CPA,以選擇同等點?!俺湟纭笔窃趯⒁粋€新的CPA加入最低緩存層時,或在最低緩存層中處理一個撤回的較早版本的CPA時,回應(yīng)于某個“請求”消息而發(fā)起?!俺湟纭卑ㄒ粋€幫助防止冗余“充溢”的地址的列表,稱為“已充溢列表”?!耙殉湟缌斜怼卑l(fā)送者的地址、每個發(fā)送者所要直接傳送該“充溢”向的目的地,以及在該“充溢”中已接收到的任何其它發(fā)送者所知道的PNRP節(jié)點的地址?!耙殉湟缌斜怼本哂幸粋€條目最大數(shù)量。如果該列表滿了,則以某種FIFO方式相應(yīng)低替換條目。這假定“充溢”的接收者更可能將該“充溢”傳播給“附近”的鄰居,而不是遠(yuǎn)的鄰居?!俺湟纭钡慕邮找砸粋€“應(yīng)答”消息來應(yīng)答?!膀炞CID”是一個可選的字段。如果出現(xiàn),則其要求接收者如果本地緩存了一個具有指定PNRP ID的CPA則以一個“應(yīng)答”來回應(yīng),如果沒有則作“否定應(yīng)答”。在某一較佳實施例中,“頭部”中的“消息類型”設(shè)成4。在表10中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的“充溢”消息的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。在這一表中,P是編碼了的CPA的字節(jié)長度,向上取整到最接近的DWORD邊界,而A是在數(shù)組中條目的數(shù)量。
表10“查詢”消息由PNRP節(jié)點用來在將選定的CPA輸入本地緩存前對它們進(jìn)行標(biāo)識驗證。標(biāo)識驗證確認(rèn)某個CPA在其發(fā)起節(jié)點仍然有效,并請求幫助驗證發(fā)起節(jié)點注冊該CPA的授權(quán)的信息。對于“標(biāo)志”字段定義一個標(biāo)志RF_SEND_CHAIN,要求接收者在“授權(quán)”回應(yīng)中發(fā)送一個證書鏈(如果存在)。如果該P(yáng)NRP ID已本地注冊,則“查詢”的接收以一個“授權(quán)”消息來應(yīng)答。不然,則默默地忽略該“查詢”消息。在某一較佳實施例中,“頭部”中的“消息類型”設(shè)成7。在表11中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的“查詢”消息的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。如該表所顯明的那樣,在FLAGS_FIELD后面有2個額外的字節(jié),以將下一個字段放到DWORD邊界上。
表11“授權(quán)”消息用于確認(rèn)或否認(rèn)某個PNRP ID仍注冊在本地節(jié)點上,并可選地提供一個證書鏈,讓該“授權(quán)”的接收者能驗證該節(jié)點注冊對應(yīng)于目標(biāo)ID的CPA的權(quán)限。對于“標(biāo)志”字段定義以下標(biāo)志AF_UNKNOWN_ID-0x0001,指示所指定“驗證”的PNRP ID不注冊在該主機(jī)上;AF_INVALID_SOURCE-0x0002,并不使用;AF_INVALID_BEST_MATCH-0x0004,也是并不使用;AF_REJECT_TOO_BUSY-0x0008,只有在回應(yīng)某個“解析”時有效,并指示該主機(jī)太忙不能接受“解析”,發(fā)送者應(yīng)當(dāng)將其傳遞給別處去處理;AF_REJECT_DEADEND-0x0010,并不使用;AF_REJECT_LOOP-0x0020,指示該節(jié)點已處理過該“解析”消息,該消息不應(yīng)當(dāng)被發(fā)送過來;AF_TRACING_ON-0x0040,只用于調(diào)試;AF_REDIRECT-0x0080,指示該節(jié)點將不傳遞該“解析”消息,但在“授權(quán)”消息中包括了一個“推舉”地址;AF_INVALID_REQUEST-0x0100,指示該“解析”消息驗證失敗,這可能在“最大站數(shù)”太大時發(fā)生;以及AF_CERT_CHAIN-0x8000,指示包括了一個證書鏈,實現(xiàn)驗證“驗證PNRP ID”與用以簽署其CPA的公鑰之間的關(guān)系。
“驗證PNRP ID”具有向之發(fā)送“授權(quán)”的ID。“證書鏈”是可選的。AF_CERT_CHAIN標(biāo)志指示其是否出現(xiàn)?!巴婆e端點”也是可選的。這一字段由某個不能傳遞“解析”消息但知道可以向之發(fā)送“解析”的其它節(jié)點的節(jié)點使用。端點包含將向之發(fā)送“解析”的某個對等節(jié)點的IPv6地址和端口。當(dāng)前這一字段是被忽略的,除非在節(jié)點嘗試經(jīng)由某臺種子服務(wù)器探測網(wǎng)絡(luò)分隔時。“分類符”字段包含是用以創(chuàng)建PNRP ID的同等點名稱一部分的真正的“分類符”字符串?!笆跈?quán)”的接收不用明確地應(yīng)答?!笆跈?quán)”只作為對“查詢”或“解析”消息的一個應(yīng)答/回應(yīng)而發(fā)送。如果超出這一上下文而接收到某個“授權(quán)”,就必須丟棄它。在某一較佳實施例中,“頭部”中的“消息類型”設(shè)成8。在表12中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的“授權(quán)”消息的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。在這一表中,C是編碼了的證書鏈的字節(jié)長度,向上取整到最接近的DWORD邊界,而S是“分類符”字符串的字節(jié)長度。
表12
由于包含一個“證書鏈”和一個“分類符”字符串,“授權(quán)”消息可能非常長。為了便于通過網(wǎng)絡(luò)傳輸,在發(fā)送時可以明確地將其分割成幾個分段。接收者必須能在處理該消息前將這些分段拼合起來。如果該消息是分割了的,則“頭部”和“應(yīng)答的頭部”字段在每個分段中都是重復(fù)的。每個分段還包含一個“分割控制”字段。在每個分段中“分割控制”字段中的“偏移”值都會變化,以反映該分段的“偏移”?!胺指羁刂啤敝械摹按笮 敝凳钦麄€消息的大小減去“頭部”、“應(yīng)答的頭部”和“分割控制”字段的大小。除最后一個外,每個分段都是相同大小。如果該消息沒有分割,則“分割控制”字段是可選的。
“應(yīng)答”由PNRP使用,因為它是一種請求/回應(yīng)協(xié)議。在某些情況下,使用一個“應(yīng)答”來代替回應(yīng)簡化了協(xié)議?!皯?yīng)答”總是在接收到“請求”、“回應(yīng)”和“充溢”消息后發(fā)送。其它的消息由適當(dāng)?shù)幕貞?yīng)消息類型來應(yīng)答?!皯?yīng)答”可以作為一個“應(yīng)答”,或者在某個“充溢”設(shè)定了“驗證ID”的情況下,通過將“標(biāo)志”字段設(shè)為KF_NACK=1,作為一個“否定應(yīng)答”。在某一較佳實施例中,“頭部”中的“消息類型”設(shè)成9。在表13中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的“應(yīng)答”消息的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表13
由于在某些情況下PNRP網(wǎng)絡(luò)可能經(jīng)歷某種分隔,所以要使用“修復(fù)”消息。這一消息用以測試某個分隔,并在需要時發(fā)起一個“修復(fù)”?!靶迯?fù)”將請求其它節(jié)點將該“修復(fù)”傳播到其它緩存層。在某一較佳實施例中,“頭部”中的“消息類型”設(shè)成10。在表14中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的“修復(fù)”消息的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。如該表所顯明的那樣,在CACHE_LEVEL后面有2個額外的字節(jié),以將下一個字段放到DWORD邊界上。
表14在討論了這些消息以及它們的數(shù)據(jù)結(jié)構(gòu)后,現(xiàn)在將注意力轉(zhuǎn)向用以構(gòu)造這些消息的消息元素。以下細(xì)述在PNRP消息中傳輸?shù)慕Y(jié)構(gòu)的字節(jié)代碼。除非另外指明,所有的數(shù)字是以網(wǎng)絡(luò)字節(jié)順序傳輸,而所有文本在傳輸前都編碼成UTF-8。這些消息元素就是用于剛剛所討論的消息的積木?;镜南⒃厥且粋€“字段”描述。每個“字段”元素應(yīng)當(dāng)開始于消息內(nèi)的某個4字節(jié)邊界。這意味著在“字段”間可能有縫隙。
MESSAGE_FIELD元素是用以確保PNRP將來可輕易地擴(kuò)展的字段描述。對于消息中的每個數(shù)據(jù)集,它都提供一個標(biāo)識該字段類型的16位“字段ID”和一個對該字段的16位計數(shù)。在表15中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的MESSAGE_FIELD元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表15PNRP_HEADER-類型0x0010用以開始所有的PNRP消息?!皡f(xié)議”+“版本”構(gòu)成一個4字節(jié)的標(biāo)識符,可用于判定某個接收到的消息是否是真正供PNRP使用的。在表16中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的PNRP_HEADER元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表16使用PNRP_HEADER中的“消息ID”,這樣節(jié)點就可以確保某個所接收到的主旨為回應(yīng)該節(jié)點所發(fā)送的某個消息的消息實際上就是這一回應(yīng)。舉例來說,假定某個節(jié)點向另一個節(jié)點發(fā)送了一個“解析”消息。如在圖4中所例示的那樣,該第一個節(jié)點期望接收某個回應(yīng)的“授權(quán)”消息。但是,沒有任何跟蹤或追蹤對該原始“解析”的回應(yīng)的方法,就無法保證某個接收到的“授權(quán)”消息是合法的還是網(wǎng)絡(luò)中某個惡意節(jié)點的哄騙。通過在“解析”消息中包括一個“消息ID”,產(chǎn)生“授權(quán)”消息的節(jié)點就可以將這一“消息ID”在下面所討論的PNRP_HEADER_ACKED字段中包括進(jìn)其回應(yīng)。
PNRP_HEADER_ACKED-類型0x0018是一個完整的PNRP消息頭,用以標(biāo)識某個所“應(yīng)答”的消息。在表17中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的PNRP_HEADER_ACKED元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表17由于PNRP被指明工作在IPv6網(wǎng)絡(luò)中,使用IPV6_ENDPOINT-類型0x0021元素。該結(jié)構(gòu)指明了一個IPv6網(wǎng)絡(luò)端點。還有一個標(biāo)志可以用以指示節(jié)點對正在進(jìn)行的“解析”的功用。“路徑標(biāo)志”用來指示某個發(fā)送到“地址”的“解析”是被“接受”還是被“拒絕”。而且如果該“地址”是一個鄰近的鄰居,可以設(shè)置“可疑”標(biāo)志,因為該節(jié)點應(yīng)當(dāng)知道其所有鄰近的鄰居?!暗刂芬褎h除”指示符在調(diào)試期間使用,以將某個條目標(biāo)記為已刪除,而不必真的刪除它。這些指示符如下PNRP_FLAGGED_ADDRESS_ACCEPTED-0x01;PNRP_FLAGGED_ADDRESS_REJECTED-0x02;PNRP_FLAGGED_ADDRESS_UNREACHABLE-0x04;PNRP_FLAGGED_ADDRESS_LOOP-0x08;PNRP_FLAGGED_ADDRESS_TOO_BUSY-0x10;PNRP_FLAGGED_ADDRESS_BAD_VALIDATE_ID-0x20;PNRP_FLAGGED_ADDRESS_REMOVED-0x80;以及PNRP_FLAGGED_SUSPECT_UNREGISTERED_ID-0x40。在表18中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的IPV6_ENDPOINT元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表18PNRP_ID-0x0030元素是一個128位P2P ID和一個128位服務(wù)位置的串聯(lián)。在表19中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的PNRP_ID元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表19TARGET_PNRP_ID-0x0038是用于某個“解析”請求或其相應(yīng)“回應(yīng)”的目標(biāo)ID。在表20中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的TARGET_PNRP_ID元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表20VALIDATE_PNRP_ID-0x0039是對之請求驗證或授權(quán)的PNRP ID。在表21中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的VALIDATE_PNRP_ID元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表21FLAGS_FIELD-0x0040標(biāo)識了用于特定于上下文的目的的一個位字段的標(biāo)志。在表22中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的FLAGS_FIELD元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表22RESOLVE_CONTROLS-0x0041字段包含了要在處理“解析”或“回應(yīng)”時使用的信息。標(biāo)志被用來指示該“解析”是否是原路返回的,或者是否請求某個“授權(quán)”消息。這些標(biāo)志包括RF_IGNORE_NEXT_HOP-0x0001;RF_SEND_CHAIN-0x0004;RF_DONT_REMOVE_PATH_ENTRIES-0x0008,只用于調(diào)試;以及RF_TRACING_ON-0x0010,只用于調(diào)試。“最大站數(shù)”限制了在完成“解析”前的站數(shù)?!安僮鞔a”描述了應(yīng)當(dāng)如何進(jìn)行匹配。對于“ANY”代碼,匹配只要頭上的128位(P2P ID),而對于“NEAREST”代碼,還有考慮“服務(wù)位置”?!安僮鞔a”還確定匹配是否應(yīng)當(dāng)考慮在同一節(jié)點上注冊為“解析”的發(fā)起者的ID。這些操作代碼包括SEARCH_OPCODE_NONE-0;SEARCH_OPCODE_ANY_PEERNAME-1;SEARCH_OPCODE_NEAREST_PEERNAME-2;SEARCH_OPCODE_NEAREST64_PEERNAME-4;以及
SEARCH_OPCODE_UPPER_BITS-8?!熬取痹O(shè)定了ID與實際位數(shù)相匹配的精度。如果操作代碼是SEARCH_OPCODE_UPPER_BITS,就使用該值。
“原因”用以指示該“解析”是由于緩存維護(hù)而作為“修復(fù)”過程的一部分發(fā)送,還是由于某個應(yīng)用請求而作為“注冊”的一部分發(fā)送。這些“原因”包括REASON_APP_REQUEST-0;REASON_REGISTRATION-1;REASON_CACHE_MAINTENANCE-2;REASON_REPAIR_DETECTION-3;REASON_SYNC_REQUEST-4;REASON_CPA_VIA_RESOLVE-5;REASON_CPA_VIA_FLOOD-6;REASON_REPAIR-7;以及REASON_CPA_VIA_BACK_FLOOD-8。
“結(jié)果代碼”指示了該“解析”為何完成并轉(zhuǎn)換成一個“回應(yīng)”。它可以指示由于超出“站”計數(shù)、未找到更佳路徑或太多鄰居定位目標(biāo)失敗的成功或失敗。這些“結(jié)果代碼”包括RESULT_NONE-0;RESULT_FOUND_MATCH-1;RESULT_MAX_HOP_LIMIT_HIT-2;RESULT_NO_BETTER_PATH_FOUND-3;以及RESULT_TOO_MANY_MISSES-4。事務(wù)ID由某個請求的發(fā)起者使用來與“回應(yīng)”相關(guān)聯(lián)。“解析”的發(fā)起者設(shè)置“事務(wù)ID”值,而發(fā)起“回應(yīng)”的節(jié)點在“回應(yīng)”消息中重復(fù)該值。中間節(jié)點都不應(yīng)當(dāng)改變該值。在表23中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的RESOLVE_CONTROLS元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表23CACHE_LEVEL-類型0x0042元素描述了在執(zhí)行“修復(fù)”時要使用哪個緩存層。這在進(jìn)行某個分隔緩存修復(fù)時使用。在表24中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的CACHE_LEVEL元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表24FLOOD_CONTROLS-類型0x0043元素包含在處理“充溢”時要使用的信息。發(fā)送該“充溢”的原因是唯一使用的代碼。在表25中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的FLOOD_CONTROLS元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表25CPA_SOURCE-類型0x0058是在“懇求”消息中用作源CPA的CPA。該CPA為網(wǎng)絡(luò)傳輸而被編碼。在表26中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的CPA_SOURCE元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表26CPA_BEST_MATCH-類型0x0059元素是在“解析”或“回應(yīng)”中用作“最佳匹配”的CPA。該CPA為網(wǎng)絡(luò)傳輸而被編碼。在表27中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的CPA_BEST_MATCH元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表27PNRP_ID_ARRAY-類型0x0060元素包括了存儲在一個數(shù)組中的針對“廣告”和“請求”消息的PNRP ID。下面描述了這些數(shù)據(jù),包括數(shù)組的大小。在表28中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的PNRP_ID_ARRAY元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表28IPV6_ENDPOINT_ARRAY-類型0x0071元素是所有已經(jīng)訪問過的節(jié)點的一個數(shù)組?!俺湟纭钡南L問多個節(jié)點。每個已經(jīng)訪問過或發(fā)送向的節(jié)點都進(jìn)入這一數(shù)組。下面描述了這些數(shù)據(jù),包括數(shù)組的大小。在表29中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的IPV6_ENDPOINT_ARRAY元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表29IPV6_REFERRAL_ADDRESS-類型0x0072元素是一個特別用以為發(fā)送“解析”提供一個備用地址的IPv6端點。當(dāng)某個節(jié)點不需要傳遞某個“解析”,但需要提供某個某些其它節(jié)點可以嘗試的地址時,在“授權(quán)”消息中使用這一字段。在表30中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的IPV6_REFERRAL_ADDRESS元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表30IPV6_REFERRAL_ID-類型0x0073元素與IPv6_Referral_Address一起使用,以指示用作推舉的PNRP ID。在表31中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的IPV6_REFERRAL_ID元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表31
“證書鏈”(CERT_CHAIN)-類型0x0080元素是通過使用Windows CAPIAPI來建立的。首先將構(gòu)成該鏈的證書放入一個CAPI內(nèi)存中的證書儲備,而后將其導(dǎo)出成一個PKCS7編碼的證書儲備。將這一導(dǎo)出的儲備不作改變而發(fā)送。
WCHAR-類型0x0084元素被定義來保存單個的UNICODE字符。它只作為UNICODE數(shù)組字段(如“分類符”)的部分來使用。
CLASSIFIER-類型0x0085元素是用作同等點名稱的基礎(chǔ)的UNICODE“分類符”字符串。它被編碼成一個WCHAR元素的數(shù)組。在表32中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的CLASSIFIER元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表32HASHED_NONCE-類型0x0092元素是一個被包括在“廣告”消息中的加密了的“現(xiàn)時”值。期望接收者將擁有解密該“現(xiàn)時”的密鑰。在表33中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的HASHED_NONCE元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表33NONCE-類型0x0093元素是一個被包括在“請求”消息中的解密了的“現(xiàn)時”值。期望接收者將驗證該解密了的“現(xiàn)時”與其加密前發(fā)送的值相符。在表34中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的NONCE元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表34SPLIT_CONTROLS-類型0x0098元素在以一系列分段而不是以單個消息來發(fā)送某個長消息時使用。每個分段都包括了“分割控制”字段,這樣就可以由接收者來構(gòu)造該消息。在表35中呈現(xiàn)了按照本發(fā)明的教義構(gòu)造的SPLIT_CONTROLS元素的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)。
表35PNRP_TRACE-類型0x0099元素在調(diào)試期間使用,以保存可以在“解析”與“回應(yīng)”消息之間從站到站運(yùn)載的數(shù)據(jù)。它用以存儲跟蹤數(shù)據(jù)。在協(xié)議的最終版本中可能不支持。
前面對本發(fā)明多種實施例的描述是為例示與描述目的而呈現(xiàn)的,無意將本發(fā)明窮盡或限制于所揭示的精確實施例。在以上教義的光亮下,無數(shù)修改或變更都是可能的。所討論的實施例是選擇并描述來提供本發(fā)明原則及其實際應(yīng)用的最佳例示,因而使相關(guān)技術(shù)領(lǐng)域的某個普通行家能以適于所預(yù)期的特殊用途的多種實施例及多種修改來利用本發(fā)明。如通過根據(jù)公平、合法、公正地授予的幅度來解讀所附權(quán)利要求而判定的那樣,所有這樣的修改與變更都是在本發(fā)明的范圍之內(nèi)。
權(quán)利要求
1.一種計算機(jī)可讀取媒介,其上存儲用于對等名稱解析協(xié)議(PNRP)的數(shù)據(jù)結(jié)構(gòu),其特征在于包含第一個消息字段,其中存儲第一個消息元素;以及至少第二個消息字段,其中存儲第二個消息元素;并且其中每個消息元素由一個包含字段標(biāo)識字段、長度字段和載荷的消息元素數(shù)據(jù)結(jié)構(gòu)構(gòu)成。
2.如權(quán)利要求1所述的計算機(jī)可讀取媒介,其特征在于進(jìn)一步包含多個消息字段,每個中都存儲一個消息元素。
3.如權(quán)利要求1所述的計算機(jī)可讀取媒介,其特征在于其中存儲在第一個消息字段中的第一個消息元素由一個頭部消息元素構(gòu)成。
4.如權(quán)利要求3所述的計算機(jī)可讀取媒介,其特征在于其中頭部消息元素的載荷包括將消息類型標(biāo)識為“解析”、“回應(yīng)”、“懇求”、“廣告”、“請求”、“充溢”、“查詢”、“授權(quán)”、“應(yīng)答”和“修復(fù)”消息之一的信息。
5.如權(quán)利要求3所述的計算機(jī)可讀取媒介,其特征在于其中頭部消息元素的載荷包括將消息類型標(biāo)識為“解析”消息的信息,存儲在第二個字段中的第二個消息元素由一個解析控制消息元素構(gòu)成,該“解析”進(jìn)一步包括含一個PNRP目標(biāo)標(biāo)識消息元素的第三個消息字段、含一個驗證PNRP標(biāo)識消息元素的第四個消息字段、含一個已驗證最佳匹配同等點地址(CPA)消息元素的第五個消息字段和含一個IPV6端點數(shù)組消息元素的第六個消息字段。
6.如權(quán)利要求5所述的計算機(jī)可讀取媒介,其特征在于其中解析控制消息元素的載荷包含一個用于特定于上下文的標(biāo)志的位字段、一個該“解析”消息可以訪問的節(jié)點的最大數(shù)量、控制解析操作的操作代碼、一個要匹配的有效位的精度數(shù)、一個描述發(fā)起“解析”的原因的原因代碼、一個描述返回回應(yīng)的原因的結(jié)果代碼和一個事務(wù)標(biāo)識值。
7.如權(quán)利要求5所述的計算機(jī)可讀取媒介,其特征在于其中目標(biāo)PNRP標(biāo)識消息元素的載荷包含一個目標(biāo)同等點的同等點名稱的雜湊和一個源自某已廣告的服務(wù)地址的服務(wù)位置。
8.如權(quán)利要求5所述的計算機(jī)可讀取媒介,其特征在于其中驗證PNRP標(biāo)識消息元素的載荷包含一個對之請求驗證與授權(quán)的節(jié)點的同等點名稱的雜湊和一個源自某已廣告的對之請求驗證與授權(quán)的節(jié)點的服務(wù)地址的服務(wù)位置。
9.如權(quán)利要求5所述的計算機(jī)可讀取媒介,其特征在于其中最佳匹配CPA消息元素的載荷包含一個已編碼的CPA。
10.如權(quán)利要求5所述的計算機(jī)可讀取媒介,其特征在于其中IPV6端點數(shù)組消息元素的載荷包含一個數(shù)組中條目的數(shù)量、一個數(shù)組的總長度、一個對每個數(shù)組條目類型的標(biāo)識符、一個每個數(shù)組元素的長度和一個每個已訪問的或向之發(fā)送了“回應(yīng)”消息的節(jié)點的地址的數(shù)組。
11.如權(quán)利要求3所述的計算機(jī)可讀取媒介,其特征在于其中頭部消息元素的載荷包括將消息類型標(biāo)識為“回應(yīng)”消息的信息,存儲在第二個字段中的第二個消息元素由一個解析控制消息元素構(gòu)成,而該“回應(yīng)”消息進(jìn)一步包括含一個解析控制消息元素的第三個消息字段、含一個目標(biāo)PNRP ID消息元素的第四個消息字段、含一個最佳匹配CPA消息元素的第五個消息字段和一個IPV6端點數(shù)組消息元素。
12.如權(quán)利要求11所述的計算機(jī)可讀取媒介,其特征在于其中解析控制消息元素的載荷包含一個用于特定于上下文的標(biāo)志的位字段、一個該“解析”消息可以訪問的節(jié)點的最大數(shù)量、控制解析操作的操作代碼、一個要匹配的有效位的精度數(shù)、一個描述發(fā)起“解析”的原因的原因代碼、一個描述返回回應(yīng)的原因的結(jié)果代碼和一個事務(wù)標(biāo)識值。
13.如權(quán)利要求11所述的計算機(jī)可讀取媒介,其特征在于其中目標(biāo)PNRP標(biāo)識消息元素的載荷包含一個目標(biāo)同等點的同等點名稱的雜湊(hash)和一個源自某已廣告的服務(wù)地址的服務(wù)位置。
14.如權(quán)利要求11所述的計算機(jī)可讀取媒介,其特征在于其中最佳匹配CPA消息元素的載荷包含一個已編碼的CPA。
15.如權(quán)利要求11所述的計算機(jī)可讀取媒介,其特征在于其中IPV6端點數(shù)組消息元素的載荷包含一個數(shù)組中條目的數(shù)量、一個數(shù)組的總長度、一個對每個數(shù)組條目類型的標(biāo)識符、一個每個數(shù)組元素的長度和一個每個已訪問的或向之發(fā)送了“回應(yīng)”消息的節(jié)點的地址的數(shù)組。
16.如權(quán)利要求3所述的計算機(jī)可讀取媒介,其特征在于其中頭部消息元素的載荷包括將消息類型標(biāo)識為“懇求”消息的信息,存儲在第二個字段中的第二個消息元素由一個源CPA消息元素構(gòu)成,而該“懇求”消息進(jìn)一步包括含雜湊了的現(xiàn)時消息元素的第三個消息字段。
17.如權(quán)利要求16所述的計算機(jī)可讀取媒介,其特征在于其中源CPA消息元素的載荷包含一個已編碼的源CPA。
18.如權(quán)利要求16所述的計算機(jī)可讀取媒介,其特征在于其中雜湊了的現(xiàn)時消息元素的載荷包含一個已加密的現(xiàn)時值。
19.如權(quán)利要求3所述的計算機(jī)可讀取媒介,其特征在于其中頭部消息元素的載荷包括將消息類型標(biāo)識為“廣告”消息的信息,存儲在第二個字段中的第二個消息元素由一個應(yīng)答的PNRP頭部消息元素構(gòu)成,而該“廣告”消息進(jìn)一步包括含一個PNRP ID數(shù)組消息元素的第三個消息字段和含雜湊了的現(xiàn)時消息元素的第四個消息字段。
20.如權(quán)利要求19所述的計算機(jī)可讀取媒介,其特征在于其中應(yīng)答的PNRP頭部消息元素的載荷包含一個所應(yīng)答的消息的消息標(biāo)識。
21.如權(quán)利要求19所述的計算機(jī)可讀取媒介,其特征在于其中PNRP ID數(shù)組消息元素的載荷包含一個PNRP ID數(shù)組中條目的數(shù)量、一個數(shù)組的總長度、一個對每個數(shù)組條目類型的標(biāo)識符、一個每個數(shù)組元素的長度和一個PNRPID的數(shù)組。
22.如權(quán)利要求19所述的計算機(jī)可讀取媒介,其特征在于其中雜湊了的現(xiàn)時消息元素的載荷包含一個已加密的現(xiàn)時值。
23.如權(quán)利要求3所述的計算機(jī)可讀取媒介,其特征在于其中頭部消息元素的載荷包括將消息類型標(biāo)識為“請求”消息的信息,存儲在第二個字段中的第二個消息元素由一個現(xiàn)時消息元素構(gòu)成,而該“請求”消息進(jìn)一步包括含一個PNRP ID數(shù)組消息元素的第三個消息字段。
24.如權(quán)利要求23所述的計算機(jī)可讀取媒介,其特征在于其中現(xiàn)時消息元素的載荷包含一個已解密的現(xiàn)時值。
25.如權(quán)利要求23所述的計算機(jī)可讀取媒介,其特征在于其中PNRP ID數(shù)組消息元素的載荷包含一個PNRP ID數(shù)組中條目的數(shù)量、一個數(shù)組的總長度、一個對每個數(shù)組條目類型的標(biāo)識符、一個每個數(shù)組元素的長度和一個PNRPID的數(shù)組。
26.如權(quán)利要求3所述的計算機(jī)可讀取媒介,其特征在于其中頭部消息元素的載荷包括將消息類型標(biāo)識為“充溢”消息的信息,存儲在第二個字段中的第二個消息元素由一個充溢控制消息元素構(gòu)成,而該“充溢”消息進(jìn)一步包括含一個最佳匹配CPA消息元素的第三個消息字段和含一個IPV6端點數(shù)組消息元素的第四個消息字段。
27.如權(quán)利要求26所述的計算機(jī)可讀取媒介,其特征在于其中充溢控制消息元素的載荷包含一個用于特定于上下文的標(biāo)志的位字段和一個描述發(fā)起“充溢”的原因的原因代碼。
28.如權(quán)利要求26所述的計算機(jī)可讀取媒介,其特征在于其中最佳匹配CPA消息元素的載荷包含一個已編碼的CPA。
29.如權(quán)利要求26所述的計算機(jī)可讀取媒介,其特征在于其中IPV6端點數(shù)組消息元素的載荷包含一個數(shù)組中條目的數(shù)量、一個數(shù)組的總長度、一個對每個數(shù)組條目類型的標(biāo)識符、一個每個數(shù)組元素的長度和一個每個已訪問的或向之發(fā)送了“回應(yīng)”消息的節(jié)點的地址的數(shù)組。
30.如權(quán)利要求3所述的計算機(jī)可讀取媒介,其特征在于其中頭部消息元素的載荷包括將消息類型標(biāo)識為“查詢”消息的信息,存儲在第二個字段中的第二個消息元素由一個標(biāo)志字段消息元素構(gòu)成,而該“查詢”消息進(jìn)一步包括含一個驗證PNRP標(biāo)識消息元素的第三個消息字段。
31.如權(quán)利要求30所述的計算機(jī)可讀取媒介,其特征在于其中標(biāo)志字段消息元素的載荷包含一個用于特定于上下文的標(biāo)志的位字段。
32.如權(quán)利要求30所述的計算機(jī)可讀取媒介,其特征在于其中驗證PNRP標(biāo)識消息元素的載荷包含一個對之請求驗證與授權(quán)的節(jié)點的同等點名稱的雜湊和一個源自某已廣告的對之請求驗證與授權(quán)的節(jié)點的服務(wù)地址的服務(wù)位置。
33.如權(quán)利要求3所述的計算機(jī)可讀取媒介,其特征在于其中頭部消息元素的載荷包括將消息類型標(biāo)識為“授權(quán)”消息的信息,存儲在第二個字段中的第二個消息元素由一個應(yīng)答的PNRP頭部消息元素構(gòu)成,而該“授權(quán)”進(jìn)一步包括含一個分割控制消息元素的第三個消息字段、含標(biāo)志字段消息元素的第四個消息字段、含一個驗證PNRP ID消息元素的第五個消息字段、含一個證書鏈消息元素的第六個消息字段、含一個IPV6推舉地址消息元素的第七個消息字段、含一個IPV6推舉標(biāo)識消息元素的第八個消息字段和含一個分類符消息元素的第九個消息字段。
34.如權(quán)利要求33所述的計算機(jī)可讀取媒介,其特征在于其中應(yīng)答的PNRP頭部消息元素的載荷包含一個所應(yīng)答的消息的消息標(biāo)識。
35.如權(quán)利要求33所述的計算機(jī)可讀取媒介,其特征在于其中分割控制消息元素的載荷包含一個分段的大小和一個分段的偏移。
36.如權(quán)利要求33所述的計算機(jī)可讀取媒介,其特征在于其中標(biāo)志字段消息元素的載荷包含一個用于特定于上下文的標(biāo)志的合適字段。
37.如權(quán)利要求33所述的計算機(jī)可讀取媒介,其特征在于其中驗證PNRP標(biāo)識消息元素的載荷包含一個對之請求驗證與授權(quán)的節(jié)點的同等點名稱的雜湊和一個源自某已廣告的對之請求驗證與授權(quán)的節(jié)點的服務(wù)地址的服務(wù)位置。
38.如權(quán)利要求33所述的計算機(jī)可讀取媒介,其特征在于其中證書鏈消息元素的載荷包含一個已PKCS7編碼的證書儲備。
39.如權(quán)利要求33所述的計算機(jī)可讀取媒介,其特征在于其中IPV6推舉地址消息元素的載荷包含一個對某節(jié)點端點的路徑標(biāo)志、一個IP協(xié)議編號、一個IPV6端口和一個作為某備用節(jié)點地址的IPV6地址。
40.如權(quán)利要求33所述的計算機(jī)可讀取媒介,其特征在于其中IPV6推舉標(biāo)識消息元素的載荷包含一個同等點名稱的雜湊和一個所推舉的節(jié)點的服務(wù)位置。
41.如權(quán)利要求33所述的計算機(jī)可讀取媒介,其特征在于其中分類符消息元素的載荷包含一個用作同等點名稱的基礎(chǔ)的Unicode分類符字符串,編碼成一個WCHAR元素的數(shù)組,該數(shù)組包括一個地址數(shù)組中條目的數(shù)量、一個數(shù)組的總長度、一個對每個數(shù)組條目類型的標(biāo)識符、一個每個數(shù)組元素的長度和一個Unicode字符的數(shù)組。
42.如權(quán)利要求3所述的計算機(jī)可讀取媒介,其特征在于其中頭部消息元素的載荷包括將消息類型標(biāo)識為“應(yīng)答”消息的信息,存儲在第二個字段中的第二個消息元素由一個應(yīng)答的PNRP頭部消息元素構(gòu)成。
43.如權(quán)利要求42所述的計算機(jī)可讀取媒介,其特征在于其中應(yīng)答的PNRP頭部消息元素的載荷包含一個所應(yīng)答的消息的消息標(biāo)識。
44.如權(quán)利要求3所述的計算機(jī)可讀取媒介,其特征在于其中頭部消息元素的載荷包括將消息類型標(biāo)識為“修復(fù)”消息的信息,存儲在第二個字段中的第二個消息元素由一個目標(biāo)PNRP標(biāo)識消息元素構(gòu)成,而該“修復(fù)”進(jìn)一步包括含一個緩存層消息元素的第三個消息字段和含一個IPV6端點消息元素的第四個消息字段。
45.如權(quán)利要求44所述的計算機(jī)可讀取媒介,其特征在于其中目標(biāo)PNRP標(biāo)識消息元素的載荷包含一個目標(biāo)同等點的同等點名稱的雜湊和一個源自某已廣告的服務(wù)地址的服務(wù)位置。
46.如權(quán)利要求44所述的計算機(jī)可讀取媒介,其特征在于其中緩存層消息元素的載荷包含一個標(biāo)識在執(zhí)行修復(fù)時要使用哪個緩存層的緩存層編號。
47.如權(quán)利要求4所述的計算機(jī)可讀取媒介,其特征在于其中頭部消息元素的載荷進(jìn)一步包括標(biāo)識某特定消息以實現(xiàn)對該特定消息的回應(yīng)的跟蹤的信息。
48.如權(quán)利要求1所述的計算機(jī)可讀取媒介,其特征在于其中長度字段包含標(biāo)識該消息元素的長度(包括字段標(biāo)識字段、長度字段和載荷的長度)的信息。
49.一種計算機(jī)可讀取媒介,其上存儲用于對等名稱解析協(xié)議(PNRP)中的“解析”消息數(shù)據(jù)結(jié)構(gòu),其特征在于包含第一個消息字段,具有一個PNRP頭部消息元素;第二個消息字段,具有一個解析控制消息元素;第三個消息字段,包含一個PNRP目標(biāo)標(biāo)識消息元素;第四個消息字段,包含一個驗證PNRP標(biāo)識消息元素;第五個消息字段,包含一個已驗證的最佳匹配同等點地址(CPA)消息元素;以及第六個消息字段,包含一個IPV6端點數(shù)組消息元素。
50.如權(quán)利要求49所述的計算機(jī)可讀取媒介,其特征在于其中每一個消息字段由一個包括一個字段標(biāo)識字段、一個長度字段和一個載荷的消息元素數(shù)據(jù)結(jié)構(gòu)構(gòu)成。
51.如權(quán)利要求50所述的計算機(jī)可讀取媒介,其特征在于其中解析控制消息元素的載荷包含一個用于特定于上下文的標(biāo)志的位字段、一個該“解析”消息可以訪問的節(jié)點的最大數(shù)量、控制解析操作的操作代碼、一個要匹配的有效位的精度數(shù)、一個描述發(fā)起“解析”的原因的原因代碼、一個描述返回回應(yīng)的原因的結(jié)果代碼和一個事務(wù)標(biāo)識值。
52.如權(quán)利要求50所述的計算機(jī)可讀取媒介,其特征在于其中目標(biāo)PNRP標(biāo)識消息元素的載荷包含一個目標(biāo)同等點的同等點名稱的雜湊和一個源自某已廣告的服務(wù)地址的服務(wù)位置。
53.如權(quán)利要求50所述的計算機(jī)可讀取媒介,其特征在于其中驗證PNRP標(biāo)識消息元素的載荷包含一個對之請求驗證與授權(quán)的節(jié)點的同等點名稱的雜湊和一個源自某已廣告的對之請求驗證與授權(quán)的節(jié)點的服務(wù)地址的服務(wù)位置。
54.如權(quán)利要求50所述的計算機(jī)可讀取媒介,其特征在于其中最佳匹配CPA消息元素的載荷包含一個已編碼的CPA。
55.如權(quán)利要求50所述的計算機(jī)可讀取媒介,其特征在于其中IPV6端點數(shù)組消息元素的載荷包含一個數(shù)組中條目的數(shù)量、一個數(shù)組的總長度、一個對每個數(shù)組條目類型的標(biāo)識符、一個每個數(shù)組元素的長度和一個每個已訪問的或向之發(fā)送了“回應(yīng)”消息的節(jié)點的地址的數(shù)組。
56.一種計算機(jī)可讀取媒介,其上存儲用于對等名稱解析協(xié)議(PNRP)中的“回應(yīng)”消息數(shù)據(jù)結(jié)構(gòu),其特征在于包含第一個消息字段,具有一個PNRP頭部消息元素;第二個消息字段,具有一個解析控制消息元素;第三個消息字段,包含一個解析控制消息元素;第四個消息字段,包含一個PNRP目標(biāo)標(biāo)識消息元素;第五個消息字段,包含一個已驗證的最佳匹配同等點地址(CPA)消息元素;以及第六個消息字段,包含一個IPV6端點數(shù)組消息元素。
57.如權(quán)利要求55所述的計算機(jī)可讀取媒介,其特征在于其中每一個消息字段由一個包括一個字段標(biāo)識字段、一個長度字段和一個載荷的消息元素數(shù)據(jù)結(jié)構(gòu)構(gòu)成。
58.如權(quán)利要求56所述的計算機(jī)可讀取媒介,其特征在于其中解析控制消息元素的載荷包含一個用于特定于上下文的標(biāo)志的位字段、一個該“解析”消息可以訪問的節(jié)點的最大數(shù)量、控制解析操作的操作代碼、一個要匹配的有效位的精度數(shù)、一個描述發(fā)起“解析”的原因的原因代碼、一個描述返回回應(yīng)的原因的結(jié)果代碼和一個事務(wù)標(biāo)識值。
59.如權(quán)利要求56所述的計算機(jī)可讀取媒介,其特征在于其中目標(biāo)PNRP標(biāo)識消息元素的載荷包含一個目標(biāo)同等點的同等點名稱的雜湊和一個源自某已廣告的服務(wù)地址的服務(wù)位置。
60.如權(quán)利要求56所述的計算機(jī)可讀取媒介,其特征在于其中最佳匹配CPA消息元素的載荷包含一個已編碼的CPA。
61.如權(quán)利要求56所述的計算機(jī)可讀取媒介,其特征在于其中IPV6端點數(shù)組消息元素的載荷包含一個數(shù)組中條目的數(shù)量、一個數(shù)組的總長度、一個對每個數(shù)組條目類型的標(biāo)識符、一個每個數(shù)組元素的長度和一個每個已訪問的或向之發(fā)送了“回應(yīng)”消息的節(jié)點的地址的數(shù)組。
62.一種計算機(jī)可讀取媒介,其上存儲用于對等名稱解析協(xié)議(PNRP)中的“懇求”消息數(shù)據(jù)結(jié)構(gòu),其特征在于包含第一個消息字段,具有一個PNRP頭部消息元素;第二個消息字段,具有一個源CPA消息元素;以及第三個消息字段,包含一個雜湊了的現(xiàn)時消息元素。
63.如權(quán)利要求61所述的計算機(jī)可讀取媒介,其特征在于其中每一個消息字段由一個包括一個字段標(biāo)識字段、一個長度字段和一個載荷的消息元素數(shù)據(jù)結(jié)構(gòu)構(gòu)成。
64.如權(quán)利要求62所述的計算機(jī)可讀取媒介,其特征在于其中源CPA消息元素的載荷包含一個已編碼的源CPA。
65.如權(quán)利要求62所述的計算機(jī)可讀取媒介,其特征在于其中雜湊了的現(xiàn)時消息元素的載荷包含一個已加密的現(xiàn)時值。
66.一種計算機(jī)可讀取媒介,其上存儲用于對等名稱解析協(xié)議(PNRP)中的“廣告”消息數(shù)據(jù)結(jié)構(gòu),其特征在于包含第一個消息字段,具有一個PNRP頭部消息元素;第二個消息字段,具有一個應(yīng)答的PNRP頭部消息元素;第三個消息字段,包含一個PNRP ID數(shù)組消息元素;以及第四個消息字段,包含一個雜湊了的現(xiàn)時消息元素。
67.如權(quán)利要求65所述的計算機(jī)可讀取媒介,其特征在于其中每一個消息字段由一個包括一個字段標(biāo)識字段、一個長度字段和一個載荷的消息元素數(shù)據(jù)結(jié)構(gòu)構(gòu)成。
68.如權(quán)利要求66所述的計算機(jī)可讀取媒介,其特征在于其中應(yīng)答的PNRP頭部消息元素的載荷包含一個所應(yīng)答的消息的消息標(biāo)識。
69.如權(quán)利要求66所述的計算機(jī)可讀取媒介,其特征在于其中PNRP ID數(shù)組消息元素的載荷包含一個PNRP ID數(shù)組中條目的數(shù)量、一個數(shù)組的總長度、一個對每個數(shù)組條目類型的標(biāo)識符、一個每個數(shù)組元素的長度和一個PNRPID的數(shù)組。
70.如權(quán)利要求66所述的計算機(jī)可讀取媒介,其特征在于其中雜湊了的現(xiàn)時消息元素的載荷包含一個已加密的現(xiàn)時值。
71.一種計算機(jī)可讀取媒介,其上存儲用于對等名稱解析協(xié)議(PNRP)中的“請求”消息數(shù)據(jù)結(jié)構(gòu),其特征在于包含第一個消息字段,具有一個PNRP頭部消息元素;第二個消息字段,具有一個現(xiàn)時消息元素;以及第三個消息字段,包含一個PNRP ID數(shù)組消息元素。
72.如權(quán)利要求70所述的計算機(jī)可讀取媒介,其特征在于其中每一個消息字段由一個包括一個字段標(biāo)識字段、一個長度字段和一個載荷的消息元素數(shù)據(jù)結(jié)構(gòu)構(gòu)成。
73.如權(quán)利要求71所述的計算機(jī)可讀取媒介,其特征在于其中現(xiàn)時消息元素的載荷包含一個已解密的現(xiàn)時值。
74.如權(quán)利要求71所述的計算機(jī)可讀取媒介,其特征在于其中PNRP ID數(shù)組消息元素的載荷包含一個PNRP ID數(shù)組中條目的數(shù)量、一個數(shù)組的總長度、一個對每個數(shù)組條目類型的標(biāo)識符、一個每個數(shù)組元素的長度和一個PNRPID的數(shù)組。
75.一種計算機(jī)可讀取媒介,其上存儲用于對等名稱解析協(xié)議(PNRP)中的“充溢”消息數(shù)據(jù)結(jié)構(gòu),其特征在于包含第一個消息字段,具有一個PNRP頭部消息元素;第二個消息字段,具有一個充溢控制消息元素;第三個消息字段,包含一個最佳匹配CPA消息元素;以及第四個消息字段,包含一個IPV6端點數(shù)組消息元素。
76.如權(quán)利要求74所述的計算機(jī)可讀取媒介,其特征在于其中每一個消息字段由一個包括一個字段標(biāo)識字段、一個長度字段和一個載荷的消息元素數(shù)據(jù)結(jié)構(gòu)構(gòu)成。
77.如權(quán)利要求75所述的計算機(jī)可讀取媒介,其特征在于其中充溢控制消息元素的載荷包含一個用于特定于上下文的標(biāo)志的位字段和一個描述發(fā)起“充溢”的原因的原因代碼。
78.如權(quán)利要求75所述的計算機(jī)可讀取媒介,其特征在于其中最佳匹配CPA消息元素的載荷包含一個已編碼的CPA。
79.如權(quán)利要求75所述的計算機(jī)可讀取媒介,其特征在于其中IPV6端點數(shù)組消息元素的載荷包含一個數(shù)組中條目的數(shù)量、一個數(shù)組的總長度、一個對每個數(shù)組條目類型的標(biāo)識符、一個每個數(shù)組元素的長度和一個每個已訪問的或向之發(fā)送了“回應(yīng)”消息的節(jié)點的地址的數(shù)組。
80.一種計算機(jī)可讀取媒介,其上存儲用于對等名稱解析協(xié)議(PNRP)中的“查詢”消息數(shù)據(jù)結(jié)構(gòu),其特征在于包含第一個消息字段,具有一個PNRP頭部消息元素;第二個消息字段,具有一個標(biāo)志字段消息元素;以及第三個消息字段,包含一個驗證PNRP標(biāo)識消息元素。
81.如權(quán)利要求79所述的計算機(jī)可讀取媒介,其特征在于其中每一個消息字段由一個包括一個字段標(biāo)識字段、一個長度字段和一個載荷的消息元素數(shù)據(jù)結(jié)構(gòu)構(gòu)成。
82.如權(quán)利要求80所述的計算機(jī)可讀取媒介,其特征在于其中標(biāo)志字段消息元素的載荷包含一個用于特定于上下文的標(biāo)志的位字段。
83.如權(quán)利要求80所述的計算機(jī)可讀取媒介,其特征在于其中驗證PNRP標(biāo)識消息元素的載荷包含一個對之請求驗證與授權(quán)的節(jié)點的同等點名稱的雜湊和一個源自某已廣告的對之請求驗證與授權(quán)的節(jié)點的服務(wù)地址的服務(wù)位置。
84.一種計算機(jī)可讀取媒介,其上存儲用于對等名稱解析協(xié)議(PNRP)中的“解析”消息數(shù)據(jù)結(jié)構(gòu),其特征在于包含第一個消息字段,具有一個PNRP頭部消息元素;第二個消息字段,具有一個應(yīng)答的PNRP頭部消息元素;第三個消息字段,包含一個分割控制消息元素;第四個消息字段,包含一個標(biāo)志字段消息元素;第五個消息字段,包含一個驗證PNRP ID消息元素;第六個消息字段,包含一個證書鏈消息元素;第七個消息字段,包含一個IPV6推舉地址消息元素;第八個消息字段,包含一個IPV6推舉標(biāo)識消息元素;以及第九個消息字段,包含一個分類符消息元素。
85.如權(quán)利要求83所述的計算機(jī)可讀取媒介,其特征在于其中每一個消息字段由一個包括一個字段標(biāo)識字段、一個長度字段和一個載荷的消息元素數(shù)據(jù)結(jié)構(gòu)構(gòu)成。
86.如權(quán)利要求84所述的計算機(jī)可讀取媒介,其特征在于其中應(yīng)答的PNRP頭部消息元素的載荷包含一個所應(yīng)答的消息的消息標(biāo)識。
87.如權(quán)利要求84所述的計算機(jī)可讀取媒介,其特征在于其中分割控制消息元素的載荷包含一個分段的大小和一個分段的偏移。
88.如權(quán)利要求84所述的計算機(jī)可讀取媒介,其特征在于其中標(biāo)志字段消息元素的載荷包含一個用于特定于上下文的標(biāo)志的合適字段。
89.如權(quán)利要求84所述的計算機(jī)可讀取媒介,其特征在于其中驗證PNRP標(biāo)識消息元素的載荷包含一個對之請求驗證與授權(quán)的節(jié)點的同等點名稱的雜湊和一個源自某已廣告的對之請求驗證與授權(quán)的節(jié)點的服務(wù)地址的服務(wù)位置。
90.如權(quán)利要求84所述的計算機(jī)可讀取媒介,其特征在于其中證書鏈消息元素的載荷包含一個已PKCS7編碼的證書儲備。
91.如權(quán)利要求84所述的計算機(jī)可讀取媒介,其特征在于其中IPV6推舉地址消息元素的載荷包含一個對某節(jié)點端點的路徑標(biāo)志、一個IP協(xié)議編號、一個IPV6端口和一個作為某備用節(jié)點地址的IPV6地址。
92.如權(quán)利要求84所述的計算機(jī)可讀取媒介,其特征在于其中IPV6推舉標(biāo)識消息元素的載荷包含一個同等點名稱的雜湊和一個所推舉的節(jié)點的服務(wù)位置。
93.如權(quán)利要求84所述的計算機(jī)可讀取媒介,其特征在于其中分類符消息元素的載荷包含一個用作同等點名稱的基礎(chǔ)的Unicode分類符字符串,編碼成一個WCHAR元素的數(shù)組,該數(shù)組包括一個地址數(shù)組中條目的數(shù)量、一個數(shù)組的總長度、一個對每個數(shù)組條目類型的標(biāo)識符、一個每個數(shù)組元素的長度和一個Unicode字符的數(shù)組。
94.一種計算機(jī)可讀取媒介,其上存儲用于對等名稱解析協(xié)議(PNRP)中的“應(yīng)答”消息數(shù)據(jù)結(jié)構(gòu),其特征在于包含第一個消息字段,具有一個PNRP頭部消息元素;以及第二個消息字段,具有一個應(yīng)答的PNRP頭部消息元素。
95.如權(quán)利要求93所述的計算機(jī)可讀取媒介,其特征在于其中每一個消息字段由一個包括一個字段標(biāo)識字段、一個長度字段和一個載荷的消息元素數(shù)據(jù)結(jié)構(gòu)構(gòu)成。
96.如權(quán)利要求94所述的計算機(jī)可讀取媒介,其特征在于其中應(yīng)答的PNRP頭部消息元素的載荷包含一個所應(yīng)答的消息的消息標(biāo)識。
97.一種計算機(jī)可讀取媒介,其上存儲用于對等名稱解析協(xié)議(PNRP)中的“修復(fù)”消息數(shù)據(jù)結(jié)構(gòu),其特征在于包含第一個消息字段,具有一個PNRP頭部消息元素;第二個消息字段,具有一個目標(biāo)PNRP標(biāo)識消息元素;第三個消息字段,包含一個緩存層消息元素;以及第四個消息字段,包含一個IPV6端點消息元素。
98.如權(quán)利要求96所述的計算機(jī)可讀取媒介,其特征在于其中每一個消息字段由一個包括一個字段標(biāo)識字段、一個長度字段和一個載荷的消息元素數(shù)據(jù)結(jié)構(gòu)構(gòu)成。
99.如權(quán)利要求97所述的計算機(jī)可讀取媒介,其特征在于其中目標(biāo)PNRP標(biāo)識消息元素的載荷包含一個目標(biāo)同等點的同等點名稱的雜湊和一個源自某已廣告的服務(wù)地址的服務(wù)位置。
100.如權(quán)利要求97所述的計算機(jī)可讀取媒介,其特征在于其中緩存層消息元素的載荷包含一個標(biāo)識在執(zhí)行修復(fù)時要使用哪個緩存層的緩存層編號。
全文摘要
呈現(xiàn)了一種用于一種對等名稱解析協(xié)議中的消息的可擴(kuò)展的數(shù)據(jù)結(jié)構(gòu)。這一消息數(shù)據(jù)結(jié)構(gòu)利用許多字段,每個字段都包含一個消息元素。較佳的是,第一個字段是消息頭,包括協(xié)議信息并標(biāo)識消息的類型。每個消息元素都包含許多字段。這些消息元素字段包括一個類型字段、一個長度字段和該消息元素的內(nèi)容或載荷。在某一實施例中,為恰當(dāng)運(yùn)行對等名稱解析協(xié)議(PNRP),至少要十個消息來構(gòu)成,包括“解析”、“回應(yīng)”、“懇求”、“廣告”、“請求”、“充溢”、“查詢”、“授權(quán)”、“應(yīng)答”和“修復(fù)”消息。
文檔編號H04L29/12GK1574840SQ200410048930
公開日2005年2月2日 申請日期2004年6月11日 優(yōu)先權(quán)日2003年6月13日
發(fā)明者J·L·米勒, H·拉瓦斯, R·塞米奧尼斯克, B·劉艾倫 申請人:微軟公司