`
cuizhenfu#gmail.com
  • 浏览: 67200 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

转载对等点如何彼此定位(其中讲到了Jxta的多播模型)

阅读更多
http://www.javazy.com/contentex/20064512151.shtml

要完成有用的工作,P2P 应用程序中的对等点必须能够彼此发现对方和与对方交互。软件开发人员 Todd Sundsted 在本文中继续研究 P2P 计算,并描述了几种完成这一任务(称为发现(discovery))的方法,以及每种方法的优势和弱点。

对等应用程序是一种大规模但又是细粒度的应用程序。每个对等点都可以进入或退出 — 每个对等点都关注于自己的任务。在他们短暂的活动期间,尝试完成布置给它们的任务。这些任务中的大多数都要涉及与其它对等点交互。

管理体系结构(对等点在这种体系结构下运作)必须为构成完整 P2P 应用程序的对等点提供许多必要的服务。在我们的 P2P 计算“旅程”中,已经讲述了通信和安全性服务(请参阅参考资料);现在是时候来研究对等点发现服务了。

对等点发现服务使 P2P 应用程序中的对等点能够彼此定位以便相互之间可以交互。实现对等点发现服务有多种方法。我们先从告诉对等点彼此之间的存在这种最简单的方法开始:显式点到点配置。

显式点到点配置
显式点到点配置与其说是一种真正的发现机制,还不如说是一种用来避免实现发现的机制。每个存在的对等点都知道“居住”在其 P2P 世界中的其它对等点。

术 语点到点(point-to-point)意味着,在 P2P 应用程序中的每个对等点都知道需要不断与之交互的每个对等点,并与之相连。这种连线不必将每个对等点都连起来 — 将每个对等点和其他各个对等点彼此相连,是不太可能的 — 但是,不这样做(无论是有意与否)将会使某些对等点产生网络盲点。

我为本系列文章所构建的简单的 P2P 应用程序(请参阅参考资料)使用显式点到点配置。每个对等点必须预先配置其它所有对等点的地址。如果您已经下载并使用了那些代码,则您无疑已经经历了忍受这一需求所带来的挫折 — 配置既单调乏味又容易出错,更不用提一般的麻烦了。

一 般而言,分布式应用程序中节点的显式点到点配置不能很好地扩展到具有较多节点的大型网络。那就是为什么分布式计算应用程序和技术总是(也有一些显著的例 外)包含命名和定位功能。这也解释了为什么域名系统(DNS) — 一种分布式命名系统,最终取代了用于机器命名的主机文件(hosts file)机制。维护主机文件是单调乏味、容易出错的,并且一般来说,很难在大型网络环境下运转。

但是,显式点到点配置并非一无是处。点到点寻址缺乏灵活性的特性也带来了一定程度的安全性。通过对网络中的每个对等点预先设置它所知道并且将要与之交互的对等点列表,使得网络在外部攻击面前表现得很稳固。

动态发现模型
与显式点到点配置方法的静态特性截然相反,目录服务和网络模型具有动态特性。这些模型通常能更好地符合 P2P 应用程序,它们倾向于该领域中动态的一边。

在下面几节中,我们将研究三种不同的机制,对等点通过这些机制动态地定位其它对等点和了解它自身所属的环境。

目录服务模型
在 目录服务模型中,一台或多台有特殊用途的服务器为对等点提供目录服务。为了使可扩展性最大化,对应用程序进行了结构化设计,以便少量的目录就可以为数量众 多的对等点服务。对等点向目录服务注册关于自身的信息(其名称、地址、资源和元数据),并通过根据目录服务器中信息的查询,使用目录服务来定位其它对等 点。

图 1 说明了一个使用目录来向对等点提供位置和命名服务的 P2P 体系结构。目录本身可以是对等点(尽管是很庞大的对等点),或者可以只担当目录而不作它用。

图 1,目录服务模型


目录有两种类型。这两种类型因为其目录集中式管理的程度不同而有略微的差别。

P2P 领域中目录模型的最佳示例是 Napster 和与 Napster 几乎一模一样的 OpenNap。在 Napster 模型中,采用集中式管理目录。虽然,采用集中式管理的目录遭到“本质上是‘非 P2P’”的指责,并且事实上促使了 Napster 被弃用,但它确实提供了一个重要的优势:集中式管理使它容易确保服务器硬件和配置能足以达到服务质量目标。

如果我们先暂时将 P2P 放一放,可以发现 DNS 是分散式目录的一个优秀示例。与因特网本身相似,DNS 设计为甚至在部分网络受到严重破坏的情况下仍能工作。DNS 目录采用层次化结构,根目录代表顶级域(譬如“com”),它将子域查询服务(如“etcee.com”这样的域)的任务委派到下一层次的 DNS 服务器。

在任意一种情况下,只有目录位置必须配置到每个对等点中,这对于点到点模型有重要优势。为加入到 P2P,对等点将自己注册到集中目录服务器。回忆上面的图。当对等点 A 希望与一个它不知道位置的对等点交互时,对等点 A 向目录服务器发送请求。然后,目录服务器向 A 返回那个对等点的位置。

网络模型
图 2 说明了另一种 P2P 应用程序。它由许多对等点组成,这些对等点在功能上很类似。没有专门的目录服务器。对等点必须使用它们所在的网络来定位其它对等点。

图 2,网络模型


正如名称所暗示的,网络模型 P2P 应用程序由一些(通常是动态的)对等点组成。没有一个对等点知道整个网络的结构或者组成网络的每个对等点的身份。相反,对等点只知道直接与它们通信的对等点 — 它们通过代理参与到大型网络中。

对等点必须合作完成任务。在许多环境中这种合作包括支持分布式查询、分布式消息传递,甚至包括认证和授权行为。因为涉及通信量的多少,象文件传输这样需要大流量的网络操作通常在对等点间直接发生 — 而不是通过对等点的网络。

思考上面图 2 中的网络。当对等点 A 希望知道网络中另一个对等点的位置时,它就发出一个查询请求并传递给邻居。这些邻居尝试满足这个请求。如果这些邻居不能完全满足这个请求,就将请求传递给它们的邻居,以此类推。

要加入网络,一个对等点要找到愿意接受它为邻居的另一个对等点。但是,当对等点本身还不是网络的一部分时,它如何找到网络中的另一个对等点呢?

一 个可能的解决方案是向这个对等点提供一个对等点列表,让其检查。对等点设法联系列表上的对等点直到一个或多个对等点接受它为邻居。这个解决方案听起来很象 点到点模型,是不是?正如最初 Gnutella 用户所证明的那样,这个解决方案只是一定程度上有效。因为 P2P 网络(尤其是 Gnutella)动态性很强,任何静态列表都不太可能长期有效。

进一步研究 Gnutella 这种环境中的解决方案是很有趣的。Gnutella 实现首先将这样开始:当其它对等点通过网络传播发送请求时,Gnutella 捕获并持久地存储这些对等点的位置。当这些客户机关闭后又重新启动时,它试图连接每个先前标识的对等点直到找到一个或多个仍在运行。

这种方法,虽然自动化程度很高,但是脆弱而且低效。后来,通过添加对从中央缓存下载活动对等点的列表的支持(请参阅参考资料以获得示例),改进了这种模式下的客户机。

这种模型的一个有趣的方面是,在支持对等点发现的过程中,组成网络的对等点担任了非常活跃的角色。正如我们即将看到的,活动对等点的参与并不是必要条件。

多播(multicast)模型
除 了网络中的节点不必协助发现以外,多播模型和网络模型很相似。这种模型利用网络自身提供的特性来定位和确认对等点和资源。这种技术的实现(Sun Microsystems 的 Project Jxta 是一个极佳的示例;有关 Jxta的更多信息,请参阅参考资料)使用 IP 多播来实现查询。

不 象单播(unicast) IP 数据报 — 一台主机,最多只能向一台主机发送数据报,多播 IP 数据报可以同时发往多台主机。更重要的是,发送方不必知道有多少接收方存在或者究竟有没有接收方存在。发送主机只是封装消息并将它发布到网络上。所有调整 到适当频道(特殊 IP 地址和端口号的组合)的客户机将接收到该消息的一个副本。

使用 IP 多播技术的发现通过让对等点用多播定期宣布自己的存在来工作。该消息包含对等点的 TCP/IP 主机名和端口号。对此消息感兴趣的对等点检测这个消息后,抽取出主机名和端口号,并使用这个信息与新对等点建立正常的 TCP/IP 连接。

这 就是多播是如何在单个子网上工作的。众多子网(组成整个网络)间的路由多播通信是完全不同的,并且是一个非常复杂的课题。这也是基于 IP 多播的发现的主要局限。没有路由器的支持,基于 IP 多播的发现被局限在同一子网上的对等点之间。不幸的是,因特网对多播并不友好。通常,因特网(或大型内部网)上的发现由跨网络边界的特殊对等点将消息复制 到另一个网络中来实现。

结束语
P2P 应用程序的对等点发现是一个有趣的话题。下个月,我们将研究使用 IP 多播来查找活动对等点的对等点发现的实现。这个简单 P2P 应用程序代码的附加部分将消除一个最大的问题 — 对等点的点到点配置。
分享到:
评论

相关推荐

    精通JXTA 。JXTAShell

    JXTA(Java eXtensible Networking Architecture)是由Sun Microsystems开发的一种开放源码的对等网络(P2P)平台,旨在促进设备之间的互操作性,提供一种分散式计算模型。通过JXTA,不同设备能够发现彼此,共享资源...

    JXTA\jxta-lib-2.4.1.zip

    在"JXTA\jxta-lib-2.4.1.zip"这个压缩包中,包含了开发P2P应用程序所需的多个关键类库,让我们逐一解析其中的关键组件。 1. **jxta.jar**:这是JXTA的核心库,包含所有用于构建P2P网络的基本组件。它提供了网络发现...

    JXTA开发包1

    - **对等点(Peers)**:JXTA网络中的基本单元,每个对等点都拥有平等的地位,可以发布、请求或响应服务。 - **边缘服务(Edge Services)**:在P2P网络的边界上运行的服务,它们为对等点提供连接、身份验证和路由等...

    jxta messager

    JXTA 是一个开放源代码的P2P(对等网络)平台,由Sun Microsystems在2001年推出,旨在提供一种分布式计算模型,允许网络上的设备之间进行通信和协作。这个平台支持多种服务,包括消息传递、资源发现、身份验证和加密...

    基于JXTA的P2PIN时通信软件的Java实现研究.pdf

    JXTA是由Sun公司开发的一个专门针对P2P应用程序的平台,它允许通过Java编程语言实现多种对等点(peer)之间的直接通信,无需经过中心服务器即可发现并完成通信。 在P2P网络中,每个节点既是服务器又是客户端,它们...

    jxta2.2 开发文档

    《JXTA 2.2 开发文档》是针对Java平台的一个开源项目,它提供了一套框架和协议,用于构建对等网络(P2P)应用程序。JXTA(Java/XML Peer-to-Peer Technology Architecture)旨在使设备之间能够直接通信,无需中心...

    精通JXTA --本书是一本介绍JXTA的书籍

    JXTA(Java Xtreme Programming eXchange)是一种基于Java的开放源代码平台,用于构建对等网络(P2P)应用。它允许设备之间直接通信,共享资源和服务,无需中心服务器。这本书"精通JXTA"深入介绍了这一技术,为...

    JXTA JXTA.jar

    jxta.jar p2p jxta.jar p2p jxta.jar p2p

    jxta2.7.zip

    JXTA(Java eXtensible Peer-to-Peer Technology Platform)是Oracle公司开发的一个开源、跨平台的P2P(Peer-to-Peer)框架,它为构建基于对等网络的应用程序提供了一组标准协议和API。JXTA 2.7是这个框架的一个版本...

    JXTA技术手册示范源码jxtaexamles

    通过深入研究这些示例,开发者可以学习到如何使用JXTA API创建自己的对等应用程序,包括设置和管理对等节点、发布和发现资源、建立通信管道以及实现安全的身份验证。 **www.pudn.com.txt** 这个文件可能是下载源码...

    JXTA.rar_jxta

    3. **对等发现**:JXTA使用多播协议进行对等节点的发现,使得节点能够自动找到网络中的其他节点和服务。这一过程包括节点的自我介绍、服务的发现和网络拓扑的构建。 4. **管道通信**:JXTA的管道机制允许对等节点...

    jxta-src-2.3.5.zip_java p2p_jxta_jxta 2.5

    5. **管道(Pipe)**:JXTA的通信机制之一,允许对等点间进行一对多或多对多的数据传输。管道可以是有向的,也可以是无向的,支持可靠或不可靠的数据传输。 6. **服务(Service)**:JXTA定义了一系列标准服务,如...

    基于jxta的p2p即时通信系统设计

    3. **对等组与管道**:在JXTA中,对等组(Pipes)是连接多个对等体的通道,用于传输数据和服务。对等组可以根据需要动态创建,支持点对点或多点通信,确保信息的有效传递。 4. **用户模块**:该模块负责用户的身份...

    JXTA——Java P2P网络编程技术

    **JXTA(Java Peer-to-Peer Toolkit)**是Sun Microsystems开发的一种开放源代码平台,专为构建对等网络(P2P)应用程序提供服务。它允许开发者利用Java语言创建分布式、自组织的网络系统,其中每个节点都可以既是...

    jxta例程

    标题中的"jxta例程"指的是利用JXTA技术编写的示例程序,这些示例通常用于教学或演示JXTA的各种功能和用法,帮助开发者理解和掌握JXTA平台的工作原理和编程模型。 描述中的"jxta的一些经典程序"可能包括了多种类型的...

    基于JXTA的CMS内容共享

    内容在JXTA中被定义为任何需要共享的数据,每份共享内容通过其二进制代码产生的128位MD5校验值作为唯一标识,这不仅便于确认多个文件内容的一致性,还用于检索内容,帮助寻找距离请求Peer最近的目标Peer,从而提高...

    jxta 2.5 all

    通过阅读这些文档,开发者可以理解JXTA的核心概念,如边缘网络(Edge Network)、对等点(Peers)、广告(Advertisements)和管道(Pipes),并学会如何在实际项目中应用这些技术。 3. **源代码(jxse-src-2.5.zip...

    jxta.rar_jxta_jxta cms

    JXTA的P2P网络模型基于“对等者”(Peers)的概念,每个参与的设备都是平等的,可以既是服务提供者也是服务消费者。通过使用"jxta.jar",开发者可以轻松地在应用程序中集成P2P功能,如创建和加入网络、发布和查找...

Global site tag (gtag.js) - Google Analytics