假如我們先暫時(shí)將 P2P 放一放,可以發(fā)現(xiàn) DNS 是分散式目錄的一個(gè)優(yōu)秀示例。與因特網(wǎng)本身相似,DNS 設(shè)計(jì)為甚至在部分網(wǎng)絡(luò)受到嚴(yán)重破壞的情況下仍能工作。DNS 目錄采用層次化結(jié)構(gòu),根目錄代表頂級(jí)域(譬如“com”),它將子域查詢服務(wù)(如“etcee.com”這樣的域)的任務(wù)委派到下一層次的 DNS 服務(wù)器。
在任意一種情況下,只有目錄位置必須配置到每個(gè)對(duì)等點(diǎn)中,這對(duì)于點(diǎn)到點(diǎn)模型有重要優(yōu)勢(shì)。為加入到 P2P,對(duì)等點(diǎn)將自己注冊(cè)到集中目錄服務(wù)器。回憶上面的圖。當(dāng)對(duì)等點(diǎn) A 希望與一個(gè)它不知道位置的對(duì)等點(diǎn)交互時(shí),對(duì)等點(diǎn) A 向目錄服務(wù)器發(fā)送請(qǐng)求。然后,目錄服務(wù)器向 A 返回那個(gè)對(duì)等點(diǎn)的位置。
思考上面圖 2 中的網(wǎng)絡(luò)。當(dāng)對(duì)等點(diǎn) A 希望知道網(wǎng)絡(luò)中另一個(gè)對(duì)等點(diǎn)的位置時(shí),它就發(fā)出一個(gè)查詢請(qǐng)求并傳遞給鄰居。這些鄰居嘗試滿足這個(gè)請(qǐng)求。假如這些鄰居不能完全滿足這個(gè)請(qǐng)求,就將請(qǐng)求傳遞給它們的鄰居,以此類推。
多播(multicast)模型 除了網(wǎng)絡(luò)中的節(jié)點(diǎn)不必協(xié)助發(fā)現(xiàn)以外,多播模型和網(wǎng)絡(luò)模型很相似。這種模型利用網(wǎng)絡(luò)自身提供的特性來(lái)定位和確認(rèn)對(duì)等點(diǎn)和資源。這種技術(shù)的實(shí)現(xiàn)(Sun Microsystems 的 PRoject Jxta 是一個(gè)極佳的示例;有關(guān) Jxta的更多信息,請(qǐng)參閱參考資料)使用 ip 多播來(lái)實(shí)現(xiàn)查詢。
不象單播(unicast) IP 數(shù)據(jù)報(bào) — 一臺(tái)主機(jī),最多只能向一臺(tái)主機(jī)發(fā)送數(shù)據(jù)報(bào),多播 IP 數(shù)據(jù)報(bào)可以同時(shí)發(fā)往多臺(tái)主機(jī)。更重要的是,發(fā)送方不必知道有多少接收方存在或者究竟有沒(méi)有接收方存在。發(fā)送主機(jī)只是封裝消息并將它發(fā)布到網(wǎng)絡(luò)上。所有調(diào)整到適當(dāng)頻道(非凡 IP 地址和端口號(hào)的組合)的客戶機(jī)將接收到該消息的一個(gè)副本。
使用 IP 多播技術(shù)的發(fā)現(xiàn)通過(guò)讓對(duì)等點(diǎn)用多播定期公布自己的存在來(lái)工作。該消息包含對(duì)等點(diǎn)的 TCP/IP 主機(jī)名和端口號(hào)。對(duì)此消息感愛(ài)好的對(duì)等點(diǎn)檢測(cè)這個(gè)消息后,抽取出主機(jī)名和端口號(hào),并使用這個(gè)信息與新對(duì)等點(diǎn)建立正常的 TCP/IP 連接。
這就是多播是如何在單個(gè)子網(wǎng)上工作的。眾多子網(wǎng)(組成整個(gè)網(wǎng)絡(luò))間的路由多播通信是完全不同的,并且是一個(gè)非常復(fù)雜的課題。這也是基于 IP 多播的發(fā)現(xiàn)的主要局限。沒(méi)有路由器的支持,基于 IP 多播的發(fā)現(xiàn)被局限在同一子網(wǎng)上的對(duì)等點(diǎn)之間。不幸的是,因特網(wǎng)對(duì)多播并不友好。通常,因特網(wǎng)(或大型內(nèi)部網(wǎng))上的發(fā)現(xiàn)由跨網(wǎng)絡(luò)邊界的非凡對(duì)等點(diǎn)將消息復(fù)制到另一個(gè)網(wǎng)絡(luò)中來(lái)實(shí)現(xiàn)。
結(jié)束語(yǔ) P2P 應(yīng)用程序的對(duì)等點(diǎn)發(fā)現(xiàn)是一個(gè)有趣的話題。下個(gè)月,我們將研究使用 IP 多播來(lái)查找活動(dòng)對(duì)等點(diǎn)的對(duì)等點(diǎn)發(fā)現(xiàn)的實(shí)現(xiàn)。這個(gè)簡(jiǎn)單 P2P 應(yīng)用程序代碼的附加部分將消除一個(gè)最大的問(wèn)題 — 對(duì)等點(diǎn)的點(diǎn)到點(diǎn)配置。