專利名稱:點對點環(huán)境的草履蟲自組織和協(xié)作路由方法
技術(shù)領(lǐng)域:
點對點環(huán)境的草履蟲自組織和協(xié)作路由方法屬于計算機網(wǎng)絡(luò)技術(shù)領(lǐng)域。
背景技術(shù):
隨著計算機科學(xué)和技術(shù)的發(fā)展,個人計算機的性能正按照莫爾定律每隔十八個月翻一番的速度發(fā)展。與此同時,存儲和網(wǎng)絡(luò)的帶寬的發(fā)展速度超越了莫爾定律。現(xiàn)代個人計算機的能力已經(jīng)大大超過了20年前的超級計算機。有研究表明大多數(shù)時候個人PC的利用率不到10%。人類具有相互合作、分享的社會特性。在這種背景下,點對點(P2P)作為對客戶機/服務(wù)器服務(wù)模式的顛覆和一種全新的結(jié)構(gòu)模式應(yīng)運而生。
P2P強調(diào)的是對等服務(wù),不區(qū)分服務(wù)器和客戶端。每個節(jié)點在索取其他節(jié)點服務(wù)同時,也和其他節(jié)點相配合提供相同的服務(wù)。它是一種扁平而不是層次化的結(jié)構(gòu),每個參與節(jié)點的地位都相等。
P2P的思想最早體現(xiàn)在Napster系統(tǒng)中。它提供的服務(wù)允許音樂迷們自由交流MP3文件。Napster提供了一個軟件供音樂迷在自己的硬盤上共享歌曲文件,檢索位于Napster服務(wù)器上其他用戶共享的歌曲的索引,并到其它使用Napster服務(wù)的用戶硬盤上去下載歌曲的服務(wù)。
Gnutella和KazAa成為第二代P2P的代表。Gnutella和KazAa把共享的范圍拓展到所有的文件,包括電影、應(yīng)用程序等。Gnutella和KazAa沒有中央索引服務(wù)器,所有的文件都存在節(jié)點本地。他們的搜索采用廣度優(yōu)先或深度優(yōu)先的方法,配合適當(dāng)?shù)膯l(fā)式方法。系統(tǒng)中只存在“眾所周知”的入口節(jié)點,節(jié)點也可通過任何它所知道的在線節(jié)點加入系統(tǒng)中。每個節(jié)點維護(hù)一個它所知道的節(jié)點的IP的列表(稱為鄰居)。表中除了入口節(jié)點,其它項都是動態(tài)學(xué)習(xí)來的。這一代是非結(jié)構(gòu)化(unstructured)的P2P系統(tǒng)。
CAN、Chord、Pastry、Tapestry和SkipNet等協(xié)議的出現(xiàn)標(biāo)志著第三代P2P系統(tǒng)的萌芽。這些都是結(jié)構(gòu)化(structured)的系統(tǒng)。它們提出了NodeId、Key、對象和路由的概念。NodeId和Key是數(shù)字標(biāo)識,分別標(biāo)識節(jié)點和對象。對象代表存儲在系統(tǒng)中的數(shù)據(jù)。節(jié)點按照某種方式和其本身的NodeId組織成P2P系統(tǒng)。對象根據(jù)其Key和路由方法保存在適當(dāng)?shù)墓?jié)點上。這種結(jié)構(gòu)化帶來了負(fù)載平衡和可用來構(gòu)造永久存儲系統(tǒng)等特點。而隨著節(jié)點的離開導(dǎo)致共享的內(nèi)容不可用正是第一代和第二代P2P系統(tǒng)的致命缺點。這些系統(tǒng)通常稱為DHT(DistributedHash Table)。
DHT系統(tǒng)強調(diào)參與節(jié)點角色對等的同時忽略了網(wǎng)絡(luò)組織的結(jié)構(gòu)性?,F(xiàn)存的網(wǎng)絡(luò)是個層次化的transit-sub結(jié)構(gòu)。終端節(jié)點通過交換機或路由器實現(xiàn)局部互聯(lián),再由路由器連接到更大的網(wǎng)絡(luò)。同一個局域網(wǎng)內(nèi)互聯(lián)的速度較快,網(wǎng)間互連的速度則比較慢。在DHT的組織中,由于節(jié)點的ID近乎隨機產(chǎn)生,因此同一個子網(wǎng)內(nèi)的節(jié)點均勻分布在ID空間中。這樣雖然帶來了負(fù)載平衡和容錯的好處,但同時產(chǎn)生了一系列的問題1)一個節(jié)點的加入和離開會導(dǎo)致路由表中包含它的節(jié)點的路由表發(fā)生變化。這些節(jié)點在地理上分布在各地,并且連接的網(wǎng)絡(luò)速度較慢。如果加入和離開的速度較快,容易導(dǎo)致整個路由系統(tǒng)出現(xiàn)混亂。
2)在具體的特別是涉及到多個自治組織的應(yīng)用中,數(shù)據(jù)的放置位置一般有一定的要求,如必須放置在部門或組織內(nèi)。傳統(tǒng)的DHT經(jīng)過散列后地理的局部性被打亂了,節(jié)點和數(shù)據(jù)都是隨機分布,無法控制數(shù)據(jù)的放置。
針對點對點環(huán)境中的重點和難點,我們提出了自己的可行方案,實現(xiàn)了在快速變化點對點的環(huán)境中在沒有中央服務(wù)器的情況下實現(xiàn)可擴(kuò)展的參與節(jié)點的穩(wěn)定的自組織和協(xié)作路由,我們的方法可以很有效地實現(xiàn)。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種點對點環(huán)境中草履蟲自組織和協(xié)作路由方法,以便為實現(xiàn)點對點系統(tǒng)奠定基礎(chǔ)。
本發(fā)明的特征在于它是在傳統(tǒng)的TCP/IP協(xié)議點對點環(huán)境下,由草履蟲系統(tǒng)內(nèi)的各計算機按以下情況分別依次實現(xiàn)的,所述的草履蟲系統(tǒng)既可以是本地的草履蟲系統(tǒng),也可以是遠(yuǎn)程草履蟲系統(tǒng)設(shè)定對草履蟲系統(tǒng)內(nèi)的每個節(jié)點用無沖突且均勻分布的哈希的方法賦予一個160二進(jìn)制位的數(shù)字節(jié)點標(biāo)識-NodeId,形成首位為0,末位為2160-1且首尾相接的NodeID數(shù)字空間;對于節(jié)點中存儲的對象也用上述方法賦予一個160位二進(jìn)制位的數(shù)字鍵標(biāo)識-Key,形成首位為0,末位為2160-1且首尾相接的Key數(shù)字空間;再把NodeID數(shù)字空間分割成若干相互既不包含也不重疊,彼此銜接的細(xì)胞,每個細(xì)胞由二元組[左邊界,右邊界](可見左邊界和右邊界都是數(shù)字)來標(biāo)識,細(xì)胞的疆界的并集覆蓋整個NodeId空間;草履蟲向上層提供以下應(yīng)用程序接口,即APIJoin(BootNodeIP)通過在線的網(wǎng)絡(luò)地址為BootNodeIP的節(jié)點把一個本節(jié)點帶入系統(tǒng);Route(NodeID/Key)給定一個節(jié)點的NodeID或Key,在系統(tǒng)中查找另一個節(jié)點,這個節(jié)點所在的細(xì)胞包含這個給定的NodeID/Key并且這個節(jié)點的ID和這個給定的NodeID/Key的絕對值之差在這個細(xì)胞里的所有的節(jié)點中是最小的;每個節(jié)點有兩套路由表節(jié)點的細(xì)胞內(nèi)路由表包含所在細(xì)胞內(nèi)所有節(jié)點的NodeId和網(wǎng)絡(luò)地址(IP)節(jié)點的細(xì)胞間路由表由若干行組成,每行包括如下信息所要到達(dá)的細(xì)胞距離出行節(jié)點所在的細(xì)胞中心的距離、對于出行節(jié)點而言它的節(jié)點ID、節(jié)點IP和節(jié)點所在的細(xì)胞的疆界。其中,上述距離按照以下標(biāo)準(zhǔn)選取“出發(fā)節(jié)點所在細(xì)胞的半徑=|右邊界-左邊界|/2”,以“R=出發(fā)節(jié)點所在細(xì)胞的半徑+1”作為單位步長,分別依次選取如下項L0=R*20,L1=R*21,L2=R*22,…。Li=R*2I小于或等于數(shù)字空間長度的一半,即2160/2。
通過引入細(xì)胞結(jié)構(gòu),在快速變化點對點的環(huán)境中和在沒有中央服務(wù)器的情況下,所述可擴(kuò)展的參與節(jié)點的穩(wěn)定的自組織和協(xié)作路由以下5個過程按需求實現(xiàn)1.路由路由的方法很簡單。路由的目的是找到在包含給定的Key的細(xì)胞內(nèi)和給定的Key最靠近(兩者之差的絕對值最小)并且最靠近細(xì)胞左邊界的節(jié)點。如果給定的Key在本細(xì)胞內(nèi)則使用細(xì)胞內(nèi)路由表進(jìn)行路由。否則把路由請求發(fā)送到在細(xì)胞間路由表中距離目標(biāo)最近并且沒有超過目標(biāo)的細(xì)胞中的節(jié)點,即細(xì)胞的某邊疆界距離目標(biāo)最近,再由這個節(jié)點進(jìn)行中繼路由。詳細(xì)步驟如下[1]節(jié)點A在網(wǎng)絡(luò)上(TCP/IP協(xié)議)偵聽路由請求[2]節(jié)點A收到節(jié)點B的路由請求,假定給定的NodeID/Key為X[3]節(jié)點A根據(jù)自己的所在的細(xì)胞的疆域[B1,B2]判斷X是否在自己所在的細(xì)胞的疆域內(nèi),即B1<=X<=B2a)如果X在[B1,B2]范圍內(nèi),則A在細(xì)胞內(nèi)路由表中查找NodeID和X最接近的一個節(jié)點,把這個節(jié)點的IP和NodeID通過TCP/IP協(xié)議返回給請求路由的節(jié)點Bb)如果X不在[B1,B2]范圍內(nèi),則A過TCP/IP協(xié)議把路由請求發(fā)送到在細(xì)胞間路由表中NodeID和X最接近并且沒有超過X的細(xì)胞中的節(jié)點,假定為C,這個C進(jìn)行中繼路由。節(jié)點A等待C返回的結(jié)果,把結(jié)果通過TCP/IP協(xié)議返回給B;[4]節(jié)點A繼續(xù)偵聽路由請求2.路由表的維護(hù)細(xì)胞內(nèi)路由表使用廣播的方法來維護(hù)和發(fā)現(xiàn)存活節(jié)點信息。節(jié)點周期性地查詢與自己的細(xì)胞相距特定距離的細(xì)胞,更新自己的細(xì)胞間路由表。
細(xì)胞內(nèi)路由表的維護(hù)由4個獨立的子過程組成[1]每隔5分鐘,細(xì)胞內(nèi)路由表的維護(hù)程序?qū)?xì)胞內(nèi)路由表中的每一項對應(yīng)的節(jié)點通過TCP/IP協(xié)議發(fā)起連接請求。如果連接是失敗,則把這一項從細(xì)胞內(nèi)路由表中刪掉;[2]每隔15分鐘,細(xì)胞內(nèi)路由表的維護(hù)程序把自己的節(jié)點的細(xì)胞內(nèi)路由表通過TCP/IP協(xié)議發(fā)送給細(xì)胞內(nèi)路由表中的所有節(jié)點;[3]細(xì)胞內(nèi)陸由表程序從節(jié)點啟動開始就偵聽和接收其他節(jié)點發(fā)送來的它們的細(xì)胞內(nèi)路由表,據(jù)此更新自己的路由表依次取出接收到的細(xì)胞內(nèi)路由表中的每一項,如果這一項的NodeID不在自己的細(xì)胞內(nèi)路由表中,把這一項加入到自己的細(xì)胞內(nèi)路由表;假定節(jié)點的NodeID是X,它所在的細(xì)胞的疆域是[B1,B2],細(xì)胞間路由表的維護(hù)過程如下[1]每隔20分鐘啟動一次維護(hù)細(xì)胞間路由表的過程[2]令R=1+|B1-B2|/2;L0=R*20,L1=R*21,L2=R*22,…。其中Li=R*2I<=2160/2。
X依次路由Li,把路由的結(jié)果填入對應(yīng)的細(xì)胞間路由表。
3.加入草履蟲的一個關(guān)鍵設(shè)計就是在面臨節(jié)點加入和離開的情況下維護(hù)系統(tǒng)的結(jié)構(gòu)不變,即每個節(jié)點的路由表符合設(shè)定的要求。
節(jié)點加入過程[1]假定節(jié)點X,X的NodeID就是X,要加入系統(tǒng)。X通過其它方法知道一個節(jié)點A在系統(tǒng)中,[2]X用自己的NodeId---X---作為Key,請求A路由X,[3]A使用1中所述的路由方法路由X, X得到A路由X的結(jié)果,假定為節(jié)點D,[5]X通過TCP/IP協(xié)議取得D的細(xì)胞內(nèi)路由表和細(xì)胞間路由表,并把它們作為自己對應(yīng)的路由表,[6]X通過TCP/IP協(xié)議通知自己細(xì)胞內(nèi)路由表中的每個節(jié)點,自己加入這個信息,[7]接收到這個信息的節(jié)點把X加入到自己的細(xì)胞內(nèi)路由表中;4.分裂當(dāng)一個細(xì)胞中節(jié)點的個數(shù)超過預(yù)定閥值時,細(xì)胞內(nèi)的節(jié)點通過爭奪的方式由某個節(jié)點取得領(lǐng)導(dǎo)權(quán),發(fā)起分裂操作,分裂后兩個子細(xì)胞中節(jié)點的個數(shù)基本相等,過程如下[1]每個節(jié)點每隔30分鐘檢查一下自己細(xì)胞內(nèi)路由表中節(jié)點的數(shù)目。如果個數(shù)超過閥值,節(jié)點發(fā)起分裂操作,假定這個節(jié)點是X,[2]X向細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)出分裂請求,等待它們的回答,[3]收到分裂請求的節(jié)點,假定為Y,如果本身沒有發(fā)起分裂請求,則通過TCP/IP協(xié)議返回“同意”的回答,并且自身在30分鐘內(nèi)不發(fā)起分裂的請求,不然返回“拒絕”的回答,[4]X接收返回的回答。只要有一個“拒絕”的回答,X就放棄發(fā)起分裂操作的企圖,[5]經(jīng)過上述的1-4步,必然有一個節(jié)點勝出,取得分裂的領(lǐng)導(dǎo)權(quán),假定這個節(jié)點為Z,[6]Z所在的細(xì)胞的疆域是[B1,B2]。Z把[B1,B2]分成兩個相等的細(xì)胞S1和S2[B1,(B1+B2)/2],[1+(B1+B2)/2,B2]。假定Z現(xiàn)在屬于S1,即B1<=X<=(B1+B2)/2[7]Z向細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)送分裂的結(jié)果S1和S2[8]Z把自己的細(xì)胞內(nèi)路由表中不屬于S1的節(jié)點的對應(yīng)的項刪掉,[9]Z調(diào)用2中所述的細(xì)胞間路由表更新過程更新自己的細(xì)胞間路由表,[10]收到分裂結(jié)果的節(jié)點判斷自己屬于哪個細(xì)胞,假定為Si;把自己的細(xì)胞內(nèi)路由表中不屬于Si的節(jié)點的對應(yīng)的項刪掉;調(diào)用2中的細(xì)胞間路由表更新過程更新自己的細(xì)胞間路由表;5.融合當(dāng)一個細(xì)胞中節(jié)點的個數(shù)少于預(yù)定閥值時,細(xì)胞向左邊細(xì)胞和右邊細(xì)胞中節(jié)點個數(shù)較少的一個請求融合操作,它依次執(zhí)行一下步驟[1]每個節(jié)點每隔30分鐘檢查一下自己細(xì)胞內(nèi)路由表中節(jié)點的數(shù)目。如果個數(shù)少于閥值,節(jié)點發(fā)起融合操作。假定這個節(jié)點是X,[2]X向細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)出融合請求,等待它們的回答, 收到X融合請求的節(jié)點,假定為Y,如果本身沒有發(fā)起融合請求,則通過TCP/IP協(xié)議返回“同意”的回答,并且自身在30分鐘內(nèi)不發(fā)起融合的請求,不然返回“拒絕”的回答,[4]X接收返回的回答。只要有一個“拒絕”的回答,X就放棄發(fā)起融合操作的企圖,[5]X通過細(xì)胞間路由表的的第一項,即步長為L0=R*20的那項對應(yīng)的節(jié)點發(fā)出融合請求,假定這個節(jié)點是X’。X所在的細(xì)胞和X’所在的細(xì)胞必然是相鄰的,[6]X1向細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)出融合請求,等待它們的回答,[7]收到X1融合請求的節(jié)點(假定為Y)如果本身沒有發(fā)起融合請求,則通過TCP/IP協(xié)議返回“同意”的回答,并且自身在30分鐘內(nèi)不發(fā)起融合的請求,不然返回“拒絕”的回答。
X1接收返回的回答。只要有一個“拒絕”的回答,X1就向X返回“拒絕”的回答,否則返回“同意”的回答,[9]X接收X1返回的回答。如果是“拒絕”的回答,X就放棄發(fā)起融合操作的企圖。
經(jīng)過上述的1-10步,必然有一個節(jié)點勝出,取得融合的領(lǐng)導(dǎo)權(quán)。假定X2勝出。
X2所在的細(xì)胞的疆域是[B1,B2],X1的則是[B2+1,B3](注意,它們必定相鄰)。X2把它們合并成[B1,B3]。
X2通過TCP/IP協(xié)議向X1索取它的細(xì)胞內(nèi)路由表,并把所取到的細(xì)胞內(nèi)路由表的表項加入到自己的細(xì)胞內(nèi)路由表中,[13]X2向自己新的細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)送融合的結(jié)果[B1,B3]和自己新的細(xì)胞內(nèi)路由表,[14]X2調(diào)用2中所述的細(xì)胞間路由表更新過程更新自己的細(xì)胞間路由表,[15]收到融合結(jié)果的節(jié)點用收到的細(xì)胞內(nèi)路由表替換自己的細(xì)胞內(nèi)路由表;調(diào)用2中所述的細(xì)胞間路由表更新過程更新自己的細(xì)胞間路由表。
實驗證明測試所使用的機器IBM T40 14UPentium M 1.3G,256M內(nèi)存;Windows XP with servicepack 1所有的讀寫都是串行的。為了避免java的JIT帶來的問題,所有的實驗都先讀寫3次進(jìn)行預(yù)熱,過了1分鐘后再進(jìn)行測試。結(jié)果取3次的平均值。測試用的數(shù)據(jù)包共1024個。每個數(shù)據(jù)包的Key隨機生成,隨機選擇一個節(jié)點作為發(fā)起節(jié)點,通過它將數(shù)據(jù)包插入系統(tǒng)。寫完1024個數(shù)據(jù)包后隨機選擇不同的節(jié)點讀出這些數(shù)據(jù)包,即先路由再寫和讀。從實驗的數(shù)據(jù)圖(圖5)可以看到,無論讀還是寫,路由是正確的,速度達(dá)到了設(shè)計的要求。
圖1路由過程的程序流程執(zhí)行2節(jié)點加入過程的程序流程執(zhí)行3分裂過程的程序流程執(zhí)行4融合過程的程序流程執(zhí)行532和64節(jié)點的路由性能具體實施方式
草履蟲的每個節(jié)點被賦予一個16二進(jìn)制位的數(shù)字節(jié)點標(biāo)識-NodeId。每個要存儲的對象(可以是任何數(shù)據(jù)文件、數(shù)字等)也有一個160位的數(shù)字鍵標(biāo)識-Key。NodeID和Key是同一個概念,但標(biāo)識不同的對象。NodeId空間和Key空間是同一個數(shù)字空間,并且都首尾相接(0和2160-1)形成一個環(huán)。NodeId和Key可以用無沖突且均勻分布的哈希的方法產(chǎn)生,例如安全哈希算法(SHA-1)。草履蟲提出細(xì)胞的概念。每個細(xì)胞由二元組[左邊界,右邊界]來標(biāo)識,稱為細(xì)胞的疆界。例如如果ID為6位二進(jìn)制長,[111000,111100]、和[110000,001000]都是細(xì)胞標(biāo)識的例子。細(xì)胞相互不包含和不重疊;細(xì)胞的疆界的并集覆蓋整個NodeId空間。給定一個Key,草履蟲可以高效分布式地找到這樣一個節(jié)點這個節(jié)點的所在的細(xì)胞包含這個Key,并且這個節(jié)點的NodeId和這個Key最接近。
草履蟲向上層提供以下APIJoin(BootNodeIP)通過在線的BootNode將本節(jié)點帶入系統(tǒng)Route(NodeID/Key)給定一個節(jié)點的NodeID或Key,在系統(tǒng)中查找一個節(jié)點,這個節(jié)點所在的細(xì)胞包含這個給定的NodeID并且這個節(jié)點的ID和這個給定的ID的絕對值之差在這個細(xì)胞里的所有的節(jié)點中是最小的。
每個節(jié)點有兩套路由表細(xì)胞內(nèi)路由表和細(xì)胞間路由表。節(jié)點的細(xì)胞內(nèi)路由表包含所在細(xì)胞內(nèi)所有節(jié)點的NodeId和網(wǎng)絡(luò)地址(IP)。因此節(jié)點在細(xì)胞內(nèi)部是全連接的。節(jié)點的細(xì)胞間路由表由若干行組成,每行包括如下信息距離本細(xì)胞的中心的距離、節(jié)點ID、節(jié)點IP和節(jié)點所在的細(xì)胞的疆界。距離本細(xì)胞中心的距離按照以下標(biāo)準(zhǔn)選取“出發(fā)節(jié)點所在細(xì)胞的半徑=|右邊界一左邊界|/2”,以“R=(出發(fā)節(jié)點所在細(xì)胞的半徑+1)”作為單位步長,分別依次選取如下項L0=R*20,L1=R*21,L2=R*22,…,Li=R*2I小于或等于數(shù)字空間長度的一半,即2160/2。這種組織方法使得每個節(jié)點的路由表都很小,并且具有良好的可擴(kuò)展性。
1.路由路由的方法很簡單。路由的目的是找到在包含給定的Key的細(xì)胞內(nèi)和給定的Key最靠近(兩者之差的絕對值最小)并且最靠近細(xì)胞左邊界的節(jié)點。如果給定的Key在本細(xì)胞內(nèi)則使用細(xì)胞內(nèi)路由表進(jìn)行路由。否則把路由請求發(fā)送到在細(xì)胞間路由表中距離目標(biāo)最近并且沒有超過目標(biāo)的細(xì)胞中的節(jié)點,即細(xì)胞的某邊疆界距離目標(biāo)最近,再由這個節(jié)點進(jìn)行中繼路由。詳細(xì)步驟如下(錯誤!未找到引用源。)[1]節(jié)點A在網(wǎng)絡(luò)上(TCP/IP協(xié)議)偵聽路由請求[2]節(jié)點A收到節(jié)點B的路由請求,假定為X[3]節(jié)點A根據(jù)自己的所在的細(xì)胞的疆域[B1,B2]判斷X是否在自己所在的細(xì)胞的疆域內(nèi),即B1<=X<=B2a)如果X在[B1,B2]范圍內(nèi),則A在細(xì)胞內(nèi)路由表中查找NodeID和X最接近的一個節(jié)點,把這個節(jié)點的IP和NodeID通過TCP/IP協(xié)議返回給請求路由的節(jié)點Bb)如果X不在[B1,B2]范圍內(nèi),則A過TCP/IP協(xié)議把路由請求發(fā)送到在細(xì)胞間路由表中NodeID和X最接近并且沒有超過X的細(xì)胞中的節(jié)點(假定為C),這個C行中繼路由。節(jié)點A等待C返回的結(jié)果,把結(jié)果通過TCP/IP協(xié)議返回給B[4]節(jié)點A繼續(xù)偵聽路由請求2.路由表的維護(hù)細(xì)胞內(nèi)路由表使用廣播的方法來維護(hù)和發(fā)現(xiàn)存活節(jié)點信息。節(jié)點周期性地查詢與自己的細(xì)胞相距特定距離的細(xì)胞,更新自己的細(xì)胞間路由表,維護(hù)和提高路由的性能。
細(xì)胞內(nèi)路由表的維護(hù)由4個獨立的子過程組成[1]每隔5分鐘,細(xì)胞內(nèi)路由表的維護(hù)程序?qū)?xì)胞內(nèi)路由表中的每一項對應(yīng)的節(jié)點通過TCP/IP協(xié)議發(fā)起連接請求。如果連接是失敗,則把這一項從細(xì)胞內(nèi)路由表中刪掉;[2]每隔15分鐘,細(xì)胞內(nèi)路由表的維護(hù)程序把自己的節(jié)點的細(xì)胞內(nèi)路由表通過TCP/IP協(xié)議發(fā)送給細(xì)胞內(nèi)路由表中的所有節(jié)點;[3]細(xì)胞內(nèi)陸由表程序從節(jié)點啟動開始就偵聽和接收其他節(jié)點發(fā)送來的它們的細(xì)胞內(nèi)路由表,據(jù)此更新自己的路由表依次取出接收到的細(xì)胞內(nèi)路由表中的每一項,如果這一項的NodeID不在自己的細(xì)胞內(nèi)路由表中,把這一項加入到自己的細(xì)胞內(nèi)路由表;
假定節(jié)點的NodeID是X,它所在的細(xì)胞的疆域是[B1,B2],細(xì)胞間路由表的維護(hù)過程如下[1]每隔20分鐘啟動一次維護(hù)細(xì)胞間路由表的過程[2]令R=1+|B1-B2|/2;L0=R*20,L1=R*21,L2=R*22,…。其中Li=R*2I<=2160/2。
X依次路由Li,把路由的結(jié)果填入對應(yīng)的細(xì)胞間路由表。
3.加入草履蟲的一個關(guān)鍵設(shè)計就是在面臨節(jié)點加入和離開的情況下維護(hù)系統(tǒng)的結(jié)構(gòu)不變,即每個節(jié)點的路由表符合設(shè)定的要求。
節(jié)點加入過程很簡單(錯誤!未找到引用源。)[1]假定節(jié)點X,X的NodeID就是X,要加入系統(tǒng)。X通過其它方法知道一個節(jié)點A在系統(tǒng)中,[2]X用自己的NodeId---X---作為Key,請求A路由X,[3]A使用1中所述的路由方法路由X,[4]X得到A路由X的結(jié)果,假定為節(jié)點D,[5]X通過TCP/IP協(xié)議取得D的細(xì)胞內(nèi)路由表和細(xì)胞間路由表,并把它們作為自己對應(yīng)的路由表,[6]X通過TCP/IP協(xié)議通知自己細(xì)胞內(nèi)路由表中的每個節(jié)點,自己加入這個信息,[7]接收到這個信息的節(jié)點把X加入到自己的細(xì)胞內(nèi)路由表中;4.分裂當(dāng)一個細(xì)胞中節(jié)點的個數(shù)超過預(yù)定閥值時,細(xì)胞內(nèi)的節(jié)點通過爭奪的方式由某個節(jié)點取得領(lǐng)導(dǎo)權(quán),發(fā)起分裂操作,分裂后兩個子細(xì)胞中節(jié)點的個數(shù)基本相等,過程如下[1]每個節(jié)點每隔30分鐘檢查一下自己細(xì)胞內(nèi)路由表中節(jié)點的數(shù)目。如果個數(shù)超過閥值,節(jié)點發(fā)起分裂操作,假定這個節(jié)點是X,[2]X向細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)出分裂請求,等待它們的回答,[3]收到分裂請求的節(jié)點,假定為Y,如果本身沒有發(fā)起分裂請求,則通過TCP/IP協(xié)議返回“同意”的回答,并且自身在30分鐘內(nèi)不發(fā)起分裂的請求,不然返回“拒絕”的回答,[4]X接收返回的回答。只要有一個“拒絕”的回答,X就放棄發(fā)起分裂操作的企圖,[5]經(jīng)過上述的1-4步,必然有一個節(jié)點勝出,取得分裂的領(lǐng)導(dǎo)權(quán),假定這個節(jié)點為Z,[6]Z所在的細(xì)胞的疆域是[B1,B2]。Z把[B1,B2]分成兩個相等的細(xì)胞S1和S2[B1,(B1+B2)/2],[1+(B1+B2)/2,B2]。假定Z現(xiàn)在屬于S1,即B1<=X<=(B1+B2)/2,例如假定Z所在的細(xì)胞是[10,100],那么B1=10,B2=100,(B1+B2)/2=55,那么S1和S2分別是[10,55],[56,100][7]Z向細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)送分裂的結(jié)果S1和S2[8]Z把自己的細(xì)胞內(nèi)路由表中不屬于S1的節(jié)點的對應(yīng)的項刪掉,[9]Z調(diào)用2中所述的細(xì)胞間路由表更新過程更新自己的細(xì)胞間路由表,[10]收到分裂結(jié)果的節(jié)點判斷自己屬于哪個細(xì)胞,假定為Si;把自己的細(xì)胞內(nèi)路由表中不屬于Si的節(jié)點的對應(yīng)的項刪掉;調(diào)用2中的細(xì)胞間路由表更新過程更新自己的細(xì)胞間路由表;5.融合當(dāng)一個細(xì)胞中節(jié)點的個數(shù)少于預(yù)定閥值時,細(xì)胞向左邊細(xì)胞和右邊細(xì)胞中節(jié)點個數(shù)較少的一個請求融合操作,它依次執(zhí)行一下步驟[1]每個節(jié)點每隔30分鐘檢查一下自己細(xì)胞內(nèi)路由表中節(jié)點的數(shù)目。如果個數(shù)少于閥值,節(jié)點發(fā)起融合操作。假定這個節(jié)點是X,[2]X向細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)出融合請求,等待它們的回答,[3]收到X融合請求的節(jié)點,假定為Y,如果本身沒有發(fā)起融合請求,則通過TCP/IP協(xié)議返回“同意”的回答,并且自身在30分鐘內(nèi)不發(fā)起融合的請求,不然返回“拒絕”的回答,[4]X接收返回的回答。只要有一個“拒絕”的回答,X就放棄發(fā)起融合操作的企圖,[5]X通過細(xì)胞間路由表的的第一項,即步長為L0=R*20的那項對應(yīng)的節(jié)點發(fā)出融合請求,假定這個節(jié)點是X’。X所在的細(xì)胞和X’所在的細(xì)胞必然是相鄰的,[6]X1向細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)出融合請求,等待它們的回答,[7]收到X1融合請求的節(jié)點(假定為Y)如果本身沒有發(fā)起融合請求,則通過TCP/IP協(xié)議返回“同意”的回答,并且自身在30分鐘內(nèi)不發(fā)起融合的請求,不然返回“拒絕”的回答。
X1接收返回的回答。只要有一個“拒絕”的回答,X1就向X返回“拒絕”的回答,否則返回“同意”的回答,[9]X接收X1返回的回答。如果是“拒絕”的回答,X就放棄發(fā)起融合操作的企圖。
經(jīng)過上述的1-10步,必然有一個節(jié)點勝出,取得融合的領(lǐng)導(dǎo)權(quán)。假定X2勝出。
X2所在的細(xì)胞的疆域是[B1,B2],X1的則是[B2+1,B3](注意,它們必定相鄰)。X2把它們合并成[B1,B3],例如假定X2所在的細(xì)胞是[10,50],X1所在的細(xì)胞是[51,90],那么合并后的細(xì)胞是[10,90][12]X2通過TCP/IP協(xié)議向X1索取它的細(xì)胞內(nèi)路由表,并把所取到的細(xì)胞內(nèi)路由表的表項加入到自己的細(xì)胞內(nèi)路由表中,[13]X2向自己新的細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)送融合的結(jié)果[B1,B3]和自己新的細(xì)胞內(nèi)路由表,[14]X2調(diào)用2中所述的細(xì)胞間路由表更新過程更新自己的細(xì)胞間路由表,[15]收到融合結(jié)果的節(jié)點用收到的細(xì)胞內(nèi)路由表替換自己的細(xì)胞內(nèi)路由表;調(diào)用2中所述的細(xì)胞間路由表更新過程更新自己的細(xì)胞間路由表。
草履蟲在高度變化的環(huán)境下能維護(hù)系統(tǒng)的正確結(jié)構(gòu)和執(zhí)行高效的分布式路由。草履蟲的所有操作對上層點對點應(yīng)用都是透明的。給定一個標(biāo)識,草履蟲能高效地找到對它負(fù)責(zé)的節(jié)點。上層應(yīng)用可以把它看成一個執(zhí)行簡單的插入與查找的本地的哈希表。
需要的硬件環(huán)境CPU 500MHZ或以上、內(nèi)存64M。
需要的軟件環(huán)境支持JDK1.4的操作系統(tǒng)、Java1.4運行時環(huán)境。
作為一個本地草履蟲系統(tǒng),對于其中每一個節(jié)點設(shè)有以下接口[1]Paramecium(NetworkAdapternetworkAdapter,IDid) //創(chuàng)建一個草履蟲實例[2]boolean boot() //引導(dǎo)一個獨立的草履蟲系統(tǒng)[3]boolean join(AddressbootAddress) //加入一個已有的的草履蟲系統(tǒng)[4]quit() //退出系統(tǒng)[5]NodelightRoute(IDid,CellBoundaryconstraint,java.util.Vector path,int ttl,int tries) //對給定的id、限定范圍constrain、最大距離ttl和嘗試次數(shù)tries進(jìn)行輕量路由,返回目標(biāo)節(jié)點和路徑path[6]Noderoute(IDid,CellBoundaryconstraint,java.util.Vector path,int ttl,int tries) //對給定的id、限定范圍constrain、最大距離ttl和嘗試次數(shù)tries進(jìn)行正常路由,返回目標(biāo)節(jié)點和路徑path[7]int checkCell() //檢查所在細(xì)胞,進(jìn)行分裂和融合等操作[8]void ackRouteRequest() //響應(yīng)其它節(jié)點的路由請求[9]void updateOuterRoutingTable() //更新細(xì)胞間路由表[10]void updateLocalsParallelly() //更新細(xì)胞內(nèi)路由表一個例子代碼樣例如下<pre listing-type="program-listing">//假定某個節(jié)點啟動一個新的草履蟲系統(tǒng)<dp n="d11"/>public class Boot{public void main(String[]args){//假定本機地址是10.0.0.05,端口是05//構(gòu)建本節(jié)點的網(wǎng)絡(luò)地址Address bootAddress=new Address(″10.0.0.05″,05);//構(gòu)建本節(jié)點的網(wǎng)絡(luò)UDPNetwork network=new UDPNetwork();//初始化網(wǎng)絡(luò)network.init(bootAddress);//ID是05,構(gòu)建本草履蟲節(jié)點Paramecium bootNode=new Paramecium(network,new ID(05));//引導(dǎo)一個新的草履蟲系統(tǒng)bootNode.boot();}}//其它節(jié)點加入系統(tǒng)public class Join{public void main(String[]args){//已有系統(tǒng)的入口//構(gòu)建在線的引導(dǎo)節(jié)點的網(wǎng)絡(luò)地址Address bootAddress=new Address(″10.0.0.05″,05);//假定本機地址是10.0.0.X,端口是Y//構(gòu)建本節(jié)點的網(wǎng)絡(luò)地址Address address=new Address(″10.0.0.X″,Y);//構(gòu)建本節(jié)點的網(wǎng)絡(luò)UDPNetwork network=new UDPNetwork();//初始化網(wǎng)絡(luò)network.init(address);//ID是Y<dp n="d12"/>Paramecium joinNode=new Paramecium(network,new ID(Y));//通過在線的引導(dǎo)節(jié)點加入joinNode.join(bootAddress);//NO2查找18的片斷代碼//joinNode.lookup(18,null);//其它節(jié)點通過void ackRouteRequest()響應(yīng)路由請求}}</pre>
權(quán)利要求
1.點對點環(huán)境的草履蟲自組織和協(xié)作路由方法,其特征在于它是在傳統(tǒng)的TCP/IP協(xié)議點對點環(huán)境下,由草履蟲系統(tǒng)內(nèi)的各計算機按以下情況分別依次實現(xiàn)的,所述的草履蟲系統(tǒng)既可以是本地的草履蟲系統(tǒng),也可以是遠(yuǎn)程草履蟲系統(tǒng)設(shè)定對草履蟲系統(tǒng)內(nèi)的每個節(jié)點用無沖突且均勻分布的哈希的方法賦予一個160二進(jìn)制位的數(shù)字節(jié)點標(biāo)識-NodeId,形成首位為0,末位為2160-1且首尾相接的NodeID數(shù)字空間;對于節(jié)點中存儲的對象也用上述方法賦予一個160位二進(jìn)制位的數(shù)字鍵標(biāo)識-Key,形成首位為0,末位為2160-1且首尾相接的Key數(shù)字空間;再把NodeID數(shù)字空間分割成若干相互既不包含也不重疊,彼此銜接的細(xì)胞,每個細(xì)胞由二元組[左邊界,右邊界](可見左邊界和右邊界都是數(shù)字)來標(biāo)識,細(xì)胞的疆界的并集覆蓋整個NodeId空間;草履蟲向上層提供以下應(yīng)用程序接口,即APIJoin(BootNodeIP)通過在線的網(wǎng)絡(luò)地址為BootNodeIP的節(jié)點把一個本節(jié)點帶入系統(tǒng);Route(NodeID/Key)給定一個節(jié)點的NodeID或Key,在系統(tǒng)中查找另一個節(jié)點,這個節(jié)點所在的細(xì)胞包含這個給定的NodeID/Key并且這個節(jié)點的ID和這個給定的NodeID/Key的絕對值之差在這個細(xì)胞里的所有的節(jié)點中是最小的;每個節(jié)點有兩套路由表節(jié)點的細(xì)胞內(nèi)路由表包含所在細(xì)胞內(nèi)所有節(jié)點的NodeId和網(wǎng)絡(luò)地址(IP)節(jié)點的細(xì)胞間路由表由若干行組成,每行包括如下信息所要到達(dá)的細(xì)胞距離出行節(jié)點所在的細(xì)胞中心的距離、對于出行節(jié)點而言它的節(jié)點ID、節(jié)點IP和節(jié)點所在的細(xì)胞的疆界,其中,上述距離按照以下標(biāo)準(zhǔn)選取“出發(fā)節(jié)點所在細(xì)胞的半徑=|右邊界-左邊界|/2”,以“R=(出發(fā)節(jié)點所在細(xì)胞的半徑+1)”作為單位步長,分別依次選取如下項L0=R*20,L1=R*21,L2=R*22,…,Li=R*2I小于或等于數(shù)字空間長度的一半,即2160/2;通過引入細(xì)胞結(jié)構(gòu),在快速變化點對點的環(huán)境中和在沒有中央服務(wù)器的情況下,所述可擴(kuò)展的參與節(jié)點的穩(wěn)定的自組織和協(xié)作路由以下5個過程按需求實現(xiàn)1.路由路由的方法很簡單。路由的目的是找到在包含給定的Key的細(xì)胞內(nèi)和給定的Key最靠近(兩者之差的絕對值最小)并且最靠近細(xì)胞左邊界的節(jié)點。如果給定的Key在本細(xì)胞內(nèi)則使用細(xì)胞內(nèi)路由表進(jìn)行路由。否則把路由請求發(fā)送到在細(xì)胞間路由表中距離目標(biāo)最近并且沒有超過目標(biāo)的細(xì)胞中的節(jié)點,即細(xì)胞的某邊疆界距離目標(biāo)最近,再由這個節(jié)點進(jìn)行中繼路由。詳細(xì)步驟如下;[1]節(jié)點A在網(wǎng)絡(luò)上(TCP/IP協(xié)議)偵聽路由請求,[2]節(jié)點A收到節(jié)點B的路由請求,假定給定的NodeID/Key為X,[3]節(jié)點A根據(jù)自己的所在的細(xì)胞的疆域[B1,B2]判斷X是否在自己所在的細(xì)胞的疆域內(nèi),即B1<=X<=B2a)如果X在[B1,B2]范圍內(nèi),則A在細(xì)胞內(nèi)路由表中查找NodeID和X最接近的一個節(jié)點,把這個節(jié)點的IP和NodeID通過TCP/IP協(xié)議返回給請求路由的節(jié)點Bb)如果X不在[B1,B2]范圍內(nèi),則A過TCP/IP協(xié)議把路由請求發(fā)送到在細(xì)胞間路由表中NodeID和X最接近并且沒有超過X的細(xì)胞中的節(jié)點,假定為C,這個C進(jìn)行中繼路由。節(jié)點A等待C返回的結(jié)果,把結(jié)果通過TCP/IP協(xié)議返回給B;[4]節(jié)點A繼續(xù)偵聽路由請求2.路由表的維護(hù)細(xì)胞內(nèi)路由表使用廣播的方法來維護(hù)和發(fā)現(xiàn)存活節(jié)點信息。節(jié)點周期性地查詢與自己的細(xì)胞相距特定距離的細(xì)胞,更新自己的細(xì)胞間路由表。細(xì)胞內(nèi)路由表的維護(hù)由4個獨立的子過程組成[1]每隔5分鐘,細(xì)胞內(nèi)路由表的維護(hù)程序?qū)?xì)胞內(nèi)路由表中的每一項對應(yīng)的節(jié)點通過TCP/IP協(xié)議發(fā)起連接請求。如果連接是失敗,則把這一項從細(xì)胞內(nèi)路由表中刪掉;[2]每隔15分鐘,細(xì)胞內(nèi)路由表的維護(hù)程序把自己的節(jié)點的細(xì)胞內(nèi)路由表通過TCP/IP協(xié)議發(fā)送給細(xì)胞內(nèi)路由表中的所有節(jié)點;[3]細(xì)胞內(nèi)陸由表程序從節(jié)點啟動開始就偵聽和接收其他節(jié)點發(fā)送來的它們的細(xì)胞內(nèi)路由表,據(jù)此更新自己的路由表依次取出接收到的細(xì)胞內(nèi)路由表中的每一項,如果這一項的NodeID不在自己的細(xì)胞內(nèi)路由表中,把這一項加入到自己的細(xì)胞內(nèi)路由表;假定節(jié)點的NodeID是X,它所在的細(xì)胞的疆域是[B1,B2],細(xì)胞間路由表的維護(hù)過程如下[1]每隔20分鐘啟動一次維護(hù)細(xì)胞間路由表的過程[2]令R=1+|B1-B2|/2;L0=R*20,L1=R*21,L2=R*22,…。其中Li=R*2I<=2160/2。[3]X依次路由Li,把路由的結(jié)果填入對應(yīng)的細(xì)胞間路由表。3.加入草履蟲的一個關(guān)鍵設(shè)計就是在面臨節(jié)點加入和離開的情況下維護(hù)系統(tǒng)的結(jié)構(gòu)不變,即每個節(jié)點的路由表符合設(shè)定的要求。節(jié)點加入過程[1]假定節(jié)點X,X的NodeID就是X,要加入系統(tǒng)。X通過其它方法知道一個節(jié)點A在系統(tǒng)中,[2]X用自己的NodeId---X---作為Key,請求A路由X,[3]A使用1中所述的路由方法路由X,[4]X得到A路由X的結(jié)果,假定為節(jié)點D,[5]X通過TCP/IP協(xié)議取得D的細(xì)胞內(nèi)路由表和細(xì)胞間路由表,并把它們作為自己對應(yīng)的路由表,[6]X通過TCP/IP協(xié)議通知自己細(xì)胞內(nèi)路由表中的每個節(jié)點,自己加入這個信息,[7]接收到這個信息的節(jié)點把X加入到自己的細(xì)胞內(nèi)路由表中;4.分裂當(dāng)一個細(xì)胞中節(jié)點的個數(shù)超過預(yù)定閥值時,細(xì)胞內(nèi)的節(jié)點通過爭奪的方式由某個節(jié)點取得領(lǐng)導(dǎo)權(quán),發(fā)起分裂操作,分裂后兩個子細(xì)胞中節(jié)點的個數(shù)基本相等,過程如下[1]每個節(jié)點每隔30分鐘檢查一下自己細(xì)胞內(nèi)路由表中節(jié)點的數(shù)目。如果個數(shù)超過閥值,節(jié)點發(fā)起分裂操作,假定這個節(jié)點是X,[2]X向細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)出分裂請求,等待它們的回答,[3]收到分裂請求的節(jié)點,假定為Y,如果本身沒有發(fā)起分裂請求,則通過TCP/IP協(xié)議返回“同意”的回答,并且自身在30分鐘內(nèi)不發(fā)起分裂的請求,不然返回“拒絕”的回答,[4]X接收返回的回答。只要有一個“拒絕”的回答,X就放棄發(fā)起分裂操作的企圖,[5]經(jīng)過上述的1-4步,必然有一個節(jié)點勝出,取得分裂的領(lǐng)導(dǎo)權(quán),假定這個節(jié)點為Z,[6]Z所在的細(xì)胞的疆域是[B1,B2]。Z把[B1,B2]分成兩個相等的細(xì)胞S1和S2[B1,(B1+B2)/2],[1+(B1+B2)/2,B2]。假定Z現(xiàn)在屬于S1,即B1<=X<=(B1+B2)/2[7]Z向細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)送分裂的結(jié)果S1和S2[8]Z把自己的細(xì)胞內(nèi)路由表中不屬于S1的節(jié)點的對應(yīng)的項刪掉,[9]Z調(diào)用2中所述的細(xì)胞間路由表更新過程更新自己的細(xì)胞間路由表,[10]收到分裂結(jié)果的節(jié)點判斷自己屬于哪個細(xì)胞,假定為Si;把自己的細(xì)胞內(nèi)路由表中不屬于Si的節(jié)點的對應(yīng)的項刪掉;調(diào)用2中的細(xì)胞間路由表更新過程更新自己的細(xì)胞間路由表;5.融合當(dāng)一個細(xì)胞中節(jié)點的個數(shù)少于預(yù)定閥值時,細(xì)胞向左邊細(xì)胞和右邊細(xì)胞中節(jié)點個數(shù)較少的一個請求融合操作,它依次執(zhí)行一下步驟[1]每個節(jié)點每隔30分鐘檢查一下自己細(xì)胞內(nèi)路由表中節(jié)點的數(shù)目。如果個數(shù)少于閥值,節(jié)點發(fā)起融合操作。假定這個節(jié)點是X,[2]X向細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)出融合請求,等待它們的回答,[3]收到X融合請求的節(jié)點,假定為Y,如果本身沒有發(fā)起融合請求,則通過TCP/IP協(xié)議返回“同意”的回答,并且自身在30分鐘內(nèi)不發(fā)起融合的請求,不然返回“拒絕”的回答,[4]X接收返回的回答。只要有一個“拒絕”的回答,X就放棄發(fā)起融合操作的企圖,[5]X通過細(xì)胞間路由表的的第一項,即步長為L0=R*20的那項對應(yīng)的節(jié)點發(fā)出融合請求,假定這個節(jié)點是X’。X所在的細(xì)胞和X’所在的細(xì)胞必然是相鄰的,[6]X1向細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)出融合請求,等待它們的回答,[7]收到X1融合請求的節(jié)點(假定為Y)如果本身沒有發(fā)起融合請求,則通過TCP/IP協(xié)議返回“同意”的回答,并且自身在30分鐘內(nèi)不發(fā)起融合的請求,不然返回“拒絕”的回答。[8]X1接收返回的回答。只要有一個“拒絕”的回答,X1就向X返回“拒絕”的回答,否則返回“同意”的回答,[9]X接收X1返回的回答。如果是“拒絕”的回答,X就放棄發(fā)起融合操作的企圖。[10]經(jīng)過上述的1-10步,必然有一個節(jié)點勝出,取得融合的領(lǐng)導(dǎo)權(quán)。假定X2勝出。[11]X2所在的細(xì)胞的疆域是[B1,B2],X1的則是[B2+1,B3](注意,它們必定相鄰)。X2把它們合并成[B1,B3]。[12]X2通過TCP/IP協(xié)議向X1索取它的細(xì)胞內(nèi)路由表,并把所取到的細(xì)胞內(nèi)路由表的表項加入到自己的細(xì)胞內(nèi)路由表中,[13]X2向自己新的細(xì)胞內(nèi)路由表中的每個節(jié)點通過TCP/IP協(xié)議發(fā)送融合的結(jié)果[B1,B3]和自己新的細(xì)胞內(nèi)路由表,[14]X2調(diào)用2中所述的細(xì)胞間路由表更新過程更新自己的細(xì)胞間路由表,[15]收到融合結(jié)果的節(jié)點用收到的細(xì)胞內(nèi)路由表替換自己的細(xì)胞內(nèi)路由表;調(diào)用2中所述的細(xì)胞間路由表更新過程更新自己的細(xì)胞間路由表。
全文摘要
點對點環(huán)境的草履蟲自組織和協(xié)作路由方法屬于計算機網(wǎng)絡(luò)技術(shù)領(lǐng)域,其特征在于通過引入細(xì)胞結(jié)構(gòu),在細(xì)胞的各節(jié)點內(nèi)設(shè)立細(xì)胞內(nèi)和細(xì)胞間的路由表,建立了路由、路由表維護(hù)、節(jié)電加入、細(xì)胞分離和融合五種程序操作和實現(xiàn),在快速變化的點對點環(huán)境中和沒有中央服務(wù)器的情況下實現(xiàn)可擴(kuò)展的參與節(jié)點的自組織和協(xié)作路由,為實現(xiàn)點對點的系統(tǒng)打下基礎(chǔ)。
文檔編號H04L12/24GK1564543SQ200410033768
公開日2005年1月12日 申請日期2004年4月16日 優(yōu)先權(quán)日2004年4月16日
發(fā)明者楊廣文, 陳明, 武永衛(wèi) 申請人:清華大學(xué)