DOC文档JXTA,P2P通信系统(源代码,使用手册等放在CSDN了)doc

更新时间:2023-04-08 18:06:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

JXTA框架下P2P即时通信系统的研究与实现

摘要

相对于传统的C/S网络模式,P2P(Peer to Peer)网络具有其独特的优势,使其能在优胜劣汰的准则下占有一席之地。P2P网络的非中心性,消除了服务器的性能瓶颈问题,它的可扩展性,表现为使用系统的用户越多,系统的性能越强大,它的分布式特性,使得资源的可用性大大地增强了。P2P网络技术正被使用到分布式计算、协同工作、搜索引擎和文件共享等多个应用中。

JXTA是一个由SUN公司推出的开源项目。它的目的是提供一个支持P2P 网络应用开发的网络计算平台,它为开发新的应用程序提供了基本的模块和服务。它为构建P2P网络制订了一组独立于语言和网络的协议,使得应用程序的开发不局限于特定的语言,消息的传送不必使用特定的网络协议。由JXTA开发的应用程序具有跨平台、跨网络的特性。

本文研究并实现了一个JXTA框架下的P2P即时通信系统。该系统主要包含一个聊天模块和一个文件传输模块,它可以作为我们正在开发的计算机辅助教学系统中信息和文件传输的底层通信模块。

关键词:JXTA、P2P、即时通信、文件传输

第 1 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

ABSTRACT

Compared with the traditional C/S network framework, the P2P network has unique advantages, which makes itself become outstanding under fierce competition. Firstly, the non-centrality of P2P network eliminates the bottleneck of the server capability. Secondly, its scalability turns out that the more system users it has the stronger function it operates. Thirdly, its distributed characteristic greatly enlarges the usability of resources. The P2P network technology is now being used in the application of distributed computing, cooperative work, search engine, file sharing, and so on.

JXTA, which is an open source program, is launched by Sun Microsystems Inc. It aims at providing a computing network platform that supports the P2P network application development, as well as a basic module and service for developing new application program. What’s more, it formulates a group of protocols, which is independent from language and network, for structuring P2P network. Then, the development of application program would not be confined to specific language, and the transmission of message would not be confined to specific network protocol. So, the application program developed by JXTA owns the characteristic of cross-platform and cross-network.

This dissertation analyzes and actualizes a P2P instant messaging system under the framework of JXTA. This system mainly contains a chatting module and file transmitting module, which could be utilized as the fundamental message and file transmitting module of our being developed computer assisted instruction system

Keywords: JXTA, P2P, instant messaging, file transfer

第 2 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

摘要 (1)

第1章前言 (4)

1.1课题开发的目的及意义 (4)

1.2 课题研究现状 (4)

第2章技术背景 (6)

2.1 P2P技术 (6)

2.1.1 P2P的概念 (6)

2.1.2 P2P与C/S方式的对比 (6)

2.1.3 P2P网络的特点 (8)

2.1.4 P2P的应用领域 (9)

2.2 JXTA框架 (10)

2.2.1 JXTA概述 (10)

2.2.2 JXTA的发现机制 (18)

2.2.3 JXTA管道API (19)

2.2.4 JXTA网络服务 (21)

2.2.5 JXTA安全 (22)

第3章 P2P即时通信系统的分析与设计 (24)

3.1 系统需求分析 (24)

3.2 系统功能设计 (25)

第4章 P2P即时通信系统的实现 (28)

4.1 开发与运行环境 (28)

4.2 对等组服务的实现 (28)

4.3 系统运行说明 (30)

第5章总结与展望 (37)

5.1 总结 (37)

5.2 工作展望 (37)

参考文献 (38)

致谢............................................................................................. 错误!未定义书签。

第 3 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

第1章前言

1.1课题开发的目的及意义

C/S结构的服务器在多人同时访问时所承受的压力比较大,服务器通常也比较昂贵。在负荷过重的时候,访问速度通常都比较缓慢,甚至可能会发生拒绝服务的情况,严重影响正常的工作活动。这样的服务器较容易受到黑客的攻击,产生不可估计的损失。在服务器不是很强的情况下,采用P2P结构可以缓解服务器的压力。由于P2P网络结构没有特定的服务器,服务的提供方可以是任何能上网的计算机,使得服务的可靠性和灵活性都有所增强。

计算机辅助教学系统是目前教学的一个重要辅助手段,现存的计算机辅助教学系统大多采用C/S结构,网络应用集中在少量服务器上,虽然基本可以满足课堂教学的需求,但大量的客户端不能相互交流,只能与服务器打交道,造成大量的资源浪费。学校的非盈利性,决定了不能靠随意升级服务器来提供更多的服务。采用P2P网络结构可有效避免传统的C/S所带来的问题。本课题所设计的即时通信系统可以作为计算机辅助教学系统信息和文件传输的底层通信模块。

1.2 课题研究现状

开展P2P研究的学术团体主要包括P2P工作组(P2PWG) 、全球网格论坛(Global Grid Forum ,GGF) 。P2P工作组成立的主要目的是希望加速P2P计算基础设施的建立和相应的标准化工作。P2PWG成立之后,对P2P计算中的术语进行了统一,也形成相关的草案,但是在标准化方面工作进展缓慢。目前P2PWG已经和GGF合并,由该论坛管理P2P计算相关的工作。GGF负责网格计算和P2P计算等相关的标准化工作。

Sun公司以Java技术为背景,开展了JXTA项目。JXTA是基于Java的开源P2P平台,任何个人和组织均可以加入该项目。因此,该项目吸引了大批P2P研究人员和开发人员。JXTA定义了一组核心业务:认证、资源发现和管理。在安全方面,JXTA加入了加密软件包,允许使用该加密包进行数据加密,从而保证消息的隐私、可认证性和完整性。在JXTA核心服务之上,还定义了包括内容管理、信息搜索以及服务管理在内的各种其它可选的JXTA服务。在核心服务和可选服务的基础上,用户可以开发各种JXTA 平台上的P2P应用。

第 4 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

P4P全称“Proactive network Provider Participation for P2P”,是P2P技术的升级版,意在加强服务供应商(ISP)与客户端程序的通信,降低骨干网络传输压力和运营成本,并提高P2P文件传输的性能。与P2P随机挑选Peer(对等体)不同,P4P协议可以协调网络拓扑数据,能够有效选择Peer,从而提高网络路由效率。P2P软件的应用吞噬了巨量的网络带宽,这使得运营商头痛不已,新提出的P4P技术很有可能可以解决吞噬网络带宽的问题。P4P是智能选取数据交换对象,更多地通过智能运算选择同一路由器或者地域性网络来进行数据交换,最大程度上解决大型节点和网络出口的负载,通过智能选择数据交换对象也能大大提高数据传输的能力。

第 5 页共38 页

JXTA 框架下P2P 即时通信系统的研究与实现

第 6 页 共 38 页 第2章 技术背景

本章主要介绍了P2P 技术,包括P2P 的概念、特点、应用领域,JXTA 开发平台的简介、基本概念、协议架构以及基于JXTA 平台的开发方法。

2.1 P2P 技术

2.1.1 P2P 的概念

P2P 是peer-to-peer 的缩写,中文为对等网络或点对点网络,通常简称为P2P 。P2P 让人们通过互联网直接交互,让用户可以直接连接到其他用户的计算机进行通信和文件交换,而不像传统的browser/server 或者client/server 结构那样需要经过服务器的介入,它改变了互联网以服务器为中心的状态。P2P 网络中的每一台计算机既能充当网络服务的请求者,又能对其它计算机的请求做出响应,提供资源与服务,也就是说既可以充当服务器,也能充当客户机的角色。P2P 大大地提高了存储设备、带宽和计算资源的使用率。所有接入P2P 网络的设备都以对等的身份进行连接,组成一个对等网络,各对等体之间可任意通讯而不需通过服务器的中转,系统提供的服务分布在各个对等体上,消除了单点故障,提高了资源利用率,增强了网络的健壮性。系统具有良好的升级能力和几乎无限的扩充能力,完全适应网络伸缩性的变化。

2.1.2 P2P 与C/S 方式的对比

传统的客户/服务器(Client/Server ,简称C/S )结构,如图2.1所示。绝大部分数据处理都集中在服务器上,客户端只做少量的工作。

C/S 模式的优点是对客户端的配置要求比较低,维护可集中在服务器上进行,对客户可以做到完全透明的升级。这样的结构有一些缺点:第一,由于服务本身的处理绝大部分集中在服务器上,随着用户数量的增

加,服

图2.1 C/S 网络结构图

服务器

通信信道

客户端

JXTA 框架下P2P 即时通信系统的研究与实现

第 7 页 共 38 页 务器的负载和带宽要求也相应地增加,最终导致服务器不能再处理额外的用户请求。第二,因为只有服务器能够提供服务,所以一旦服务器由于某种原因不在线,用户就不能得到服务。第三,客户端的资源得不到充分利用。C/S 模式对客户端的要求比较低,它们处于一个被动的地位,它们能够从服务器那里请求服务,但不能向其它客户端提供任何服务,而目前主流的PC 配置都比较强大,因此对于大多数互联网应用来说是一种资源浪费。第四,大部分的常用服务是以服务器为中心,它们具有静态IP 地址,任何用户只要知道它们易记的域名就可访问它们。不过伴随着互联网不断地发展,有限的IP 地址使得网络服务提供商为上网的机器动态分配IP 地址,静态IP 地址相对比较昂贵。

P2P 方式则有着显著的不同,对等网络计算不依赖于一个中心服务器提供服务。如图2.2所示,它改变了C/S 模式的结构,采用了平等的结构。对等网络允许间接连接的计算机互相发现,使得这些计算机都可以同时作为服务器与客户机,并能够发现对等网络中可用的服务。

在对等网络中,可以通过各种通信方式利用整个网络的带宽。把提供服务的负担分散在网络的各个对等体(Peer)上,既消除了因为单点故障而造成的服务中断,又可以使用各种各样的路由,从而缓解网络的拥挤状态。

在C/S 模式中为了提供可靠的服务,需要额外的昂贵的带宽、设备和配套设施,而对等网络通过把这些资源需求分散在对等网络来提供类似的可靠性保证。

不过对等网络结构的冗余特点也给对等网络计算带来了一些不利。一、由于服务的分布性和网络的复杂性,对服务的请求可能不能及时得到响应,甚至不可能得到响应。二、网络上提供资源的计算机断开连接后资

源便会

能上网的

电子设备

通信信道

图2.2 P 2 P 网络结构图

JXTA框架下P2P即时通信系统的研究与实现

消失。三、对等网络不利于维护,C/S模式的维护主要集中在服务器端,但对等网络则需要对整个网络进行维护。

但是,对等网络可以克服这些局限。大量互联的对等体可以降低服务请求无应答现象出现的概率。虽然资源有时会消失,但可以通过在多个对等体上提供资源的冗余访问来保证资源的可用性。总之,由对等网络结构带来的弊端,也可以用其自身结构的优势去解决。

2.1.3 P2P网络的特点

P2P是一种完全分散式的网络体系结构,系统中的任何一个对等体都处于同等的地位,它既可以扮演客户机,也可以扮演服务器,减少了传统C/S 结构对服务器计算能力、存储能力的要求。资源分布在多个对等体,因此能更好地实现了整个网络的负载均衡。P2P网络的特点如下: (1)非中心性

信息的传输和服务的实现都直接在对等体之间进行,无需服务器的介入,避免了服务器出现瓶颈的情况。每个对等体既是服务器又是客户机,减少了C/S结构对服务器计算能力、存储能力的较高要求。网络资源分布在多个对等体上,能更好地实现整个网络的负载均衡。

P2P的非中心性特点,带来了其在可扩展性、鲁棒性等方面的优势。

(2)可扩展性

在P2P网络中,用户可以在适当的范围内自动发现附近的服务。由于没有集中式的服务器监管,所以不存在服务器资源不足的问题。P2P网络随着用户的加入,虽然服务的需求增加了,不过系统整体的资源和服务的能力也在同步地扩充,始终能比较好地满足用户的需要。在理论上其可扩展性几乎可以认为是无限的。例如:通过FTP协议下载文件,当下载用户增加之后,下载速度会变得越来越慢,然而P2P网络正好相反,加入的用户越多,P2P网络中能提供资源的用户就越多,下载的速度也就越快。

(3)健壮性

编写精良的、利用了网络的动态本质的P2P应用程序具有优秀的容错能力,P2P应用程序能包容其它服务或网络的错误。P2P架构天生具有的耐攻击和高容错的优点,使其能更容易地处理网络难以捉摸的变化。由于服务分散在各个对等体中,因此P2P网络不容易受到网络出错或拒绝服务攻击的影响。虽然这些问题仍将影响P2P网络里的个别参与者,但它们的问题不会对网络里的其它人造成普遍影响。P2P网络一般能在部分对等体失效时自动调整整体拓扑结构,保持其它对等体的连通性。P2P网络通常都是由一群对相同服务或资源感兴趣的对等体以自组织的方式建立起来的。P2P应用能在需要时动态地、自动地发现服务和其它资源。

第8 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

(4)高性价比

性能优势是P2P被广泛关注的一个重要原因。随着硬件技术的发展,个人计算机的计算和存储能力以及网络带宽等性能依照摩尔定理高速增长。采用P2P架构可以有效地利用互联网中散布的大量普通对等体,将计算任务或存储资料分布到所有对等体上,利用其闲置的计算能力和存储空间,达到高性能计算和海量存储的目的。

2.1.4.P2P的应用领域

与传统的C/S系统相比,P2P技术具有无可比拟的优势。目前,Internet 上各种P2P应用软件层出不穷,用户数量急剧增加。除了最初的文件交换应用,又出现了分布式存储、深度搜索、对等计算、即时通信和协同工作等新的应用。P2P已成为当今软件技术的前沿热点。目前,P2P计算技术正被应用到军事、商业、政府、通信等领域。根据具体应用的不同,可以把P2P应用大致分为以下四种类型:

(1)分布式计算

分布式计算的思想是利用网络把众多计算机闲置的计算能力聚集起来,使用积累的强大的计算能力执行超级计算机的任务。任何需要大量数据处理的行业都可应用对等计算来进行处理。本质上,对等计算就是网络上CPU资源的共享。比较有代表性的系统是SETI@home,该项目是美国加州大学伯克利分校的空间科学实验室研究的,利用P2P技术将网络上空闲的CPU组合起来,形成巨大的计算能力,用来分析无线电信号,搜寻能够证实外星智能生物存在的证据。该程序是在屏幕保护模式下运行的,利用的是多余的处理器资源,不影响用户正常使用计算机。各个节点计算完成后,向主服务器传输结果,再获取新的数据进行下一轮的计算。

(2)协同工作

公司机构的日益分散,使得给员工和客户提供方便的协作工具变得日益重要。网络的出现,使协同工作成为了可能。协同工作是指多个用户之间利用网络中的协同计算平台互相协作来完成任务。协同工作一般包括实时通信、共享白板、协同写作,甚至进行视频会议等应用。

(3)搜索引擎

P2P技术的另一个优势是开发强大的搜索工具。P2P搜索技术使用户能够深度搜索文档。而且这种搜索无需通过Web服务器,也可以不受信息文档格式和宿主设备的限制,可达到传统目录式搜索引擎无可比拟的深度。目前,集中式搜索引擎如Google、雅虎、百度是人们在网络中检索信息资源的主要工具,但这种集中式的搜索引擎远远无法涵盖所有互联网内的共享内容,而P2P搜索技术正好是这种集中式检索的一种良性互补。可以说,

第9 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

P2P为互联网的信息搜索提供了全新的解决之道。著名的搜索引擎公司Google也宣称要采用P2P技术来改进其搜索引擎。

(4)文件共享

在传统的Web方式中,要实现文件交换需要服务器的大力参与,通过将文件上传到某个特定的网站,用户再到某个网站搜索需要的文件,然后下载,这种方式的不便之处不言而喻。P2P非常适合解决大范围交换的问题。文件共享系统是P2P应用的一个主要方面,目前已经有多种文件共享系统被广泛地使用。例如:Napster、Gnutella、eMule、Maze、BT等。

当然P2P的应用绝不仅仅只有上述的几种类型,随着新需求的提出,新的应用也会伴随着发展起来。P2P技术影响了整个计算机网络的概念和人们信息获取的模式,真正实现了“网络就是计算机,计算机就是网络”的概念。P2P引导了网络计算模式从集中式向分布式转移,网络应用的核心从中央服务器向分布在网络中的终端设备扩散。这使人们在Internet上的共享行为被提到了一个更高的层次,使人们以更主动的方式参与到网络中。

2.2 JXTA框架

2.2.1 JXTA概述

JXTA是Sun公司推出的一个针对分布计算尤其是点对点(P2P peer to peer )计算的合作研究项目,它是一个开源项目,目标是为对等网络应用开发提供一个开放的网络计算平台,为开发新的应用程序提供基本的模块和服务。JXTA是Juxtapose的缩写,意思是“并列、并置”。JXTA为构建P2P网络制订了一组独立于语言和网络的协议,使得应用程序的开发不局限于特定的语言,消息的传送不必使用特定的网络协议。特别需要指出的是JXTA不是API,虽然有标准的语言绑定可以用于JXTA协议,但是这种绑定不是强制的。JXTA被设计成独立于编程语言,可以用C/C++,Java、Perl 等编程语言实现。JXTA传输可以建立在TCP/IP、HTTP、蓝牙或者其它传输协议之上。开发者可以利用JXTA开发相互操作的P2P服务或应用,位于不同网络的对等体可以容易地采用标准的JXTA协议进行通信。现在流行着很多的P2P应用,不过大多数应用都是按照全统的开发方法,从底层开始开发,并互不兼容,JXTA就是试图提供能构建P2P应用的公共平台。JXTA将P2P网络中对等体的行为进行了标准化,封装了这些行为和通信协议,从而使开发者易于使用JXTA平台开发出特定的P2P服务与应用,而不需要过多地考虑如何解决对等计算的底层技术问题,可以潜心关注于建设各类新颖的、创造性的P2P高层应用。JXTA使用XML文档对资源进行描述,XML文

第10 页共38 页

JXTA 框架下P2P 即时通信系统的研究与实现

第 11 页 共 38 页 档本身的通用性使得使用JXTA 所构造的应用的平台无关性增强了。本系统采用Java 绑定的JXTA 作为开发平台。

JXTA 定义了三个层次结构(如图2.3所示):

(1)平台层或核心层

该层封装额最小限度的和基本的原语,这些原语对于P2P 联网来说是共同的,包括对等体、对等组、发现、通信、监控和相关的安全原语。在理想的情况下,该层由所有的P2P 设备共享,使得它们具有协同工作的能力。

(2)服务层

该层包含的网络服务对于P2P 网络的运转来说可能不是必需的,但是这些服务是共同的或者P2P 环境需要使用的服务。网络服务的实例包括搜索和索引、内容、存储系统、文件共享、分布式文件系统、资源聚合和租借、协议转换、身份验证和PKI 等服务。

(3)应用层

该层包含了P2P 即时消息、内容管理和传递、P2P 电子邮件系统、分布式拍卖系统和许多其他的系统。服务层与应用层之间的界限并不是严格的。一个客户的应用程序在另一客户看来可能是服务。

JXTA 框架中的一些重要的概念解释如下:

(1)对等体

任何实现了核心JXTA 协议的网络设备都是对等体。每个对等体的运转都独立且异步于所有其他对等体。由于特殊的关系(网关或路由器),某些对等体可能更加依赖于其他的对等体。对等体自动地在网络中互相发现,以形成短暂的或持久的关系,这种关系叫做对等组。对等组是具有

一些共

JXTA框架下P2P即时通信系统的研究与实现

同兴趣的对等体的集合。对等组也可以被静态地预先定义。对等体可以向其他对等体发布网络资源(CPU、存储空间、路由)。对等体可以缓存信息,这是可选的。对等体可以持久地保持缓存信息。对等体一般只与少量的其他对等体进行交互。切忌对对等体的可靠性或连通性做出任何假定,任何时候对等体都可能在网络中出现或者离开网络。对等体可以提供能够由其他对等体使用的网络服务。对等体可以拥有多个网络接口,但是一个对等体不是必须使用JXTA协议去发布它的所有接口。每个已发布的接口都被通告为一个对等体端点。对等体端点是唯一标识对等体网络接口的URI。对等体使用对等体端点在两个对等体之间建立直接的点对点连接。由于缺少物理的网络连接或网络配置(NAT、防火墙、代理等),对等体可能没有直接的点对点网络连接。对等体可能不得不使用一个或多个中间对等体去向另一个对等体发送消息。每个对等体都由一个对等体ID唯一标识。

(2)对等组

对等体自组织成为对等组。对等组是具有共同兴趣的对等体的集合。每个对等组都由一个对等组ID唯一标识。JXTA协议不规定何时、何地或为何创建对等组。JXTA协议只描述对等体如何发布、发现、加入和监视对等组。JXTA认可三种创建对等组的动机:

①创建安全的环境

对等组的边界允许作为成员的对等体访问和发布受保护的内容。对等组用限制访问对等组资源的边界组成了逻辑区域。对等组可以不表现出像路由器和防火墙施加的那种底层的物理网络边界。对等组虚拟化了路由器和防火墙的概念,在不考虑实际的物理网络边界的情况下可以在安全区域中对网络进行细分。

②创建作用域环境

对等组一般由具有共同兴趣的对等体自组织而成。虽然对于对等组的构成方式没有强加任何特定的规则,但是兴趣相同的对等体趋向于加入相同的对等组。对等组将网络细分为抽象区域,提供隐式的作用域机制。当搜索对等组的内容时,对等组的边界可定义搜索范围。

③创建监视环境

对等组允许对等体为了任何特定的目的(信跳、流量自测等)而监视一组对等体。

一个对等组提供一组服务,该组服务叫做对等组服务。JXTA定义了一组核心的标准对等组服务。标准的核心对等组服务是:

①发现服务

对等组成员使用发现服务去搜索对等组资源(对等体、对等组、管道

第12 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

和服务)。

②成员资格服务

当前的成员使用成员资格服务去拒绝或接受一个新的对等体的入组的申请。我们希望大多数对等组至少拥有一个成员资格服务。但是该成员资格服务可能是一个不施加真正的成员资格策略的“空”验证服务。作为成员的对等体使用成员资格服务以允许新的对等体加入对等组。希望加入某一对等组的对等体必须首先定位一个当前的成员,然后申请加入。当前成员集合而成的组可拒绝或者接受请求加入的申请。成员资格服务可以执行对等体投票或者选举出一个小组,并指派该小组作为代表去接受或拒绝新的成员资格申请。

③访问服务

访问服务用于验证一个对等体向另一对等体发出的访问请求。收到请求的对等体根据请求对等体的证书和针对该访问服务做出的请求的信息,以决定是否允许访问。对等组内部的行为并非都需要访问服务的检查,只有那些仅允许某些对等体使用的行为才需要访问服务的检查。

④管道服务

管道服务用于管理和创建不同对等体成员之间的管道连接。

⑤解析器服务

解析器服务用于将查询引导到组内对等体上所运行的服务,并收集响应。

⑥监视服务

监视服务的用处是允许一个对等体监视同一对等组中的其他成员。

特别注意的是:对等组不是必须实现上述所有的服务。

(3)网络服务

对等体通过协作和通信去发布、发现和调用网络服务。一个对等体可以发布任意数量的服务。对等体通过对等体发现协议(Peer Discovery Protocol,PDP)发现网络服务。JXTA协议认可两种级别的网络服务:

①对等组服务

对等体服务只有在正发布该服务的对等体上才是可得到的。如果该对等体发生了故障,那么该服务也就失败了。该服务的多个实例可以在不同的对等体上运行,每个实例都可发布自己的通告并且是独立的。

②对等组服务

对等组服务由服务实例的集合组成,这些服务运行在该对等组的多个成员上,这些实例彼此协作。如果任何一个对等体发生了故障,则集体的对等组服务都不会受到影响,因为仍然可以从另一个对等体成员获取该服

第13 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

务。

对等组服务作为对等组通告的一部分进行发布。服务可以预先装入对等体或者从网络装载。JXTA协议发布和发现用于描述服务的通告而定义了一般性的框架。对等体通过PDP发布和发现通告。服务通告一般包括调用或实例化所描述服务所需的全部信息。这些协议定义了模块通告去保存服务描述,但也可以引入任何其他形式的服务描述。支持JXTA的服务使用一个JXTA管道作为服务调用的主要机制。每个支持JXTA的服务都由其模块规范ID唯一标识。

(4)管道

管道是用于在服务或应用程序之间通过端点发送和接收消息的虚拟通信信道。管道提供了对等体端点传输上的一种网络抽象。管道可以连接两个没有直接物理链接的对等体。一个或多个中间对等体端点用于在这两个对等体端点之间发送消息。对等体端点对应于可用的对等体网络接口,这些接口用于从其他对等体发送和接收数据。管道提供了一种虚拟的收发邮箱的假象,这种邮箱独立于任何单个对等体的位置和网络的拓扑结构(多跃点路由)。一个管道可以实现不同的服务质量。例如:单向异步、同步请求/响应、海量传输、流。管道连接一个或多个对等体端点。管道端点是指输入管道的终端(接收终端)和输出管道的终端(发送终端)。在运行时刻,管道端点可通过PBP动态地绑定到一个对等体端点上。管道绑定的过程包括搜索和连接两个或更多的与管道终端相关的端点。当一条消息被送入一个管道,该消息被本地的输出管道终端发送到当前正在监听该管道的目标输入管道终端。使用PBP去发现那组当前正在监听的对等体端点。管道提供两种通信模式:点对点管道、传播管道。点对点管道:点对点管道精确地将两个管道地终端连接在一起,输入管道的终端接收从输出管道终端发送来地消息。不支持响应或确认操作。可能需要消息有效载荷中附加信息(如一个惟一的ID)去排列消息的顺序。消息的有效载荷还可以包含一个管道通告,使用该管道通告可以为响应发送者开放一个管道(发送/响应)。传播管道:传播管道将一个输出管道的终端连接到多个输入管道的终端。消息从输出管道的终端(传播源)流入输入管道的终端。一个传播消息被发送给所有监听输入管道的端点。这一过程可能会创建所发送消息的多个副本。在TCP/IP中,当传播的范围以一种一对一的方式映射出一个底层的物理子网时,IP多播可能作为传播的一种最优化的实现而被采用。在不提供多播的传播中,可以使用点对点的通信来实现广播。

(5)消息

使用管道在端点间传输的信息被打包成一条消息。为了实现各种类型

第14 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

数据(XML或二进制)的高效传输,JXTA定义了一个二进制格式的信封去表示传输中的JXTA消息。所有的JXTA协议消息都定义为XML有效载荷。一条消息可以包含任意数量的已被命名的子部分,这些部分可以存储任何形式的数据。JXTA协议消息的目标是与W3C的XML协议标准相适应,所以JXTA协议可以在XML传输中实现。JXTA协议被指定为在对等体之间交换的一组XML消息。每个软件平台绑定都描述了一条消息如何与本地数据结构相互转换。为了定义协议使用了XML消息,这样就允许许多不同种类的对等体分享一个协议。每个对等体都以一种最适合其能力和任务的方式自由地实现该协议。

(6)通告

所有的网络资源(如对等体、对等组、管道和服务)都用通告来表示。通告是JXTA用于描述资源的与语言无关的元数据结构。由JXTA协议定义的通告是使用XML架构定义语言指定的。除了由XML和DTD提供的语法检测之外,使用XML架构定义语言还可以对内容执行严格的类型检查。JXTA 核心规范和标准服务定义了下列的通告类型:对等体通告、对等体通告、模块类通告、模块规范通告、模块实现通告、管道通告、汇聚通告。通告是在协议消息中进行交换的最普遍的文档。

(7)模块

模块的概念处于JXTA的与平台无关且策略透明的方法的中心。模块用于表示任意的代码段,为了实现一个新的行为,这些代码段可以在一个对等体上动态地装载和实例化。应用程序、网络服务和对等组策略是模块可以实例化和表示的行为的例子。JXTA模块抽象不强制或指定到底用什么来表示行为。代码可以用Java的类、Java的jar文件、动态链接库(DLL)、XML消息编排集(WSDL)或脚本来表示。可以存在同一模块的多个实现以支持各种运行时环境,使同一模块可以在不同平台上实现。模块为对等体装载和实例化新行为提供了一般的抽象。当对等体浏览或加入对等组时,对等体可能发现它们感兴趣或需要它们实例化的新行为。例如,当对等体加入一个对等组时,该对等体可能不得不实例化一个在该对等组中使用的特定的搜索服务。加入了该对等组,该对等体必须实例化这个新的搜索服务。JXTA平台使用模块来描述自己和默认的NetPeerGroup。

(8)证书

在动态和特定的P2P网络中,支持不同层次的资源访问的需要导致了一种基于角色的信任模型。在这种模型中,单个对等体在另一个可信的对等体授权的情况下采取行动去执行特定的任务。对等体的关系可能变化得非常快,而且当允许或拒绝访问时,管理访问控制的策略必须是灵活的。

第15 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

JXTA协议提供4个基本的用于保证安全的必要条件:机密性,保证消息的内容不泄漏给未被授权的个体。授权,保证发送者被授予了发送消息的权利。数据完整性,保证消息在传输过程中不被意外地或故意地修改。不可否认性,保证消息是由完全认明身份的发送者发送来的,而且该消息不是先前发送过的消息的重发。在消息主体中出现的证书是一个用于识别发送者的标志,还可以用于检验发送者向特定端点发送消息的权利。证书是每次发送消息时都必须提交的不透明的标志,放置在消息封包中的发送地址与证书中的发送者身份反复地进行核对。为了保证机密性和不可否认性,消息还可以被加密和签名。JXTA协议的目标是与普遍接收的为基于消息的体系结构服务的传输层安全机制兼容,例如安全套接字层和网络协议安全。但是,安全传输协议只为两个相互通信的对等体之间进行的消息传输提供完整性和机密性。为了在多跃点网络中提供安全的传输,就必须在所有的中间对等体之间建立可靠的联系。如果任何一个通信链接不是安全的,那么就会危及整体的安全。

(9)ID

JXTA协议中有许多需要惟一标识的实体。它们是对等体、对等组、管道和内容。一个JXTA ID唯一地标识一个实体,并作为引用该实体的一种规范的方式。JXTA ID用URN表示。

(10)内容

JXTA协议假定对等体之间可以共享、交换和复制很多种的内容。内容可以是文本文件、结构化文档、Java的jar或可装载的库、代码或者甚至是可执行的方法。内容的大小不受限制。内容在对等组的对等体成员之间发布和共享。内容可以只属于一个对等组。如果必须在两个不同的对等组中发布相同的数据,那么就必须创建两组包含相同数据的不同内容集。每组内容都由一个惟一的ID来标识。所有的内容都是通过发布内容通告让其他的成员知道它们的存在。内容的一个实例是它的一个副本。每个内容副本都可以在对等组中的不同对等体上进行复制。每个副本都有相同的内容ID和相似的值。在对等组内部复制内容有助于提高内容的单项可用性。例如,如果一个项目有两个实例存在于两个不同的对等体之上,则只需要其中一个对等体在线并对内容请求做出响应。JXTA协议没有规定如何复制内容。这个决定权留给了一个更高层的内容服务管理器。JXTA定义的是机制,而没有定义策略。

JXTA协议由6个为特定的、普及型且多跃点的P2P网络计算而设计的协议构成。使用JXTA协议,对等体就可以自行加入动态对等组,这一过程

第16 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

独立于它们在网络中的物理位置(边缘、NAT、防火墙),而且不需要集中管理的基础设施。JXTA协议提供了一种虚拟的网络表层,以隐藏位于底层的复杂的网络拓扑结构。它们的设计保证了低开销,而且尽量使得关于底层网络和对等体环境的假设做到了最少。它们提供了一个很薄的、通用的网络层,使得各种各样的P2P应用程序和服务都能够在非常不可靠且多变的网络环境中正常地运行。对等体使用JXTA协议去动态地通告和发现来自其他对等体的网络资源(服务、管道等)。对等体构成并加入对等组,这样就产生了特殊的关系。它们通过互相发送消息来进行协作,这样就使得同类的对等体在整个JXTA虚拟网络中具有了连通性。JXTA协议允许对等体在无需理解或管理复杂的底层网络拓扑结构的情况下进行通信。这些协议还允许对等体越过多个网络跃点动态地将消息发送到网络中的目的地(可能越过防火墙和NAT)。每条消息都携带了可路由该消息的完全有序或部分有序的网关对等体列表。如果路由信息时错误的,那么中间对等体有助于动态地发现一条新的路由。

这6个JXTA协议合作完成了对等体之间的路由、发现、组织、监控和通信。这6个协议分为两类:

·核心协议

·标准服务协议

(1)核心协议

JXTA核心协议规范(JXTA Core Protocol Specification)为对等体提供了在JXTA网络中进行连接、路由、发送和接收信息所需的最小限度的功能。JXTA核心规范详述了ID格式、通告架构、消息线格式和两个核心协议。两个核心协议分别是对等体端点协议和对等体解析器协议。

①对等体端点协议(Peer Endpoint Protocol,PEP)

该协议为对等体提供了一种机制来发现用于向另一个对等体发送消息的路由(跃点序列)。如果对等体A想向对等体C发送一条消息,而且在A 和C之间不存在直接的通路,那么对等体A需要去发现能将该消息发送给C 的中间对等体。PEP决定了路由信息。如果由于通路上的某一链接不能正常工作而导致网络的拓扑结构发生了改变,使得到C的通路不再可用,那么对等体可以使用PEP去发现其它对等体能够使用的路由来构造一条到C的通路。

②对等体解析器协议(Peer Resolver Protocol,PRP)

该协议为对等体提供了一种机制,使之可向一个或多个对等体发送查询并接收针对该查询的一个(或多个)响应。PRP实现了一个查询∕响应协议。通过包含在消息主体内的唯一的ID可将响应消息与查询相匹配。当通

第17 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

过PDP发现了一个对等体时,可以向该对等体发送一个查询。

(2)标准服务协议

JXTA可能需要实现许多可选的协议,这些协议不是核心协议规范的一部分,而是标准服务协议规范,应用时不需要实现所有的这些协议。标准服务规范详述了4个标准服务协议:

①对等体发现协议(Peer Discovery Protocol,PDP)

该协议为对等体提供了一种机制来通告自己的资源和发现其他对等体的资源(如对等组、服务、管道和附加对等体)。所有的对等体资源都是用通告来描述和发布的,通告是与程序设计语言无关的用来描述网络资源的元数据结构,用XML文档表示。

②汇聚协议(Pendezvous Protocol,RVP)

该协议为对等体提供了预定传播服务的机制。在对等组的内部,对等体可以成为汇聚对等体或者对汇聚对等体进行监听的对等体.。RVP允许对等体向服务的所有监听者发送消息。其它协议可使用RVP来实现高效地传播消息。

③对等体信息协议(Peer Information Protocol,PIP)

该协议为对等体提供了一种机制来获取其它对等体的状态和监视其他对等体信息,如状态、正常运行时间、流量负荷、容量等。

④管道绑定协议(Pipe Binding Protocol,PBP)

该协议为对等体提供了一种机制来与一个或多个对等体建立虚拟通信信道或管道。对等体可使用PBP去绑定连接的终端(管道端点)。

2.2.2 JXTA的发现机制

JXTA发现用于寻找所需的通告。对等体的发现范围对应于执行发现的对等组环境。该对等组的环境使得对等体能够在一个相对比较小的范围内执行发现操作,并减少了发现操作占用大量网络资源的风险。JXTA发现使用异步机制来发现通告。想要发现资源的对等体在选定的对等组范围内传播一个发现请求,该请求的响应是异步接收的。P2P网络的不可预料性和不可靠性,使得难以指定超时时间或预知行为。异步编程模型非常适合于这种不可靠的P2P网络环境。JXTA平台开发的程序都有一个后台线程自动将发现的通告放置到缓存中,不过开发人员不需要担心线程技术,因为JXTA 平台已经实现了这个技术。

在运行完JXTA开发的程序后,会在当前目录下自动新建一个叫“.jxta”的目录,其中包含多个其他目录。其中的cm目录是该平台的持久缓存目录,它包含着缓存在本地对等体的通告。缓存有其自身的优势和劣势。它可以大大加快发现的速度,因为它包含了程序先前发现的所有信息。不过并不

第18 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

能保证缓存中的通告仍然是有效的,他们可能指向已经废弃了的资源。为了防止陈旧通告可能带来的问题,JXTA给通告设定了使用期限,对于超过了使用期限的通告将自动删除。用户可以在需要的时候对缓存进行复位,这只需在启动程序前删除整个cm目录即可。相反的,用户也能手工把通告添加到缓存中,这只需简单地从现有的缓存中复制缓存文件到运行程序的cm目录下

发现的主要优势有两个:

①性能随着系统的使用而提升

性能随着系统的使用而提升是JXTA网络的一个特色。对等体发现新资源后,它将变得更加能干、高效。对等体首次尝试发现时会花费一些时间,第二次则会花费较少的时间,因为该对等体对先前的发现进行了缓存。值得注意的是:通告在其经过的所有中间对等体处都会被缓存。

②不可预料和不可靠网络的可靠性

对JXTA这样的P2P网络进行编程,要比可靠且可预知的传统网络更复杂。然而,由于一开始就设想了网络的不可靠性,JXTA终究能够使我们构建更可靠的程序。JXTA的编程模型看上去更为复杂,却能生成更健壮且可预知的网络应用程序。

所有的发现操作都由一个核心的JXTA发现服务来处理。发现服务的句柄可以通过调用对等组对象的getDiscovery()方法得到,该方法返回一个Discovery对象。Discovery类有两个用于发现通告的方法:

①getLocalAdvertisement()

该方法用于搜索本地缓存中已发现的通告。

②getRemoteAdvertisement()

该方法用于响对等组的成员发送一个发现请求。需要注意的是:在大多数情况下,发现请求不会到达所有的成员,期待所有对等体响应某个发现请求是不实际和不现实的。

2.2.3 JXTA管道API

JXTA定义了用于通告和使用管道的协议,所以任何JXTA对等体都能通过管道与任何其他的JXTA对等体进行通信,并且这两个进行通信的对等体不必用相同的语言进行编程。我使用的是由JXTA为管道编程所提供的Java API绑定。

PipeAdvertisement类:

当创建管道通告时,我们指定生成器创建一个PipeAdvertisement类

第19 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

的实例。管道通告包含三个属性:管道名、管道类型以及唯一的管道ID。这些属性必须在发布通告之前设置,通过使用PipeAdvertisement类的setPipeID()、setType()和setName()方法来完成属性的设置。

PipeID:

当创建管道通告时,必须赋予它一个新的管道ID,该ID在对等组中是唯一的。管道ID由IDFactory类的静态方法newPipeID()方法创建,该方法有一个PeerGroupID的参数,该参数指定管道所属的对等组。管道ID的内部表示是一个对等组ID和一个唯一的ID的结合。可以PipeID实例的getPeerGroupID()方法从管道ID中提取处对等组ID。

管道类型:

在管道通告中,必须指定所需的管道类型。JXTA提供的默认核心管道服务支持三种管道:

·单播型(UnicastType)

单播指管道是点对点的:在管道上传送的一条消息将被送到单一的网络地址。单播管道是不可靠且不安全的。“不可靠”指无法保证在管道上传送的消息将到达其目的地,而且这些消息在被接收时的次序可能是颠倒的。“不安全”指在管道上传输的数据不受保护:当数据通过管道时,网络上的入侵者能够查看该数据(在某些情况下还可以修改)。

·广播型(PropagateType)

广播管道是1对n的管道:在广播管道上发送的消息可以被多个接收者读取。广播管道用IP网络中的广播或多播套接字实现。在广播管道上传送的数据是不安全的。

·单播安全型(UnicastSecureType)

单播安全管道是不可靠但安全的。安全管道有两个特性:1、连接到安全管道的参与者经过了身份验证。2、通过管道传播的数据经过了加密,在传输过程中,数据不能被读取和修改。

管道端点的创建:

输入管道端点是使用对等组管道服务的createInputPipe()方法创建,该方法有一个参数,只要提供一个要在其上创建输入管道端点的管道通告即可建立输入管道端点。输出管道端点使用对等组管道服务的creatOutputPipe()方法创建,该方法有两个参数:一个要在其上创建输处管道端点的管道通告和一个等待管道解析的时间长度time-out。time-out 为找到与输出管道端点相对应的输入管道端点的时间,它是以毫秒为单位的整数,当取值为-1时代表creatOutput Pipe()方法将保持阻塞,知道该

第20 页共38 页

JXTA框架下P2P即时通信系统的研究与实现

端点得到解析。

消息的接收与发送:

使用输入管道端点的waitForMessage()方法或poll()方法可以读取到达端点的消息。waitForMessage()方法将保持阻塞直到一条消息到达,该方法返回一条新消息。如果输入管道端点关闭,该方法将返回空(null)。poll()方法是非阻塞的,有一个time-out参数,如果在给定时间内没有消息到达,该方法返回空(null),如果time-out的值为0,则pool()方法无限期地等待。

对等体间的信息交互过程如图2.4所示:

对等体1 对等体2

图2.4 对等体间的信息交互过程

2.2.4 JXTA网络服务

像任何一种JXTA资源一样,网络服务用通告来表示。服务通告是一个XML文档,其中包含了唯一识别某一服务地所有信息和调用该服所必需地全部消息。JXTA平台规定了两种服务:对等体服务和对等组服务。

对等体服务:

对等体服务只能由发布该服务地对等体来实例化。如果多个对等体都想提供该服务,那么在对等组内部可能会运行着该服务的多个实例,每个对等体都将分别通告该服务。通告对等体服务是通过发布遍及对等组的服务通告来完成的。对等组成员通过搜索服务通告来发现对等体服务。服务通告包含了调用该服务所必需的全部消息。直到至少有一个对等体实例化并通告了该服务之后,该服务才可用。如果对等体不可用了,则该服务也

第21 页共38 页

本文来源:https://www.bwwdw.com/article/mmol.html

Top