版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. 绪论1.1 研究背景对等网络(P2P)技术是目前国际计算机网络技术领域研究的一个热点,被财富杂志誉为将改变Internet未来的四大新技术之一。所谓P2P,它是一种网络模型,又称对等网或点对点技术。简而言之,P2P技术就是各个点之间直接进行资源和服务的共享,而不像传统的客户端/服务器结构那样需要服务器的介入,使用户与用户之间的连接更加方便、直接。但是随着P2P技术应用日益增多,关于P2P技术的研究相对来说十分缺乏,因此加强对该技术的研究已成为当务之急。本文就是在这个背景下进行研究的。 为了加快P2P应用程序的开发,开发者们迫切的需要一个与语言无关、有统一规范、具有良好鲁棒性的开发平台,S
2、un 公司的 Bill Joy认识到了这一点,从而引发了Project JXTA的诞生。 JXTA是 Sun 公司为了构建跨平台、跨操作系统和跨编程语言的P2P应用而设计的网络开发平台,它定义了一组P2P底层通信协议,使简单、方便地构造P2P应用成为可能。同时JXTA是一个开放源代码工程,并且具备良好的可扩展性,有望成为P2P网络应用开发的通用平台。 JXTA的核心是六个协议,目前JXTA首先推出了基于Java的参考实现,提供了支持六个协议的Java API,这极大方便了P2P应用程序的开发,本文就是基于目前理论架构相对比较完整JXTA技术,研究并实现了Peer之间的通信。1.2 研究的意义
3、信息(Information)、带宽(Bandwidth)、计算能力(Computing resource)是Internet的三大基础资源。但是当前,这些资源并没有被充分利用,部分原因是大多数Internet服务采用C/S模式。 在信息方面,信息量在不断地膨胀,但是没有一个搜索引擎能及时地找到或者分类这些信息,而且很多信息是短暂的,现有搜索技术搜索到的信息有限。带宽方面,由于采用C/S模式,信息都集中在服务端,导致拥挤的更拥挤,空闲的更加空闲,带宽利用不足。处理器速度越来越快,储存设备容量越来越大,使得网络终端的处理能力相当强大,但是计算还是集中在数据中心,这样使中心的负载几乎达到极限,而其
4、余终端的计算能力却大量闲置。 P2P的分布式结构则是为了有效负载均衡,充分利用带宽并挖掘计算机空闲得计算能力。P2P技术将实现Internet的大部分潜力,将Internet转变成一个动态的、颗粒状网络,在这样一个网络中,特定的信息组建可被有效的放置和分享,网络与计算机将不再有什么差别了。真正实现“网络就是计算机,计算机就是网络”的梦想。 因此,对于P2P技术的研究显得十分重要,而节点之间通信的实现是研究P2P应用程序的基础,是研究P2P的第一步,是P2P技术殿堂的基石。通过对通信机制的研究,可以进一步为实现P2P网络监控提供决策支持服务,如果一种灵活,方便的通信机制能够研究成功,那必将减轻P
5、2P网络运行和监控的负担,从而促进P2P网络快速的发展。以上就是本文研究的意义所在。 1.3 论文的体系结构2. P2P技术2.1 P2P的定义 最近几年,对等计算(Peer-to-Peer,简称P2P)迅速成为计算机界关注的热门话题之一,财富杂志更将P2P列为影响Internet 未来的四项科技之一。 目前,在学术界、工业界对于P2P没有一个统一的定义,常见的定义有很多,这些定义分别从不同的应用角度描述出P2P 的应用特点。P2P技术是一种用于不同PC 用户之间、不经过中继设备直接交换数据或服务的技术。这是P2P技术应用的初衷,该定义确定了P2P 的通信方式。 P2P是一种分布式网络,网络的
6、参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源需要向网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源(服务和内容)提供者(Server),又是资源(服务和内容)获取者(Client)。 Intel将P2P计算定义为“通过系统间的直接交换所达成的计算机资源与信息的共享”,这些资源与服务包括信息交换、处理器时钟、缓存和磁盘空间等; IBM 则给P2P赋予更宽泛的定义,把P2P看成是由若干互联协作的计算机构成的系统并具备如下若干特性之一,系统依存于边缘化(非中央式服务器)设备的主动协作,每个成员直
7、接从其他成员而不是从服务器的参与中受益,系统中成员同时扮演服务器与客户端的角色,系统应用的用户能够意识到彼此的存在构成一个虚拟或实际的群体。 Skype 对P2P的描述则更符合P2P在实时业务中应用的特点:P2P技术是指网络中的所有节点都动态参与到路由、信息处理和带宽增强等工作中,而不是单纯依靠服务器来完成这些工作。虽然上述定义稍有不同,但共同点都是P2P 打破了传统的Client/Server (C/S)模式,在网络中的每个结点的地位都是对等的。每个结点既充当服务器,为其他结点提供服务,同时也享用其他结点提供的服务。P2P 与C/S 模式的对比如下图所示:与传统的分布式系统相比,P2P 技术
8、在共享应用方面具有明显的优势。同时,P2P 技术具有广阔的应用前景。2.2 P2P技术的特点与C/S 模式相比,P2P 技术的特点体现在以下几个方面。2.2.1 非中心化(Decentralization) 网络中的资源和服务分散在所有结点上,信息的传输和服务的实现都直接在结点之间进行,可以无需中间环节和服务器的介入,避免了可能的瓶颈。P2P 的非中心化基本特点,带来了其在可扩展性、健壮性等方面的优势。2.2.2 可扩展性 在P2P 网络中,随着用户的加入,不仅服务的需求增加了,系统整体的资源和服务能力也在同步地扩充,始终能较容易地满足用户的需要。整个体系是全分布的,不存在瓶颈。理论上其可扩展
9、性几乎可以认为是无限的。2.2.3 健壮性 P2P 架构天生具有抗攻击、高容错的优点。由于服务是分散在各个结点之间进行的,部分结点或网络遭到破坏对其它部分的影响很小。P2P 网络一般在部分结点失效时能够自动调整整体拓扑,保持其它结点的连通性。P2P 网络通常都是以自组织的方式建立起来的,并允许结点自由地加入和离开。P2P 网络还能够根据网络带宽、结点数、负载等变化不断地做自适应式的调整。2.2.4 高性/价比 性能优势是P2P 被广泛关注的一个重要原因。随着硬件技术的发展,个人计算机的计算和存储能力以及网络带宽等性能依照摩尔定理高速增长。采用P2P 架构可以有效地利用互联网中散布的大量普通结点
10、,将计算任务或存储资料分布到所有结点上。利用其中闲置的计算能力或存储空间,达到高性能计算和海量存储的目的。通过利用网络中的大量空闲资源,可以用更低的成本提供更高的计算和存储能力。2.2.5 负载均衡 P2P 网络环境下由于每个节点既是服务器又是客户机,减少了对传统C/S结构服务器计算能力、存储能力的要求,同时因为资源分布在多个节点,更好的实现了整个网络的负载均衡。2.3 P2P模式2.3.1 集中式P2P 集中式P2P 模式由一个中心服务器来负责记录共享信息以及反馈对这些信息的查询;每一个对等实体要对它所需共享的信息以及进行的通信负责,根据需要下载它所需要的其他对等实体上的信息。这种形式具有中
11、心化的特点,但是它不同于传统意义上的Client/Server 模式。因为传统意义上的Client/Server 模式采用的是一种垄断的手段,所有资料都存放在服务器上客户机只能被动地从服务器上读取信息,并且客户机之间不具有交互能力;而集中式P2P 模式则是所有网上提供的资料都存放在提供该资料的客户机上,服务器上只保留索引信息,此外服务器与对等实体以及对等实体之间都具有交互能力。 集中目录式P2P 模型还存在很多问题,主要表现为: 中央服务器的瘫痪容易导致整个网络的崩溃,可靠性和安全性较低; 随着网络规模的扩大,中央目录服务器维护和更新的费用将急剧增加;&
12、#1048633; 缺乏有效的强制共享机制,资源可用性差。2.3.2 分布式P2P 在分布式P2P 中,对等机通过与相邻对等机之间的连接遍历整个网络体系。每个对等机在功能上都是相似的,并没有专门的服务器,而对等机必须依靠它们所在的分布网络来查找文件和定位其他对等机。 分布式对等网络模型也存在很多弊端,主要表现在以下方面: 采用泛洪式的搜索方式,搜索请求要经过整个网络或者至少是一个很大的范围才能得到结果,因此,这种模式占用很多带宽,而且需要花费很长时间才能有返回结果。 随着网络规模的扩大,通过扩散方式定位对等点及查询信息的方法将会造成网络流量急剧增加,从而
13、导致网络拥塞,最终使分布式P2P 网络被分片,使得查询访问只能在网络很小的范围内进行,因此,网络的可扩展性不好,不适合大型网络。 纯分布式的 P2P 模式很难被企业所利用,因为它缺少对网络上的用户节点数以及对他们提供的资源的一个总体把握。 安全性不高,易遭受恶意攻击,如攻击者发送垃圾查询信息,造成网络拥塞等。2.3.3 混合式P2P 混合式P2P在纯P2P分布式模型基础上引入了超级节点的概念,综合了集中式P2P快速查找和纯P2P去中心化的优势。将节点按能力不同(计算能力、内存大小、连接带宽、网络滞留时间等)区分为普通节点和超级节点两类。其中超级节点与其临
14、近的若干普通节点之间构成一个自治的簇,簇内采用基于集中目录式的P2P模式,而整个P2P网络中各个不同的簇之间再通过纯P2P的模式将超级节点相连起来,甚至也可以在各个超级节点之间再次选取性能最优的节点,或者另外引入新的性能最优的节点作为索引节点来保存整个网络中可以利用的超级节点信息,并且负责维护整个网络的结构。 由于普通节点的文件搜索先在本地所属的簇内进行,只有查询结果不充分的时候,再通过超级节点之间进行有限的泛洪。这样就极为有效地消除纯P2P 结构中使用泛洪算法带来的网络拥塞、搜索迟缓等不利影响。同时,由于每个簇中的超级节点监控着所有普通节点的行为,这也能确保一些恶意的攻击行为能在网络局部得到
15、控制,并且超级节点的存在也能在一定程度上提高整个网络的负载平衡。 总的来说,基于超级节点的混合式 P2P 网络结构比以往有较大程度的改进。 然而,由于超级节点本身的脆弱性也可能导致其簇内的结点处于孤立状态,因此这种局部索引的方法仍然存在一定的局限性。这导致了结构化的P2P 网络模型的出现。2.4 应用领域2.5 JXTA平台的引入 当JAVA开发者开发新的互操作系统时,为了支持系统将来的大量用户实现最优系统设计,开发者必须考虑多方面的因素,在开放源代码技术时代,Java开发者很少甚至从不需要“白手起家”。P2P技术也是如此。 SUN公司的Bill Joy和Mike Clary认识到了早期的P2
16、P技术存在的问题:绝大多数P2P系统本质上是专用而不是相互兼容的。早期的工作几乎完全集中于互操作实现的可能性上,工程师们把互操作的可行性当成了互联网能提供的最重要的方面,却忽略了P2P成为成熟技术的重要因素:在很长时间内,开发者可重用的稳定的平台的年代已经到来。Bill Joy和Mike Clary的工作使得伟大的JXTA平台诞生了。3. JXTA平台3.1 JXTA简介 首先,JXTA是为了构建P2P网络二制订的一组协议,是解决了上述构建P2P网络所碰到的问题的解决方式。JXTA标准协议介绍如下: “JXTA由六个协议组成,这些协议是专为特定的、分布式的、对等的网络计算而设计的。使用这些协议
17、,Peer可以互相合作来建立自我组织、自我管理的对等组,而不必关心他们在网络中所处的位置(在网络边缘或者防火墙的后面),并且也不需要集中的管理机构。” 其次,JXTA是P2P应用程序开发的运行平台:目前JXTA推出了基于Java的参考实现,提供了支持六个协议的Java API,还推出了C语言等其他编程语言的API。3.2 JXTA的设计目标 JXTA的主要设计目标如下:(1)互操作性:P2P系统很容易地找到并连接到对方,彼此进行交流;(2)平台无关性:P2P系统应该设计成独立于编程语言如C,Java等,独立于系统平台如Windows和UNIX,独立于网络平台如TCP/IP和BLUETOOTH;
18、(3)广泛性:P2P系统可以运行在任何有数字处理和联网功能的设备上。从本质上讲,JXTA的目标是希望在任何设备,任何平台上建立P2P应用来互相交流沟通。3.3 JXTA平台的关键要素3.3.1 对等机对等机 (Peer)是一个虚拟的通信点。在一台计算机或者设备上可以有很多个对等机,一个对等机并不是一个用户,因为一个用户可以有多个对等机,同一个设备上也可以有多个对等机。因为对等机不等同于用户,所以需要将用户和对等机抽象出来并分离开。3.3.2 对等组 对等组(Peer Gourp)是一种组织Peer并且发布组内的特定服务的方式。对等组可以被创建、加入和退出,在一个组里还可以更新一个组成员的关系,
19、由于一些原因,对等组需要对成员关系进行一些限制,例如为了通信的安全、隐私的考虑等。这里使用一种协议来认证,它专门收集信息并判断其是否符合成员关系的要求。3.3.3 集合点 一个集合点 (Rendezvous Peer)首先是一个Peer,而且是一个能够处理来自其他Peer请求的Peer,集合点也可以将请求委托给其他Peer,当然那些Peer也必须是集合点。使用集合点的一个主要目的就是为了方便在本地网络之外搜索通告。集合点通常拥有更多资源,并且可以存储大量的有关它周围Peer的信息。集合点也可以作为搜索的传递者。集合点可以转发发现请求到其他的集合点(原集合点通过与其他Peer的通告交互而得到了被
20、转发集合点的信息)。每一个集合点如果本身没有被请求的信息它都会转发该请求。3.3.4 管道 管道(Pipe)是Peer之间的虚拟通道,可以透过防火墙的障碍进行通信。从而使得Peer在大多数网络情况下都可以通信。通常认为对等通信是单个的通信连接,但是也并不是总是这样的,因为防火墙和其他障碍的存在,许多Peer并不能直接连接,这时,管道更像一个在多种通信协议之上的虚拟层,可以通过起网关作用的Peer对通信提供中继支持。管道提供了一种很好的方案,使得Peer在大多数网络情况下都可以通信,而不用去管防火墙或者其他的障碍,即使你不知道另外一个Peer的位置以及它所使用的协议等信息, 通过管道仍然可以与之
21、通信。 管道可以分成以下两种类型: (1)点到点类型:点到点的管道连接两个不同的Peer。可以使用多个 起网关作用的Peer来创建连接。 (2)传播类型:将一个Peer连接到多个目标Peer。3.3.5 通告 一个通告(Advertisement)就是一个XML文档,通告实际上是P2P网络中的 “名片” ,用来描述JXTA的消息、Peer、对等组或者服务等。它必须遵守编码、标签和内容的标准,用来交换JXTA网络上可以获得的任何信息。例如,一个 Peer创建了名称为“p2pchat Group”的对等组后,就可以使用IP多播方式把通告发布到本地的JXTA网络;也就说,子网中的每一个Peer都会收
22、到一份通告的副本,此外通告还会被发送到集合点去。3.3.6 消息在JXTA中,有两种方式来处理消息(Message) 。一种是使用X ML格式,数据都遵循X ML标准被包装到消息里:另外一种是使用二进制格式。尽管希望对所有的JXTA消息都使用X ML格式,可是由于大量的消息需要传送,使用X ML格式的消息会导致效率较低,而且由于消息通常是在程序之间传送的,所以可以规范的消息内容使用二进制的格式;对于其他的仍然采用XML格式。3.3.7 标识符在JXTA网络社区中,所有资源(对等机、管道、对等机组、消息等)都被分配一个全局唯一的JXTA ID。3.4JXTA平台的六种协议 JXTA通过定义一系列
23、协议来进行对等机之间的交流通信,对等机应用这些协议可以发布自己的通告来广播自己的资源,还可以在对等网络中发现其他的点,并且发现网络资源,以及路由消息等。JXTA系统利用这些协议,构成了可以适用于各种应用目的和计算环境的基础平台。 下面详细介绍JXTA的六种协议:3.4.1、对等机发现协议对等机发现协议 (Peer Discovery Protocol ,P D P )主要用来发布自己的通告信息,并且从其他Peer 处获得通告。PDP允许一个Peer 发现其他Peer的通告( 包括Peer通告、对等组通告、服务通告,或者是管道通告)。该协议通过指定一种通告类型如Peer、对等组)、一个XML标签
24、名、一个匹配这个 X ML标签所表示数据的字符串来定义查询。它使用Peer Resolver Protocol 来发送和传播搜索通告的请求。3.4.2、对等机信息协议对等机信息协议(Peer Information Protocol,PIP)用来获得其他Peer的状态信息,包括更新时间、状态等。该协议有时被用做ping命令,有时被用来获得一个Peer的基本状态信息,PIP消息的正文是自由格式的,它允许询问特定的Peer信息。此外,这种能力可以被扩展以提供控制能力,它使用Peer Resolver Protocol来发送和传播搜索通告的请求。3.4.3、管道绑定协议 管道绑定协议(Pipe Bi
25、nding Protocol,PBP)描述了如何在对等点之间建立连接和传播消息,如何将一个管道的输入端和输出端绑定到一个对等节点的端点上。管道是一个对等点与一个或多个对等点之间建立连接的虚拟通信通道,它位于物理网络传输层之上。管道可以看做是一个消息序列,能够支持创建、打开、关闭、删除、发送和接收操作。管道在使用前,首先必须与一个端点绑定。对等点用输入管道(Input Pipe)来接收数据,用输出管道(Output Pipe)发送数据。当一个对等点将数据发送给其他的对等点时,首先将数据打包成消息格式,利用输出管道发送数据。在接收端的对等点,利用输入管道接收消息。3.4.4、端点路由协议 端点路由
26、协议(Endpoint Routing Protocol,ERP),定义了JXTA中消息路由机制。当一个对等点(源点)要发送消息给指定的目的对等点(目的点)时,它首先查询自己本地缓存来判断是否有到达目的点的路由信息。如果没有找到路由信息,它就发送路由解析查询请求给它可以连接的中继对等点,请求这个中继对等点的路由信息。当这个中继对等点收到路由请求,它就检查是否知道到达目的点的路由信息。如果知道,那么就返回路由信息给源点。3.4.5、对等机解析协议 在JXTA协议中,各种协议都是基于发送请求消息和得到响应消息的模式。例如,对等发现协议中,规定了两种消息,发现请求消息和发现响应消息。在路由协议中,规
27、定了路由请求消息和发现响应消息。它们各自都有着消息格式,各自的消息格式并不相同。对等点解析协议(Peer Resolver Protocol,PRP),就是用于标准化这些请求消息和响应消息解析的格式,使得对等点能够发送通用一致的请求消息和响应消息。所有需要通用的请求一响应机制的协议都需要依靠PRP协议进行工作。对等解析协议的实现为JXTA网络提供了一种通用的解析请求服务。3.4.6、集合点协议通过集合点协议(Rendezvous Protocol,RVP),对等机可以对一个服务订阅或者被订阅。集合点协议负责在JXTA对等组内传播消息,它为Peer在组内接收和发送消息并且控制消息如何传播定义了一
28、个基本的协议。4. 通信机制研究4.1 通信的障碍 虽然P2P网络希望每个Peer之间都可以直接进行通信,但是在现实的网络中实际存在着许多情况导致计算机之间无法相互直接通信。接下来将讨论现实网络中阻碍P2P网络通信的主要的障碍防火墙、NAT等。4.1.1 防火墙防火墙经常出现在大公司网络和个人PC中,它将一个网络分隔成以防火墙为界的两个网络。任何从一个网络传递到另一个网络的信息都必须通过防火墙。防火墙所处的关键性位置允许它监视和控制网络间的流量。防火墙是安全网络不可或缺的部分,主要用于防止对网络的非授权访问。典型的防火墙使用IP过滤控制那些从防火墙外到内部网的连接,它几乎过滤掉了除HTTP外的
29、所有东西。防火墙也可以限制通信端口。因为防火墙可能阻止进来的连接,所以防火墙外的一个对等节点很可能不能直接与防火墙内的对等节点建立连接,进一步限制了对等通信的可能。4.1.2 NAT(网络地址转换)网络地址转换 NAT(Network Address Translation),一则解决IPV4地址日益缺乏的问题,二则通过隐藏内部网络地址的手段为用户提供了安全保护。内部网络用户,通常位于 NAT 服务器的内侧,在连接互联网时,NAT 将用户的内部网络 IP 地址转换成一个外部的公共的 IP 地址(存储于 NAT 的地址池中),当外部网络数据返回时,NAT 则反向将地址目标替换成初始的内部用户的地
30、址从而让网内用户接受。由于这样对外隐藏了内部网络的 IP 地址,因此,外部用户无法直接发起到内部用户的连接,从而隐藏了内部的用户。NAT只允许那些由内部网发起的连接,私有网外部的网络无法与内部建立连接,除非有内部机器首先发起到外部的连接,结果实,对等网中的外部对等节点不能主动与位于NAT网关之内的对等节点建立连接。4.1.3 节点的动态变化许多公司特别是ISP使用动态主机配置协议(DHCP)。DHCP动态的为计算机分配IP地址,结果每一次当DHCP服务器或者是用户电脑重起时,IP地址都会变化。IP地址同样因为过期而发生变化,这样导致一个已知的地址是暂时的地址。因为有了DHCP的存在,Peer可
31、能不会拥有可信赖的地址。这样就使通过防火墙与另端的Peer的通信变得困难。另一方面,Peer可能消失后又出现。很多计算机不是24小时都连入Internet的,同时还有一部分无线设备,它们经常只是非常短的时间在线,在这种情况下,同一个设备可从不同的城市不同的拓扑结构中冒出来。因为以上原因,使得节点的经常处于动态变化中,Peer路由的有效性就难以保证,重新计算路由就显得非常重要。4.1.4物理连接图1-1 对等网络物理连接图对等网络实际的物理连接可能类似上图,都位于各自防火墙内的对等节点之间的通信模式。造成P2P网络的通信不畅。4.2 问题的解决为了解决上述问题,在P2P网络中必须有一部分的Pee
32、r和普通类型的Peer功能不太一样,所以需要在P2P网络中从概念上抽象出一些特殊的用于通信目的的Peer。4.2.1 Peer的分类每一个Peer根据其提供的角色功能可以划分为三种类型,即简单类型Peer,super-peer和服务器型的peer。1. 简单类型Peer:该类型节点仅仅是一个简单的终端用户,它可以请求获得服务并为网络中的其它Peer提供服务。2. Super-peer:该类型节点除了具有和简单Peer节点类似的功能外,还提供某些特殊功能。如JXTA系统中就存在路由器Peer节点和汇聚点Peer节点,前者作为一个桥梁,使得被防火墙或NAT隔离的Peer可以相互通信;后者为简单节点
33、提供查询定位信息的功能。3. 服务器型Peer:该类型节点主要提供类似与客户/服务器模型下的服务器功能,如提供一个全局统一的目录查询。例如,在Napster这种混杂型的P2P系统中,有若干个简单Peer节点相互提供文件下载功能的服务,还有一个目录服务器节点提供文件条目的注册管理。Groove和Magi系统中也均存在这样的服务器型节点。而在纯P2P网络中,每一个Peer节点均充当了上述的三种角色。4.2.2 节点动态变化的处理P2P网络中节点的登录和退出,在服务器模型的P2P网络中,由于Peer节点的状态信息和管理的资源信息直接记录在服务器中,Peer节点的登录和退出仅需和服务器进行交互,由服务
34、器进行协调处理。如在Napster系统中,Peer节点登录系统后,向服务器发送当前的网络状态和所有的文件列表信息,由服务器更新目录索引。在一些即时消息通讯系统中,Peer节点往往是与用户绑定的。服务器接收到用户的登录消息或退出消息后,通知订阅该用户在线状态的所有在线用户。同时,可能发生的地址的变化情况因为有路由Peer的存在而得到改善,当地址发生变化时路由Peer能够在Peer间建立新的路由。4.2.3 穿透防火墙和NAT通常在防火墙或者 NAT 后面的对等节点可以直接发送消息到位于防火墙外部的对等点。但是在防火墙外部的对等点却不能直接和位于防火墙后的对等点建立连接。为了使位于防火墙外部与内部
35、的对等节点直接可以穿透防火墙进行通信,必须满足以下三个条件:l 在防火墙内部的对等组中必须至少有一个对等节点知道在防火墙外部的一个或多个对等点的存在,并且都支持HTTP 传输协议l Peer 之间进行通信时,必须由内部网络的机器首先发起连接请求,如果通信双方均处于防火墙之后,则需要有防火墙外的转发节点进行消息转发。l 需要使用在一般情况下可以通过防火墙的协议,如基于请求/应答方式的HTTP 协议。如图1-2描述,JXTA的对等点 Peer A 和 Peer B 之间需要相互传递消息,但是,防火墙阻止了它们之间的直接通信。对等点 Peer A 在发送消息时,首先,会采用能够穿透防火墙的 HTTP
36、 协议向已知的位于防火墙外部的对等点 Peer C 发送消息,形成一个 HTTP 协议连接(HTTP Connection)。Peer C 在收到对等点 Peer A 发送的消息时,就会采用 JXTA 的管道通信和 Peer B 建立连接 (JXTA Connection)。这样,一个想要的虚拟的连接就会在对等点 Peer A 和 Peer B 之间建立起来。图1-2 穿透防火墙和NAT策略4.3 Pipe及PBP在通信中的作用没有Pipe,节点之间就无法实现基于JXTA的通信方法,理解Pipe的工作方式至关重要。JXTA的Pipe不是内存中的数据结构,也不是硬盘中上的文件,它仅仅是封装在XM
37、L广告文档中的以ID为标志的标签或者名字,因此它是JXTA中的抽象概念,通过管道广告来唯一标示Pipe,输出管道要找到与其广告相同的输入管道才能发送数据。在建立管道时,注意先建立输入管道,然后建立输出管道。因为,输出管道在一定的时间和次数内探测不到输入管道的存在,就会主动放弃。否则,容易让网络系统在这些无休止的探测中瘫痪。利用管道发送消息,就要用到JXTA标准协议中的PBP(管道绑定协议),其实定位Pipe Advertisement到一个“物理管道末端(Endpoint)”的过程就称为绑定的过程,这个过程只动态的发生在通信的过程中,而且,JXTA的PIPE可以在不同时刻动态地绑定到不同的“物
38、理管道末端”,下面详细说明Peer之间利用PBP通信的过程。图1-3 管道绑定交换信息过程对等点 A 要通过管道发送消息给对等点 B,必须监听网络中是否有来自点 B的管道通告信息。如果没有点 B 的管道通告,那么点 A 就一直监听网络或者放弃发送消息给点 B。如果点 B 由管道通告创建了输入管道,并一致等待消息输入。当点 A 监听到管道通告后,为了能利用管道发送消息给点 B,点 A 必须用与点B 相同的管道通告,创建一个输出管道用于发送消息。这时候,点 A 发送管道绑定请求消息给所有它己知的对等点和集合点。当集合点 A 收到管道绑定请求消息后,检查它自己的缓存,是否自己的管道通告与 A 的管道
39、通告相匹配。没有相匹配的管道通告,这时就继续转发消息给点 B。点 B 收到管道绑定请求消息后,检查它自己的缓存,是否自己的管道通告与 A 的管道通告相匹配。存在匹配的管道通告,那么点 B 就发送管道绑定响应消息,并且在响应消息中包含自己对等点的通告。最后,点 A 接收管道绑定响应消息后,从响应消息中得知点 B的通告,获取点 B 的端点信息。有了端点信息就可以创建从点 A 到点 B 的虚拟通信通道,这时点 A 就可以发送消息给点 B 了。4.4 系统运行环境l 软件平台:在 Win32 平台下用 Java 语言开发,采用 JXTA J2SE 参考实现。开发工具使用 Eclipse。l 硬件平台:
40、开发在本机上进行,在本机构成一个 JXTA 虚拟网络。l 配置信息: 在本机上运行通信系统,必须配置成两个Peer节点,每个Peer的配置信息如下:Peer NameNode1Node2TransportTCP Enabled HTTP EnabledTCP Enabled HTTP EnabledHTTP AddressLocalhost port: 9710Localhost port :9720TCP AddressLocalhost port :9709Localhost port: 9719Act as Relay选中选中表1-1 两个节点的配置实例4.5 基于pipe的通信流程在设
41、计系统的结构时,我们主要考虑是将系统尽量离散化,使其不依赖特定的服务器,因而应用程序可以部署在一个 P2P 网络上,每个应用程序作为一个端点,同时充当服务器和客户机Pipe(管道)是基于JXTA通信的重要一环,JXTA中提供了Pipe的API,主要有两个包组成:net.jxta.pipe以及net.jxta.impl.pipe,前者主要是定义一些接口,就是JXTA管道服务需要实现的功能与JXTA规范密切相关,而后者是前者的实现,是我们编程过程中实际用到的部分,它们的结构类似1、基于Pipe的通信过程如图所示: 图1-4 Pipe的基本通信过程。l 接收方的Peer需要具备一个Pipe Adve
42、rtisement,然后根据这个Pipe Advertisement创建一个Input Pipe,然后等待Message的到达。l 发送方的Peer使用相同的Pipe Advertisement,并根据这个Pipe Advertisement创建一个Output Pipe以发送数据。要创建Output Pipe,它要先发送一个Pipe Binding Query Message给所有它所知道的Peers。l 接收方收到这个Pipe Binding Query Message,看看自己缓存的Pipes中有没有匹配的Pipe ID。如果有,它就回复一个Pipe Binding Answer Mes
43、sage(包含了自己的Peer Advertisement)给对方。l 发送方接收到Pipe Binding Answer Message后,将Peer Advertisement从中抽取出来。然后使用Peer Advertisement中的Endpoint信息来创建Output Pipe,这样发送方才可以发送数据。以上分析可知,基于Pipe通信的连接过程都需要创建、绑定Input Pipe(包括创建监听器)、创建Output Pipe才能通信,为了避免代码重复,我们将所有基本的过程放在一个P2PSocket的模块里。利用P2PSocket这个模块,可以开发包括通信在内的其它P2P应用程序,例
44、如文件传输程序。用户通过P2PSocket建立连接之后,创建传输的消息,随后利用Output Pipe传输消息,在相应的Input Pipe的监听器将捕获这个事件,获得传输过来的消息,最终显示消息。基于P2PSocket模块的通信程序的流程如图五所示。图1-5 P2PChat 流程图。4.6 对等组模块4.6.1 创建/加入对等组JXTA中的一个重要的概念就是对等组,对等组提供一系列的基础服务,这些服务使用JXTA协议为对等组提供的必要的功能,如管道服务、成员资格服务等等。在建立对等平台以后,就可以建立用户级的对等组,在对等组中定义发布自己的服务。Chatpg类负责发现并加入chatNet对等
45、组,如果没有发现chatNet对等组,那么该对等体将创建chatNet对等组。Chatpg类的结构比较简单:1. 使用PeerGroupFactory方法创建NetPeerGroup对等组来启动JXTA平台。2. 发现现有的chatNet对等组广告l 寻找本地缓存中以前发现的广告,查看有无chatNet对等组广告。l 发送PDP请求,通过广播类型机制或者通过联系已知的汇聚对等体以发现chatNet对等组广告。l 等待响应的到来。l 再次查询本地缓存中的响应。3. 如果没有找到现有的chatNet对等组广告,那么就为之创建一个对等组广告,接着启动NetPeerGroup发现服务,发布chatNe
46、t广告,最后根据该广告创建chatNet对等组。4. 如果找到现有的chatNet对等组广告,那么就使用发现广告来加入对等组。4.6.2 代码详细实现1、平台启动:private void startJxta() try /创建加入默认组 netpg = PeerGroupFactory.newNetPeerGroup(); catch (PeerGroupException e) System.out.println("Fatal error:creating the net PeerGroup"); System.exit(1); try joinchatpg();/加
47、入对等组chatNet catch (Exception e) System.out.println("Can't join or create chatNet"); System.exit(1); 2、加入或创建对等组 private void joinchatNet() throws Exception int count = 3; /查找三次 / 从NetPeergroup获取发现服务 DiscoveryService hdisco = netpg.getDiscoveryService(); Enumeration ae = null; / 定义一向量,用于
48、保存查找结果 while (count- > 0) try / 首先在当地缓存中查找该对等组广告 ae = hdisco.getLocalAdvertisements(DiscoveryService.GROUP,"Name", "chatNet"); if (ae != null) && ae.hasMoreElements() break;/加入找到该对等组广告,就退出循环 / 本地没有找到,就发送一个远程查询请求 hdisco.getRemoteAdvertisements(null, DiscoveryService.GRO
49、UP, "Name", "RestoNet", 1, null); try Thread.sleep(3000);/休眠3秒等待查询请求结果 catch (InterruptedException ie) catch (IOException e) PeerGroupAdvertisement chatNetAdv = null; / 假如还没有发现对等组,那接下来就创建它 if (ae = null | !ae.hasMoreElements() System.out.println("Could not find the RestoNet
50、peergroup; creating one"); try ModuleImplAdvertisement implAdv = netpg.getAllPurposePeerGroupImplAdvertisement();/创建一般性的对等组广告 chatNet = netpg.newGroup( mkGroupID(), / 赋予该对等组一个ID implAdv, / 用于生成对等组的广告 "chatNet", / 该对等组的名称 "chatNet is one of chat peergroups");/ 对这个组的描述 / 得到对等组
51、广告 chatNetAdv = netpg.getPeerGroupAdvertisement(); catch (Exception e) System.out.println("Error in creating RestoNet Peergroup"); throw e; else / 假如在本地缓存中发现该对等组广告,那就加入该对等组 try chatNetAdv = (PeerGroupAdvertisement) ae.nextElement(); chatNet = netpg.newGroup(chatNetAdv); System.out.println(
52、 "Found the RestoNet Peergroup advertisement; joined existing group"); catch (Exception e) System.out.println("Error in creating chatNet PeerGroup from existing adv"); throw e; try / 从chatNet对等组获得发现服务和管道服务 disco = chatNet.getDiscoveryService(); pipes = chatNet.getPipeService(); c
53、atch (Exception e) System.out.println("Error getting services from chatNet"); throw e; return; 3、需要指出,如果对等体找不到chatNet对等组组,那么它们要创建相同的chatNet对等组,我们不想碰到不同的对等体创建不同版本的chatNet对等组,通过使用mkGroupID的方法和与定义的字符串,就可以生成定义对等组ID的URL,这样保证chatNet对等组ID的唯一。private PeerGroupID mkGroupID() throws Exception String groupURL = "jxta:uuid-4d6172676572696e204272756e6f202002" return (PeerGroupID) IDFactory.fro
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 盐城师范学院《算法实现训练》2021-2022学年期末试卷
- 2024工程材料合同范本
- 北师大版四年级上册数学第三单元 乘法 测试卷【研优卷】
- 2024商品房买卖合同样本
- 2024年电子测量仪器项目合作计划书
- 盐城师范学院《建筑概论》2021-2022学年第一学期期末试卷
- 2024年厢式改装车、特种车辆项目建议书
- 员工在签署竞业禁止协议前的必要声明与确认(2024年版)
- 2024销售佣金合同模板
- 2024临街门面出租合同
- 以人民为中心
- 2024年盾构机电缆行业分析报告及未来发展趋势
- 运维培训课件
- 慢性咳嗽中医护理宣教
- 伐檀课件教案
- 供应链中心组织架构
- 小学教育中的体验式学习方法
- 《机房技术培训》课件
- 装载机操作安全规程培训
- 透析中低血压的预防及防治
- Part1-2 Unit5 Ancient Civilization教案-【中职专用】高一英语精研课堂(高教版2021·基础模块2)
评论
0/150
提交评论