網(wǎng)絡(luò)技術(shù)是從1990年代中期發(fā)展起來(lái)的新技術(shù),它把互聯(lián)網(wǎng)上分散的資源融為有機(jī)整體,實(shí)現(xiàn)資源的全面共享和有機(jī)協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計(jì)算機(jī)、存儲(chǔ)資源、數(shù)據(jù)資源、信息資源、知識(shí)資源、專(zhuān)家資源、大型數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、傳感器等。 當(dāng)前的互聯(lián)網(wǎng)只限于信息共享,網(wǎng)絡(luò)則被認(rèn)為是互聯(lián)網(wǎng)發(fā)展的第三階段。 要完成有用的工作,P2P 應(yīng)用程序中的對(duì)等點(diǎn)必須能夠彼此發(fā)現(xiàn)對(duì)方并與對(duì)方交互。本文提供了一種基于 IP 多播的發(fā)現(xiàn)的實(shí)現(xiàn)。
在軟件實(shí)體能夠參與具有 P2P 應(yīng)用程序特征的直接的對(duì)等交互之前,該實(shí)體必須發(fā)現(xiàn)將要與之交互的適當(dāng)?shù)膶?duì)等點(diǎn)。所有可行的 P2P 體系結(jié)構(gòu)都提供一種針對(duì)發(fā)現(xiàn)問(wèn)題的解決方案。在本文我將描述其中一種機(jī)制的實(shí)現(xiàn)。讓我們通過(guò)回顧來(lái)開(kāi)始今天的討論。再訪發(fā)現(xiàn) 對(duì)等點(diǎn)發(fā)現(xiàn)使 P2P 應(yīng)用程序中的對(duì)等點(diǎn)能夠彼此定位以便相互之間可以交互。實(shí)現(xiàn)對(duì)等點(diǎn)發(fā)現(xiàn)服務(wù)有多種方法。最簡(jiǎn)單的機(jī)制是顯式點(diǎn)到點(diǎn)配置。這種機(jī)制通過(guò)要求每個(gè)對(duì)等點(diǎn)知道所有它可能與之交互的其它對(duì)等點(diǎn),并與它們相連,來(lái)進(jìn)行工作。點(diǎn)到點(diǎn)配置的主要優(yōu)點(diǎn)是簡(jiǎn)單。它的主要缺點(diǎn)是缺乏靈活性并且缺少擴(kuò)展到對(duì)等點(diǎn)的大型網(wǎng)絡(luò)的能力。
發(fā)現(xiàn)的另一個(gè)公共模型是使用中央目錄作為中介。該模型在許多傳統(tǒng)的、非 P2P 分布式類(lèi)型的應(yīng)用程序中間很流行,其優(yōu)點(diǎn)是很好理解。對(duì)等點(diǎn)向中央目錄注冊(cè)自己的存在,并使用中央目錄定位其它對(duì)等點(diǎn)。這種模型的主要優(yōu)點(diǎn)是易于管理和擴(kuò)展的能力。但是,其集中化設(shè)計(jì)會(huì)導(dǎo)致單點(diǎn)故障,因此它對(duì)自然力或網(wǎng)上沖浪人數(shù)增加所帶來(lái)的危害缺乏抵御能力。
許多流行的 P2P 應(yīng)用程序使用網(wǎng)絡(luò)模型而不是中央目錄,在網(wǎng)絡(luò)模型中,單個(gè)對(duì)等點(diǎn)只知道局域網(wǎng)絡(luò)上的對(duì)等點(diǎn)身份。每個(gè)對(duì)等點(diǎn)都作為那些與之相連的對(duì)等點(diǎn)的目錄。對(duì)等點(diǎn)通過(guò)向相鄰對(duì)等點(diǎn)傳播目錄查詢并返回相關(guān)的響應(yīng)來(lái)進(jìn)行合作。這種模型的主要優(yōu)點(diǎn)是沒(méi)有集中化。它的主要缺點(diǎn)是由于傳播查詢耗費(fèi)了大量的網(wǎng)絡(luò)和處理能力。
上面三種機(jī)制有無(wú)數(shù)種變體。不討論這些變體了,讓我們繼續(xù)前進(jìn)并研究另一種發(fā)現(xiàn)機(jī)制。
IP 多播發(fā)現(xiàn)
就每個(gè)對(duì)等點(diǎn)維護(hù)自己的目錄這點(diǎn)而言,多播模型類(lèi)似于網(wǎng)絡(luò)模型。但是,對(duì)等點(diǎn)不通過(guò)合作來(lái)實(shí)現(xiàn)大規(guī)模網(wǎng)絡(luò)查詢。另外,對(duì)等點(diǎn)利用網(wǎng)絡(luò)本身提供的特性(IP 多播)來(lái)定位和標(biāo)識(shí)其它對(duì)等點(diǎn)。
IP 多播是無(wú)連接和不可靠的(不象 TCP/IP 是面向連接和可靠的)。雖然它使用 IP 數(shù)據(jù)報(bào);但是不象單播 IP 數(shù)據(jù)報(bào)那樣是從一臺(tái)主機(jī)發(fā)送到另一臺(tái)主機(jī),多播 IP 數(shù)據(jù)報(bào)可以同時(shí)發(fā)往多臺(tái)主機(jī)。
對(duì)等點(diǎn)定期使用 IP 多播來(lái)宣布自己的存在。宣布包含了它們的主機(jī)名和一個(gè)用于正常通信的端口。對(duì)此消息感興趣的對(duì)等點(diǎn)檢測(cè)這個(gè)消息后,抽取出主機(jī)名和端口號(hào),并使用該消息建立一個(gè)通信通道。
回顧已經(jīng)足夠了。讓我們開(kāi)始研究代碼吧。
簡(jiǎn)單的客戶機(jī)與服務(wù)器
我們將從一個(gè)簡(jiǎn)單的示例開(kāi)始,該示例演示了兩個(gè)進(jìn)程如何使用 IP 多播進(jìn)行通信。為了簡(jiǎn)化演示,我將分別從客戶機(jī)和服務(wù)器進(jìn)程這兩個(gè)方面來(lái)介紹示例。P2P 應(yīng)用程序通常會(huì)實(shí)現(xiàn)這兩個(gè)進(jìn)程,將它們劃分為客戶機(jī)或服務(wù)器并不容易。
在本例中,服務(wù)器進(jìn)程進(jìn)行循環(huán)并等待數(shù)據(jù)報(bào)包的到來(lái)。每接收到一個(gè)包,服務(wù)器就會(huì)向控制臺(tái)打印一條簡(jiǎn)短的診斷消息?蛻魴C(jī)角色要簡(jiǎn)單得多 — 它多播單個(gè)數(shù)據(jù)報(bào)包并退出。
清單 1 和 2 說(shuō)明了這兩部分是如何組合在一起的。代碼中的注釋說(shuō)明了正在發(fā)生的事情。
清單 1. 簡(jiǎn)單服務(wù)器
網(wǎng)絡(luò)的神奇作用吸引著越來(lái)越多的用戶加入其中,正因如此,網(wǎng)絡(luò)的承受能力也面臨著越來(lái)越嚴(yán)峻的考驗(yàn)―從硬件上、軟件上、所用標(biāo)準(zhǔn)上......,各項(xiàng)技術(shù)都需要適時(shí)應(yīng)勢(shì),對(duì)應(yīng)發(fā)展,這正是網(wǎng)絡(luò)迅速走向進(jìn)步的催化劑。
|