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