- 浏览: 425947 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Glogo:
楼主您好,我在试验您的代码的时候发现新开的三个子线程并没有一直 ...
java 高并发 ReentrantLock -- 可重入的锁 -
univasity:
最近发觉也被限速了,投诉一下就好一会~~ 看来明天又要和电信M ...
ADSL上网速度慢 都是帐号限速惹的祸 -
liuyuanhui0301:
java 高并发 ReentrantLock -- 可重入的锁 -
dang_java:
呵.很好的说明文档.
JXTA技术与应用发展 -
helloqidi:
谢谢,学习了
SQL中exists和in的区别
一、概述
美国Sun公司自从1995年向世界推出了Java语言以来,每年都会在Java领域里推出新的技
术,从JavaCard、J2ME到J2EE、JINI、JavaTV,推动了Java技术的发展和应用。在最近
几次的旧金山的JavaOne会议中,JXTA是该公司向业界推出的较新技术。该技术的目的是
为P2P的网络应用开发提供一个统一的平台,而且为了鼓励和支持该技术的发展,JXTA项
目采用了开放源码的方式,因此吸引了大量业界人士参与到JXTA技术的研究与应用当
中,JXTA Community(www.jxta.org)就是人气很旺的一个Java技术研究开发的网站。
JXTA最早起源于2000年的夏天,现在大家把JXTA看成是P2P的平台,JXTA的目标是要解决
几个技术与商业上的难题。第一是解决众多P2P系统互不相通的问题。2000年,是P2P突
飞猛进的高潮年,但高潮背后却是许多小公司用自己的封闭系统试图在Internet上圈一
块地。Sun认为,只有互通才能真正发挥出P2P的优势,就好像IM(Instant Messaging),
能互连的人越多,越有价值。所以Sun决定出面发布一个平台,使所有P2P系统都能连接
起来,只有Sun这样位置中立、但在技术上有雄存实力被大家认可的公司才有希望做成这
一平台。
JXTA的另外一个目的就是找寻一套数量最少、概念最简单的系统构成的“积木”。如果
成功,这几块积木就会是今后大家构架信息系统的基本模块,从而帮助人们摆脱像
Windows或TCP/IP这样的传统软件带来的包袱。Java、Jini和JXTA像是J的三部曲,Java
取自著名咖啡产地名,Jini是genie(精灵) 的谐音,而JXTA则是Juxtapose的缩写。当时
BillJoy用grep把所有J打头的英文词找出来,juxtapose跃然纸上,很是巧妙。既表现了
P2P或肩并肩的意义,又说明JXTA不局限于P2P。但JXTA与众不同,它是由一系列网络协
议构成的,用任何语言都可以实现,并不只限于Java,只有彻底独立于操作系统、网络
传输技术以及程序设计语言,才真正达到了跨平台,而这样的技术,最容易受到业界的
认同。
JXTA是项目创始人、Sun首席科学家BillJoy二十多年酝酿的结晶,“JXTA技术是网络编
程和计算的平台,用以解决现代分布计算尤其是点对点(P2P)计算中出现的问题。”JXTA
研究项目,将提供使用户更便捷地访问连接在互联网上的个人电脑资源的新框架,从而
进一步拓展互联网的空间。同时JXTA也是Sun的ONE互联网战略的延续,并且将更积极的
姿态与Microsoft的.Net战略和Hailstorm计划一争高低。Joy指出,JXTA可能是Sun One
平台最简单的一部分,而不是打算将它变成象微软的.Net那样复杂的东西,而且JXTA也
将是开放源代码的团体;有别于而微软的Passport和Hailstorm技术都是申请专利的专有
技术,Sun希望通过公开JXTA源代码的方式,成为微软最有力的竞争对手,在公开源代码
的领域中,Linux和Apache是卓越的成功典范,Sun也希望JXTA能铸造新的成功。
JXTA技术提供了基础性的机制解决当前分布计算应用中面临的问题,实现新一代统一、
安全、互操作以及异构的应用。目前它支持基于Java技术的平台和系统。而将来JATX技
术将不受到内存的限制而支持更多小型移动设备。JXTA通过Java技术和XML数据表达的结
合,提供了强大的功能使得垂直应用得以交互,并且可以克服目前P2P软件中的限制。同
时,通过小型、简单、便于开发的构造模块,JXTA将使开发者从建立各自框架的复杂工
作得以解放,可以潜心关注于建设各类新颖、创造性的、分布式计算应用。
二、JXTA 的设计目标及有关概念
一)P2P技术
P2P即Peer to Peer,称为对等连接或对等网络,P2P技术主要指由硬件形成连接后的信息
控制技术,其代表形式是软件;P2P并不是一个新的概念,因特网上的许多核心协议本身
就是P2P的应用程序,因特网的发展过程也说明了这一点,我们可以通过下述特性来描述
P2P:
Peer知道其他Peer的存在。
Peer在一个虚拟的网络中运行。
Peer同时具有Client和Server的特点。
多个Peer可以组成为一个Peer组。
从因特网的发展来看,目前已经完全有可能开发新的P2P应用程序来补充和取代现有的集
中式应用程序,文件共享程序和聊天程序的成功已经吸引了许多程序员加入P2P程序的开
发。而且随着技术的发展,P2P所面临的安全、控制和网络使用的问题将逐步解决。P2P
系统可以提供如下功能:
Peer的独立控制能力----用户将变得非常强大,可以创建自己的组和虚拟网络,而且可
以非常容易地发布自己的资源。
可靠性----P2P系统是任何人都可以获得的可靠系统。
扩展性----P2P系统的用户数量可以急剧膨胀,可以与最大的集中式系统媲美。
性能----各种资源之间可以协同工作来有效地解决问题。
P2P是一种基于互联网环境的新的应用型技术,主要为软件技术,P2P网络应用发展可能
要涉及到4个方面关键技术:
1) 对于互联网上众多计算机,P2P应用比其他应用要更多考虑那些低端PC的互联,它们
不具备服务器那样强的联网能力,同时对于以往的P2P应用技术,现在的硬件环境已经更
为复杂,这样在通信基础方面,P2P必须提供在现有硬件逻辑和底层通信协议上的端到端
定位(寻址)和握手技术,建立稳定的连接。涉及的技术有IP地址解析、NAT路由及防火
墙。
2) 在应用层面上,如果两个Peer分别代表两家不同的公司,而且它们已经通过互联网建
立连接,那么一方的信息就必须为另一方所识别,所以当前互联网上关于数据描述和交
换的协议,如XML、SOAP、UDDI等都是一个完善的P2P软件所要考虑的。
3) 有通信就要有安全保障,加密技术是必须要考虑的。
4) 其他需考虑的有如何设置中心服务器,如何控制网络规模等。
与P2P相关技术,有许多其他的技术被称做P2P,或者与P2P相关,或者可以被当作P2P使
用,主要是以下几方面内容:
JINI技术;
软件代理(Agent)技术;
JXTA的竞争者(Gnutella和Freenet等);
Web Services技术。
二)JXTA设计目标及层次结构
1、JXTA设计目标
首先,JXTA是为了构建P2P网络而制订的一组协议,是处理构建P2P网络所碰到的问题的
解决方法,JXTA标准协议规范介绍如下:
“JXTA由六个协议组成,这些协议是专为特定的、分布式的、对等的网络计算而设
计的。使用这些协议,Peer可以互相合作来建立自我组织、自我管理的对等组,而不必
关心它们在网络中所处的位置(在网络边缘或者防火墙的后面),并且也不需要集中的管
理机构。”
因此JXTA的核心是六个协议,其次,JXTA是P2P应用程序开发的运行平台;目前JXTA
首先推出了基于Java的参考实现,提供了支持六个协议的Java API,JXTA还将推出包括C
语言在内的其他编程语言的API,JXTA在设计时有如下几个目标:
操作系统无关
语言无关
为P2P应用提供服务和基础
从本质上讲,JXTA的目标是希望在任何设备,从台式机到PDA、汽车、洗衣机等设备
都可以支持P2P编程。这里有几个概念上的目标,它们包括:
使用组来组织Peer并且在组内提供服务和应用的环境。
组可以使用认证和验证方式来控制组内的访问权限。
通过网络来发布关于Peer和网络资源的信息。
通过系统来发布各种请求。
提供一个基础平台,供Peer之间做路由和通信。在防火墙或者其他障碍后面的Peer之间
的通信也是这个目标中很关键的一部分。
提供一种机制允许Peer之间可以彼此监视状态和资源。
除此之外还有一些其他目标,例如加密、支持不同的通信协议、易用性、稳定性和
性能等,所有这些目标在设计JXTA协议和最初的Java API时,都被考虑到,另外,开发
人员和Sun公司的管理者还考虑了以下目标:
系统应该允许任何设备直接加入到JXTA网络中去。
系统应该允许ISP对网络上的Peer进行集中管理。
系统应该支持数字产品版权的管理,例如购买的软件、音乐CD、电影等。
封装和抽象一些特定的核心功能,以便产生出商业方面的应用。
从上面列出的目标可以看出两点,首先要让企业觉得使用JXTA可以使自己对系统进行控
制,原因在于大部分P2P系统没有集中式的管理,所以在应用中不受企业的欢迎;其次,
对于硬件或者软件提供商来说,JXTA系统需要能够创造出利润。
根据以上这些目标,JXTA被设计成企业可以接受的、容易维护的、健壮的,并且能
够满足任何P2P应用的概念。
2、JXTA的层次结构
JXTA由三层组成,如图1所示。第一层是JXTA核心层,它包含了服务所需要的核心功能;
第二层是服务层,它提供了访问JXTA协议的接口;第三层是应用层,它使用服务来访问
JXTA网络和JXTA提供的功能。这样的设计和一个标准的操作系统比较相似,标准的操作
系统包括核心操作系统、服务和应用程序。
JXTA Sun JXTA
Applications JXTA Community Applications Applications JXTA
Shell
JXTA Sun JXTA -------
Services JXTA Community Services Services Peer
Commands
JXTA Peer Groups Peer Pipes Peer Monitoring
Core Security
Any Peer on the Expanded Web
图1 JXTA的层次结构
各层的说明如下所示:
核心层(JXTA Core):这一层封装了最根本的东西,包括Peer、对等组、Peer发现、Peer
通信、Peer监视和相关的安全原语。
服务层(JXTA Services):这一层包括对于P2P网络不是必需的、但很通用的功能,如查
找、共享、索引、代码缓存和内容缓存的机制。
应用层(JXTA Application):这一层包括了应用JXTA服务开发出来的完整的P2P应用程
序,例如myJXTA,JXTA-CAD等应用程序。
三)JXTA有关概念
在JXTA网络中,有一些概念是需要熟悉和理解的,它们是从JXTA协议中提出的一系列
的专有名词。
1、Peer(对等机)
Peer是一个虚拟的通信点。在一台计算机或者设备上可以有很多个Peer,一个Peer并
不是一个用户,因为一个用户可以有多个Peer,同一个设备上也可以有多个Peer(在测试
的时候经常用到)。因为Peer不等同于用户,所以需要将用户和Peer抽象出来并分离开。
Peer与特定的网络服务联系得很紧,在JXTA的参考实现中,Peer可以使用网络提供的
基本服务,例如rendezvous(集合点服务),router(路由服务),gateway(网关服务)等,
这些基本服务又可以提供搜索和通信服务,一般来说,并不是所有的Peer都使用这些服
务,它们只使用这些服务的一部分。
2、PeerGroup(对等组)
对等组是一种组织Peer并且发布组内的特定服务的方式。对等组可以被创建、加入和
退出,在一个组里还可以更新一个组成员的关系,由于一些原因,对等组需要对成员关
系进行一些限制,例如为了通信的安全、隐私的考虑等。这里使用一种协议来认证,它
专门收集信息并判断其是否符合成员关系的要求。
对等组为应用程序提供了一种环境,例如对某个话题感兴趣的Peer可以组成一个组,并
且在组内使用一个聊天服务来讨论。这样,聊天的信息就会限制在那些加入到这个组内
的成员之间。并且,对于想加入到这个组的Peer,可以使用成员ID来进行认证;没有这
个ID的Peer不能够加人到组内,也就不能够使用组内的聊天服务,也可以把对等组看成
一个虚拟的私人网络VPN,一个VPN只允许几个计算机之间互相交流,而不允许因特网上
其他的成员加入,由于VPN使用了加密的方式,对于偷听者他们不能够理解组内的谈话,
对等组也可以限制Peer的加入,同样也可以对谈话消息加密。
3、Endpoint(端点)
在JXTA应用中,端点是最基本的通信方法。一个端点就是实现了特定通信协议的Peer的
地址。一个Peer可以有多个端点,这样可以通过不同的协议来与其他Peer通信。
端点不一定要是物理地址,端点可以允许物理地址发生变化。端点的一个简单例子 就
是一个IP地址加上一个端口。通过使用这些值,可以打开一个流并且与目标Peer通信。
然而,JXTA在流的基础之上又放置了一层,称之为Pipe(管道)。这样,不是将一个流连
接到一个地址,而是把一个管道连接到端点上。端点和管道的好处在于,不用去关心
Peer所使用的真正的地址和协议是什么。使用抽象出来的端点和管道,可以为创建P2P应
用提供强大的功能并降低复杂性。由于管道使用通信协议来连接,端点描述了协议和连
接的所需要的信息。因此端点可以描述HTTP、TCP、BEEP以及其他可以支持的通信协议。
一个Peer可以支持一个或者多个端点。通过使用多种协议,Peer可以提供更有效率的方
法。也就是说,如果两个Peer都在防火墙的后面,可以直接通过它们的TCP端点来通信;
如果两个Peer要穿过防火墙去通信,则需要使用HTTP的端点。
4、Pipe(管道)
管道是Peer之间的虚拟通道,通常,我们认为对等通信是单个的通信连接,但是也并不
是总是这样的,因为防火墙和其他障碍的存在,许多Peer并不能直接连接,这时,管道
更像一个在多种通信协议之上的虚拟层,可以通过起网关作用的Peer对通信提供中继支
持。
管道是JXTA最基本、最重要的特性,它提供了一种很好的方案,使得Peer在大多数网络
情况下都可以通信,而不用去管防火墙或者其他的障碍,即使你不知道另外一个Peer的
位置以及它所使用的协议等信息,通过管道仍然可以与之通信;管道作为一种抽象的方
法,隐藏了一些细节,比如在多个连接的时候可能会有多个Peer参与进去,管道也可以
重新定位,找到原来的Peer。在JXTA的参考实现中,有几种常用到的管道,它们是:
单向异步----这种管道只用来做单向通信。管道是异步的,消息到达时可能不是顺序
的。这是JXTA平台上最基本的一种类型的管道。
同步的请求/应答----所有发出的信息都会收到一个应答消息,消息到达的顺序是按照它
们发送时候的顺序。
成批发送----用来发送大量的数据。
流传送----通过流可以更有效地传送诸如声音、视频等大量的数据。
双向----它是两个单向异步管道的组合。
单向同步----所有发出的信息都会收到一个应答消息,消息到达的顺序是按照它们发送
时候的顺序。
单向可靠安全的管道----所有发出的信息都会收到一个应答消息,并且这些消息都是加
密的。
管道还可以分成以下两种类型:
点到点类型----点到点的管道连接两个不同的Peer。可以使用多个起网关作用的Peer来
创建连接。
传播类型----将一个Peer连接到多个目标Peer。
现有的JXTA参考实现已经提供了单向异步管道、单向可靠安全管道和双向的管
道。 JXTA和传统的网络是非常不同的,大多数网络协议或者没有地址,或者有一个
固定的地址,而JXTA抽象出一个概念叫做端点,用来作为地址。一个Peer可以有多个端
点,Peer可以通过一种或者多种协议例如TCP、HTTP等进行通信,所以可以使用多个端
点,JXTA使用多种传输协议的目的是为了在与其他Peer通信时可以选择最好的方式。如
果一个Peer在企业的防火墙的后面,可以使用HTYP来与防火墙之外的Peer通信,还可以
使用TCP来与防火墙内局域网内部的Peer通信,通过灵活使用多个传输端口,对特定的
Peer使用特定的协议,以得到最好的速度和响应。
5、AdvertiSement(广告)
一个广告就是一个XML文档,它用来描述JXTA的消息、Peer、对等组或者服务等。
广告都遵守编码、标签和内容的标准,广告用来交换JXTA网络上可以获得的任何信息。
例如,一个Peer创建了名称为“MyChat”的对等组后,就可以使用IP多播方式把广告发
布到本地的JXTA网络;也就说,子网中的每一个Peer都会收到一份广告的副本,此外广
告还会被发送到集合点去。
Peer使用一种叫做集合点(Rendezvous)的特殊Peer来发现网络上其他地方的广告。
集合点Peer可以存储广告并且支持搜索。Peer可以使用对等组的名字或者其他属性来搜
寻该对等组广告。有了对等组的广告,其他的Peer就可以使用广告中的XML来实例化并加
入到“MyChat”这个对等组中。一旦成为对等组的成员之后,Pear可以使用对等组的环
境所提供的服务。
广告实际上是P2P网络中的“名片”,P2P网络中的任何资源,包括Peer、对等组、
管道等都可以用广告来描述,目前是在P2P网络中标志资源,并且可以相互找到; 大多
数JXTA广告的编码是使用UTF-8,它是对Unicode的一种ASCII编码方式,UTF-8使用的是8
位编码,Unicode使用的是16位编码,因此可以节省一半的空间,只有在消息体中间可能
会使用到完全的Unicode编码,在消息体里可以指定使用Unicode或者其他的字符集作为
编码方式。
6、Message(消息)
在JXTA中,有两种方式来处理消息。一种是使用XML格式,数据都遵循XML标准被包
装到消息里;另外一种是使用二进制格式。尽管希望对所有的JXTA消息都使用XML格式,
可是由于大量的消息需要传送,使用XML格式的消息会导致效率较低,而且由于消息通常
是在程序之间传送的,所以可以规范的消息内容使用二进制的格式;对于其他的仍然采
用XML格式。
在一个XML协议中使用二进制消息看起来似乎不太合理,但事实上使用二进制消息,
除了可以得到紧凑的格式之外还有很多其他优点。首先数据可以使用一些标准技术进行
压缩,对文本等数据的压缩可以节省大量的传输时间;另外,许多消息本身就是二进制
的格式,例如文件共享程序中共享的文档可能就是二进制的,因此可以直接使用二进制
的格式;还有一个问题就是加密,为了加密可以把数据转化成为二进制,然后直接使用
二进制的消息来传输。
7、Rendezvous Peer(集合点)
一个集合点首先是一个Peer,而且是一个能够处理来自其他Peer请求的Peer。集合
点也可以将请求委托给其他Peer,当然那些Peer也必须是集合点。使用集合点的一个主
要目的就是为了方便在本地网络之外搜索广告。集合点通常拥有更多资源,并且可以存
储大量的有关它周围Peer的信息。
集合点也可以作为搜索的传递者。集合点可以转发发现请求到其他的集合点(原集合
点通过与其他Peer的广告交互而得到了被转发集合点的信息)。每一个集合点如果本身没
有被请求的信息它都会转发该请求。
Peer3 防火墙
* * * TCP
IP多播 * TCP * HTTP * 返回45678的结果
通过TCP返回结果 * * *
Peer2---------------Peer1 返回45678 集合点4----------Peer8
IP多播 的结果 *
TCP * TCP
请求 * 返回567的结果
集合点5
* *
* *
Peer6 Peer7
图2 通过集合点进行Peer搜索的过程
图2说明了一个典型搜索过程。远程搜索从Peer1开始,它首先通过IP多播(IP
Multicast)询问本地的Peer2和Peer3,Peer2和Peer3很可能和Peerl处于同一个局域网
内,所以很快收到了搜索请求。接下来,如果Peer2和Peer3没有所搜索的特定资源,搜
索将通过集合点进行,Peer1会向它的集合点Peer发出搜索请求,如果该集合点Peer也没
有所需的广告信息,该集合点Peer会向它所知道的集合点Peer发出搜索请求。需要注意
的是,除了和提出查询请求的Peer处于同一局域网内的Peer收到查询请求外,在局域网
外只有集合点才会收到查询请求。
IP多播(IP Muhicast)是一个一到多的消息传输协议。IP多播用来发送数据的副本到
一组地址。在P2P应用程序中,IP多播有两个好处。首先,因为多播使用一个组地址而不
是使用IP地址,一个Peer可以在不知道接收者地址的情况下发送消息。这样做的结果是
在多播网络中的所有Peer都可以响应发出请求的Peer,将有关查询的结果信息、甚至是
自己的IP地址(用于与请求Peer直接通信)发送回去。
IP多播的第二个好处是减少使用带宽。因为所有的Peer都可以看到一个单一的消
息,没有必要向每一个Peer发送消息的一个副本。当发送大量的数据到一组Peer时,这
一点是非常重要的。使用多播的一个缺点是一些防火墙和路由器会阻塞多播的消息。在
因特网提供商之间通过因特网主干网可以支持多播消息,不过这种服务是需要额外付钱
的。还存在其他IP多播的障碍,比如个人防火墙、子网路由器。这就是为什么JXTA不是
仅仅支持IP多播的原因。一般情况下,只要在防火墙后能够支持多播对于大多数的P2P网
络就足够了。你可以这样来利用本地的多播,先将消息发送到每一个网络的某一个特定
的Peer上,然后该Peer又通过本地的多播将消息发送给本地的Peer。
只有集合点允许进行超出局域网的搜索。一个Peer可以选择成为一个集合点,但这
不是必须的,作为集合点好的一面是集合点可以缓存的形式保留从其他集合点得到的查
询结果的副本;不好的一面是,该Peer将占用很多的内存和带宽。由于请求数量可能很
多并且大量的广告数据会消耗很多的计算机资源,在这种情况下我们可以选择将计算机
作为专用的集合点。集合点同时可以作为企业内部网的网关和路由器,其效果和使用传
统的路由器是一致的。在每一个子网内也需要使用一个集合点,是否选择使用专用的集
合点Peer取决于安全性的要求和使用的P2P应用的范围。P2P网络的拓扑结构需要通过多
个的例子来进行测试并且需要定期监控。特别要注意的是:当P2P网络的服务在大量Peer
上存有副本时,P2P网络的效率更高。有些时候并不是额外的集合点就可以提高网络的效
率。
当一个Peer在搜索广告时或者是其他服务使用集合点机制来路由消息时,集合点才
被使用,因此一个Peer对集合点的需要不是持续的;为了能够更好地发挥作用,一个连
接到因特网的集合点最好尽可能地暴露给网络上的多个Peer,在防火墙内把所有的Peer
都配置为集合点不一定能够发挥很大的作用。
8、RouterPeer(路由Peer)
JXTA中的一个路由Peer是一个支持Peer端点协议的Peer,不是所有的Peer都需要实
现该协议,因为和传统的网络路由器一样,我们只需要少数几个路由器去支持一个大网
络,JXTA路由器和传统的路由器非常相像,最主要的区别是P2P不是非常固定并且包括了
很多非静态地址。
9、GatewayPeer(网关Peer)
JXTA中的一个网关Peer是一个作为通信中继的Peer。网关Peer和集合点的不同之处
在于,网关是用来在Peer间传递消息,而集合点是用来传递请求的,网关Peer就像是无
线电转发器或者说是Peer间的一个中介,它传递消息,因为有防火墙、NAT设备和代理服
务器的存在,网关对网络的连通具有决定性的作用,网关可以存储消息,并且等待希望
得到这些消息的接收者来收集它们。
网关的存在是因为因特网非常混乱。混乱的原因是有各种各样的用于防止Peer间通
过公用访问方法通信的安全保障和障碍物,另一个原因是各个Peer所支持的协议是不同
的,一些Peer可能使用TCP,另一些可能使用HTTP。在无线情况下,我们需要使用无线应
用协议(WAP),网关尽可能多地支持这些协议,因此它可以作为不同类型协议间的中介,
JXTA目前支持TCP和HTTP,不过对其他协议的支持正在开发中。
在因特网上网关是与大多数安全机制交互的关键,防火墙、代理服务器和NAT设备是
主要的安全屏障。
Peer1
* TCP管道
因特网 *
网关对等机2
*
防火墙或NAT的边界 *
--------------------------------*------------------------
局域网 * HTTP管道
*
Peer3
图3 通过网关对等机进行Peer间的通信
图3说明网关Peer2是怎样作为Peer1和Peer3之间的交互接口的。网关将从Peer1来的TCP
消息转换成HTTP消息传递给Peer3。当消息从Peer1发出时,是通过TCP发往网关Peer2,
网关Peer2存储了这个消息,直到Peer3向它发出获得消息的HTTP请求。
三、JXTA协议
有六个协议构成了JXTA的核心,JXTA通过这六个协议来完成Peer之间的通信,彼此之间
的资源的发布和发现,信息的传递和路由,协议本身并不是应用程序,需要添加更多的
代码来开发有用的应用,协议隐藏了很多细节,这样使得编写JXTA应用程序比从空白开
发P2P应用要容易得多。
JXTA在JXTA协议规范中定义了它的协议。此规范描述了Peer间如何通信和交互,它
并未描述实现的细节或如何编写P2P应用程序,下面是JXTA协议的列表,其中包含了协议
名称的首字母缩略词,这六个协议如图4所示。
Peer Discovery Pipe Binding Peer Information
Protocol Protocol
Peer Resolver Protocol
Peer Endpoint Rendezvous
Protocol Protocol
图4 JXTA的核心协议
1、对等机发现协议Peer Discovery Protocol(PDP):主要用来发布自己的广告信
息,并且从其他Peer处获得广告。PDP允许一个Peer发现其他Peer的广告(包括Peer广
告、对等组广告、服务广告,或者是管道广告)。该协议通过指定一种广告类型(如
Peer、对等组)、一个XML标签名、一个匹配这个XML标签所表示数据的字符串来定义查
询。它使用Peer Resolver Protocol来发送和传播搜索广告的请求。
2、管道绑定协议Pipe Binding Protocol(PBP):允许Peer之间建立虚拟的通信通
道。
该协议首要关注的是通过Peer端点路由协议提供的路由连接Peer。它使用Peer
Resolver Protocol来发送和传播搜索广告的请求。
3、对等机信息协议Peer Information Protocol(PIP):用来获得其他Peer的状态信
息,包括更新时间、状态等等。该协议有时被用做ping命令,有时被用来获得一个Peer
的基本状态信息,PIP消息的正文是自由格式的,它允许询问特定的Peer信息。此外,这
种能力可以被扩展以提供控制能力,它使用Peer Resolver Protocol来发送和传播搜索
广告的请求。
4、对等机解析协议Peer Resolver Protocol(PRP):允许Peer发送更一般的请求,
并可以接收到该请求的回应;同时可以将请求分发到组内的一个或者多个匹配的处理
器,Peer解析协议是一个基础通信协议,它按照一种请求/响应格式来进行,要使用这个
协议,需要提供一个查询的Peer和一个包含能被目标Peer理解的XML请求消息,该协议被
用来支持JXTA中的其他协议(PDP、PBP和PIP),而且允许传播查询,例如,如果一个Peer
收到一个查询并且不知道答案,解析协议就会将该查询发送给别的Peer。
5、端点路由协议Peer Endpoint Protocol(PEP):通过该协议Peer以发送消息的形
式获得一条路由路径。它使用Peer间的网关来建立一条包含一个或多个适合建立管道的
管道协议组成的通路。管道绑定协议借助此Peer列表来建立Peer间的路由。一般情况下
传统的路由器和DNS服务器会因为防火墙、代理服务器和NAT设备等原因而无法建立连
接,而端点路由协议通过寻找网关来穿越诸如防火墙等障碍来建立连接。端点路由协议
还可以同时帮助相互不支持对方使用协议的Peer进行通信。例如,如果你连接支持TCP的
Peer-A和只支持HTTP的Peer-B,端点路由协议既可以选择一个可以支持此传输的网关,
又可以选择多个并且相互协议兼容的一组网关。
6、集合点协议Rendezvous Protocol(RVP):通过该协议Peer可以对一个服务订阅或
者被订阅。集合点协议负责在JXTA对等组内传播消息,它为Peer在组内接收和发送消息
并且控制消息如何传播定义了一个基本的协议。
从编写P2P应用程序的角度而言,可以简单地划分上述协议的主要用途:
Peer Discovery----搜索资源
Peer Resolver----一般查询服务
Peer Information----监控
Pipe Binding----可寻址的消息传递
Rendezvous----消息传播
PeerEndpoint----路由
四、JXTA的应用与发展
一)JXTA的应用
1、即时通信和文件共享(myJXTA)
myJXTA是在J2SE平台上的一个JXTA演示程序,主要为展示JXTA项目和P2P的一些概念,它
提供了一些功能,诸如安全的一对一的交谈、组内的交谈、组内文档的共享、搜索和下
载等。myJXTA使用JXTA平台的核心服务,完成发现组、加入组和创建组的功能;还有在
两个Peer 间创建连接,完成一对一的交谈;或者在组内建立连接,完成组内的交谈以及
组内文件的搜索和下载。该程序的主要目的是未了展示基于JXTA协议的P2P的工作方式。
2、网络游戏(Chess)
JXTA技术已在许多游戏应用方面得到了展示,一个互动式的国际象棋比赛的应用程
序使用JXTA来传递两个棋手间的对奕过程,并将它展现给观众,国际象棋游戏和“tic-
tac-toe"游戏都可以用来展示JXTA在小型设备上的应用,一个游戏者可以创建一个新的
JXTAPeer组并邀请全世界其他游戏者加入他的游戏,当然也可以限制他人进入他的游戏
组。
3、协同工作
JXTA技术已经展示它在协同工作应用程序中的能力。用JXTA开发出来的集成开发环境可
以允许一个以上的开发者同时开发一个软件程序;另外一个协作式的JXTA应用程序允许
几个人同时编辑同一个电子数据表。其他JXTA项目中开发的合作开发工具包则利用了
JXTA进行会话、共享浏览和文件共享。
由于具有通话功能,JXTA技术在合作开发中拥有这样一个优点:一个应用程序的开
发不需依赖于服务器或其他中央管理系统。JXTA处理新发现的节点,并保证路线通畅,
在用户和交互式应用程序间交换消息。
4、聊天程序
JXTA非常适合编写聊天程序,而且可以有多种实现方法,包括完全的集中式、代理方式
到完全非集中式。而且一个非常有意思的情况是,用JXTA来实现一个集中式的聊天程序
非常困难,而实现完全非集中式的聊天程序反而简单,因为JXTA平台本身已经完全解决
了底层Peer之间的发现和通信问题。在现有的JXTA项目中已经有许多聊天程序的例子,
包括myJXTA应用程序(原先称为InstantP2P)、JXTA shell中的Talk命令、HotWire应用程
序和其他几个编程指南。
5、JXTA 社区
JXTA是一个开放源代码的项目,它是由JXTA社区http://www.jxta.org在推动发展。在这
个站点上可以获取最新的JXTA文档和程序代码,而且你可以注册并加入到正在进行中的
JXTA项目,参与并推动项目的进展;这些项目分类存放,为用户展示了JXTA各方面的功
能;此外,站点上还有邮件列表,都是JXTA开发人员和P2P参与者就感兴趣的问题的讨
论。
二)JXTA的发展
1、各种语言的实现
目前JXTA只有Java的实现版本,以至于大家谈到JXTA都认为它是用Java开发的一套P2P框
架,而忽略了JXTA的实质只是一套独立于各种平台和语言的协议。因此在各种语言上实
现JXTA成为一项非常重要的工作。只有这样,因特网上的用各种各样语言实现的应用软
件就可以只需改写网络部分的代码而转换到JXTA平台上来。这不但大大地节省了工作
量,而且将会吸引大量因为各种原因无法采用Java语言的软件加入到JXTA中来,从而大
大促进JXTA协议的发展。现在正在进行的其他语言的实现有C,Perl,Python,
Smalltalk等等,显然这还远远不够,也许我们将来需要看到用Pascal,VB,C#实现的版
本。
2、各种平台的实现
跨平台,这是Java已经实现了的目标,但是并不表示JXTA就无事可做,一个真正的P2P网
络不仅仅是包括PC这个大家目前已经熟悉的设备,它还应该包含各种现在以及将来能够
连到因特网上的设备。头一个目标显然是PDA和手机这种移动设备,JXTA for J2ME以及
PocketJxta都已经在进行中,而且已经可以使用;但是,我们还要考虑到将来的各种设
备,这其中主要是各种各样的嵌人式设备。如果这些设备都运行JXTA平台,那么我们将
看到一个真正的P2P世界。
3、各种应用
有好的应用,一个平台是不可能流行起来的。目前在jxta.org上登记的应用开发项目有
多个,相比现实世界中的各种网络软件的数目,这个数字实在是很小。目前的JXTA应用
主要集中在即时通信和文件共享上面,这似乎成了P2P的代名词。但是如果只局限于这些
应用,JXTA的应用范围将会很有限。
4、Service
Service在JXTA中扮演着极其重要的角色,所有JXTA协议的实现都是以Service的形式存
在着的。除了几个核心服务外,目前JXTA上有多个关于Service的项目正在开展着,从某
种程度上来说,Service比Application更重要;如果没有好的Service,也就产生不了多
少好的应用,在这些进行中的Service中,Search是其中关键的环节,在没有中心服务器
的P2P网络中,如何有效地进行查找成为一个关键问题,与此同时,还需做到尽可能地减
少占用的带宽。
美国Sun公司自从1995年向世界推出了Java语言以来,每年都会在Java领域里推出新的技
术,从JavaCard、J2ME到J2EE、JINI、JavaTV,推动了Java技术的发展和应用。在最近
几次的旧金山的JavaOne会议中,JXTA是该公司向业界推出的较新技术。该技术的目的是
为P2P的网络应用开发提供一个统一的平台,而且为了鼓励和支持该技术的发展,JXTA项
目采用了开放源码的方式,因此吸引了大量业界人士参与到JXTA技术的研究与应用当
中,JXTA Community(www.jxta.org)就是人气很旺的一个Java技术研究开发的网站。
JXTA最早起源于2000年的夏天,现在大家把JXTA看成是P2P的平台,JXTA的目标是要解决
几个技术与商业上的难题。第一是解决众多P2P系统互不相通的问题。2000年,是P2P突
飞猛进的高潮年,但高潮背后却是许多小公司用自己的封闭系统试图在Internet上圈一
块地。Sun认为,只有互通才能真正发挥出P2P的优势,就好像IM(Instant Messaging),
能互连的人越多,越有价值。所以Sun决定出面发布一个平台,使所有P2P系统都能连接
起来,只有Sun这样位置中立、但在技术上有雄存实力被大家认可的公司才有希望做成这
一平台。
JXTA的另外一个目的就是找寻一套数量最少、概念最简单的系统构成的“积木”。如果
成功,这几块积木就会是今后大家构架信息系统的基本模块,从而帮助人们摆脱像
Windows或TCP/IP这样的传统软件带来的包袱。Java、Jini和JXTA像是J的三部曲,Java
取自著名咖啡产地名,Jini是genie(精灵) 的谐音,而JXTA则是Juxtapose的缩写。当时
BillJoy用grep把所有J打头的英文词找出来,juxtapose跃然纸上,很是巧妙。既表现了
P2P或肩并肩的意义,又说明JXTA不局限于P2P。但JXTA与众不同,它是由一系列网络协
议构成的,用任何语言都可以实现,并不只限于Java,只有彻底独立于操作系统、网络
传输技术以及程序设计语言,才真正达到了跨平台,而这样的技术,最容易受到业界的
认同。
JXTA是项目创始人、Sun首席科学家BillJoy二十多年酝酿的结晶,“JXTA技术是网络编
程和计算的平台,用以解决现代分布计算尤其是点对点(P2P)计算中出现的问题。”JXTA
研究项目,将提供使用户更便捷地访问连接在互联网上的个人电脑资源的新框架,从而
进一步拓展互联网的空间。同时JXTA也是Sun的ONE互联网战略的延续,并且将更积极的
姿态与Microsoft的.Net战略和Hailstorm计划一争高低。Joy指出,JXTA可能是Sun One
平台最简单的一部分,而不是打算将它变成象微软的.Net那样复杂的东西,而且JXTA也
将是开放源代码的团体;有别于而微软的Passport和Hailstorm技术都是申请专利的专有
技术,Sun希望通过公开JXTA源代码的方式,成为微软最有力的竞争对手,在公开源代码
的领域中,Linux和Apache是卓越的成功典范,Sun也希望JXTA能铸造新的成功。
JXTA技术提供了基础性的机制解决当前分布计算应用中面临的问题,实现新一代统一、
安全、互操作以及异构的应用。目前它支持基于Java技术的平台和系统。而将来JATX技
术将不受到内存的限制而支持更多小型移动设备。JXTA通过Java技术和XML数据表达的结
合,提供了强大的功能使得垂直应用得以交互,并且可以克服目前P2P软件中的限制。同
时,通过小型、简单、便于开发的构造模块,JXTA将使开发者从建立各自框架的复杂工
作得以解放,可以潜心关注于建设各类新颖、创造性的、分布式计算应用。
二、JXTA 的设计目标及有关概念
一)P2P技术
P2P即Peer to Peer,称为对等连接或对等网络,P2P技术主要指由硬件形成连接后的信息
控制技术,其代表形式是软件;P2P并不是一个新的概念,因特网上的许多核心协议本身
就是P2P的应用程序,因特网的发展过程也说明了这一点,我们可以通过下述特性来描述
P2P:
Peer知道其他Peer的存在。
Peer在一个虚拟的网络中运行。
Peer同时具有Client和Server的特点。
多个Peer可以组成为一个Peer组。
从因特网的发展来看,目前已经完全有可能开发新的P2P应用程序来补充和取代现有的集
中式应用程序,文件共享程序和聊天程序的成功已经吸引了许多程序员加入P2P程序的开
发。而且随着技术的发展,P2P所面临的安全、控制和网络使用的问题将逐步解决。P2P
系统可以提供如下功能:
Peer的独立控制能力----用户将变得非常强大,可以创建自己的组和虚拟网络,而且可
以非常容易地发布自己的资源。
可靠性----P2P系统是任何人都可以获得的可靠系统。
扩展性----P2P系统的用户数量可以急剧膨胀,可以与最大的集中式系统媲美。
性能----各种资源之间可以协同工作来有效地解决问题。
P2P是一种基于互联网环境的新的应用型技术,主要为软件技术,P2P网络应用发展可能
要涉及到4个方面关键技术:
1) 对于互联网上众多计算机,P2P应用比其他应用要更多考虑那些低端PC的互联,它们
不具备服务器那样强的联网能力,同时对于以往的P2P应用技术,现在的硬件环境已经更
为复杂,这样在通信基础方面,P2P必须提供在现有硬件逻辑和底层通信协议上的端到端
定位(寻址)和握手技术,建立稳定的连接。涉及的技术有IP地址解析、NAT路由及防火
墙。
2) 在应用层面上,如果两个Peer分别代表两家不同的公司,而且它们已经通过互联网建
立连接,那么一方的信息就必须为另一方所识别,所以当前互联网上关于数据描述和交
换的协议,如XML、SOAP、UDDI等都是一个完善的P2P软件所要考虑的。
3) 有通信就要有安全保障,加密技术是必须要考虑的。
4) 其他需考虑的有如何设置中心服务器,如何控制网络规模等。
与P2P相关技术,有许多其他的技术被称做P2P,或者与P2P相关,或者可以被当作P2P使
用,主要是以下几方面内容:
JINI技术;
软件代理(Agent)技术;
JXTA的竞争者(Gnutella和Freenet等);
Web Services技术。
二)JXTA设计目标及层次结构
1、JXTA设计目标
首先,JXTA是为了构建P2P网络而制订的一组协议,是处理构建P2P网络所碰到的问题的
解决方法,JXTA标准协议规范介绍如下:
“JXTA由六个协议组成,这些协议是专为特定的、分布式的、对等的网络计算而设
计的。使用这些协议,Peer可以互相合作来建立自我组织、自我管理的对等组,而不必
关心它们在网络中所处的位置(在网络边缘或者防火墙的后面),并且也不需要集中的管
理机构。”
因此JXTA的核心是六个协议,其次,JXTA是P2P应用程序开发的运行平台;目前JXTA
首先推出了基于Java的参考实现,提供了支持六个协议的Java API,JXTA还将推出包括C
语言在内的其他编程语言的API,JXTA在设计时有如下几个目标:
操作系统无关
语言无关
为P2P应用提供服务和基础
从本质上讲,JXTA的目标是希望在任何设备,从台式机到PDA、汽车、洗衣机等设备
都可以支持P2P编程。这里有几个概念上的目标,它们包括:
使用组来组织Peer并且在组内提供服务和应用的环境。
组可以使用认证和验证方式来控制组内的访问权限。
通过网络来发布关于Peer和网络资源的信息。
通过系统来发布各种请求。
提供一个基础平台,供Peer之间做路由和通信。在防火墙或者其他障碍后面的Peer之间
的通信也是这个目标中很关键的一部分。
提供一种机制允许Peer之间可以彼此监视状态和资源。
除此之外还有一些其他目标,例如加密、支持不同的通信协议、易用性、稳定性和
性能等,所有这些目标在设计JXTA协议和最初的Java API时,都被考虑到,另外,开发
人员和Sun公司的管理者还考虑了以下目标:
系统应该允许任何设备直接加入到JXTA网络中去。
系统应该允许ISP对网络上的Peer进行集中管理。
系统应该支持数字产品版权的管理,例如购买的软件、音乐CD、电影等。
封装和抽象一些特定的核心功能,以便产生出商业方面的应用。
从上面列出的目标可以看出两点,首先要让企业觉得使用JXTA可以使自己对系统进行控
制,原因在于大部分P2P系统没有集中式的管理,所以在应用中不受企业的欢迎;其次,
对于硬件或者软件提供商来说,JXTA系统需要能够创造出利润。
根据以上这些目标,JXTA被设计成企业可以接受的、容易维护的、健壮的,并且能
够满足任何P2P应用的概念。
2、JXTA的层次结构
JXTA由三层组成,如图1所示。第一层是JXTA核心层,它包含了服务所需要的核心功能;
第二层是服务层,它提供了访问JXTA协议的接口;第三层是应用层,它使用服务来访问
JXTA网络和JXTA提供的功能。这样的设计和一个标准的操作系统比较相似,标准的操作
系统包括核心操作系统、服务和应用程序。
JXTA Sun JXTA
Applications JXTA Community Applications Applications JXTA
Shell
JXTA Sun JXTA -------
Services JXTA Community Services Services Peer
Commands
JXTA Peer Groups Peer Pipes Peer Monitoring
Core Security
Any Peer on the Expanded Web
图1 JXTA的层次结构
各层的说明如下所示:
核心层(JXTA Core):这一层封装了最根本的东西,包括Peer、对等组、Peer发现、Peer
通信、Peer监视和相关的安全原语。
服务层(JXTA Services):这一层包括对于P2P网络不是必需的、但很通用的功能,如查
找、共享、索引、代码缓存和内容缓存的机制。
应用层(JXTA Application):这一层包括了应用JXTA服务开发出来的完整的P2P应用程
序,例如myJXTA,JXTA-CAD等应用程序。
三)JXTA有关概念
在JXTA网络中,有一些概念是需要熟悉和理解的,它们是从JXTA协议中提出的一系列
的专有名词。
1、Peer(对等机)
Peer是一个虚拟的通信点。在一台计算机或者设备上可以有很多个Peer,一个Peer并
不是一个用户,因为一个用户可以有多个Peer,同一个设备上也可以有多个Peer(在测试
的时候经常用到)。因为Peer不等同于用户,所以需要将用户和Peer抽象出来并分离开。
Peer与特定的网络服务联系得很紧,在JXTA的参考实现中,Peer可以使用网络提供的
基本服务,例如rendezvous(集合点服务),router(路由服务),gateway(网关服务)等,
这些基本服务又可以提供搜索和通信服务,一般来说,并不是所有的Peer都使用这些服
务,它们只使用这些服务的一部分。
2、PeerGroup(对等组)
对等组是一种组织Peer并且发布组内的特定服务的方式。对等组可以被创建、加入和
退出,在一个组里还可以更新一个组成员的关系,由于一些原因,对等组需要对成员关
系进行一些限制,例如为了通信的安全、隐私的考虑等。这里使用一种协议来认证,它
专门收集信息并判断其是否符合成员关系的要求。
对等组为应用程序提供了一种环境,例如对某个话题感兴趣的Peer可以组成一个组,并
且在组内使用一个聊天服务来讨论。这样,聊天的信息就会限制在那些加入到这个组内
的成员之间。并且,对于想加入到这个组的Peer,可以使用成员ID来进行认证;没有这
个ID的Peer不能够加人到组内,也就不能够使用组内的聊天服务,也可以把对等组看成
一个虚拟的私人网络VPN,一个VPN只允许几个计算机之间互相交流,而不允许因特网上
其他的成员加入,由于VPN使用了加密的方式,对于偷听者他们不能够理解组内的谈话,
对等组也可以限制Peer的加入,同样也可以对谈话消息加密。
3、Endpoint(端点)
在JXTA应用中,端点是最基本的通信方法。一个端点就是实现了特定通信协议的Peer的
地址。一个Peer可以有多个端点,这样可以通过不同的协议来与其他Peer通信。
端点不一定要是物理地址,端点可以允许物理地址发生变化。端点的一个简单例子 就
是一个IP地址加上一个端口。通过使用这些值,可以打开一个流并且与目标Peer通信。
然而,JXTA在流的基础之上又放置了一层,称之为Pipe(管道)。这样,不是将一个流连
接到一个地址,而是把一个管道连接到端点上。端点和管道的好处在于,不用去关心
Peer所使用的真正的地址和协议是什么。使用抽象出来的端点和管道,可以为创建P2P应
用提供强大的功能并降低复杂性。由于管道使用通信协议来连接,端点描述了协议和连
接的所需要的信息。因此端点可以描述HTTP、TCP、BEEP以及其他可以支持的通信协议。
一个Peer可以支持一个或者多个端点。通过使用多种协议,Peer可以提供更有效率的方
法。也就是说,如果两个Peer都在防火墙的后面,可以直接通过它们的TCP端点来通信;
如果两个Peer要穿过防火墙去通信,则需要使用HTTP的端点。
4、Pipe(管道)
管道是Peer之间的虚拟通道,通常,我们认为对等通信是单个的通信连接,但是也并不
是总是这样的,因为防火墙和其他障碍的存在,许多Peer并不能直接连接,这时,管道
更像一个在多种通信协议之上的虚拟层,可以通过起网关作用的Peer对通信提供中继支
持。
管道是JXTA最基本、最重要的特性,它提供了一种很好的方案,使得Peer在大多数网络
情况下都可以通信,而不用去管防火墙或者其他的障碍,即使你不知道另外一个Peer的
位置以及它所使用的协议等信息,通过管道仍然可以与之通信;管道作为一种抽象的方
法,隐藏了一些细节,比如在多个连接的时候可能会有多个Peer参与进去,管道也可以
重新定位,找到原来的Peer。在JXTA的参考实现中,有几种常用到的管道,它们是:
单向异步----这种管道只用来做单向通信。管道是异步的,消息到达时可能不是顺序
的。这是JXTA平台上最基本的一种类型的管道。
同步的请求/应答----所有发出的信息都会收到一个应答消息,消息到达的顺序是按照它
们发送时候的顺序。
成批发送----用来发送大量的数据。
流传送----通过流可以更有效地传送诸如声音、视频等大量的数据。
双向----它是两个单向异步管道的组合。
单向同步----所有发出的信息都会收到一个应答消息,消息到达的顺序是按照它们发送
时候的顺序。
单向可靠安全的管道----所有发出的信息都会收到一个应答消息,并且这些消息都是加
密的。
管道还可以分成以下两种类型:
点到点类型----点到点的管道连接两个不同的Peer。可以使用多个起网关作用的Peer来
创建连接。
传播类型----将一个Peer连接到多个目标Peer。
现有的JXTA参考实现已经提供了单向异步管道、单向可靠安全管道和双向的管
道。 JXTA和传统的网络是非常不同的,大多数网络协议或者没有地址,或者有一个
固定的地址,而JXTA抽象出一个概念叫做端点,用来作为地址。一个Peer可以有多个端
点,Peer可以通过一种或者多种协议例如TCP、HTTP等进行通信,所以可以使用多个端
点,JXTA使用多种传输协议的目的是为了在与其他Peer通信时可以选择最好的方式。如
果一个Peer在企业的防火墙的后面,可以使用HTYP来与防火墙之外的Peer通信,还可以
使用TCP来与防火墙内局域网内部的Peer通信,通过灵活使用多个传输端口,对特定的
Peer使用特定的协议,以得到最好的速度和响应。
5、AdvertiSement(广告)
一个广告就是一个XML文档,它用来描述JXTA的消息、Peer、对等组或者服务等。
广告都遵守编码、标签和内容的标准,广告用来交换JXTA网络上可以获得的任何信息。
例如,一个Peer创建了名称为“MyChat”的对等组后,就可以使用IP多播方式把广告发
布到本地的JXTA网络;也就说,子网中的每一个Peer都会收到一份广告的副本,此外广
告还会被发送到集合点去。
Peer使用一种叫做集合点(Rendezvous)的特殊Peer来发现网络上其他地方的广告。
集合点Peer可以存储广告并且支持搜索。Peer可以使用对等组的名字或者其他属性来搜
寻该对等组广告。有了对等组的广告,其他的Peer就可以使用广告中的XML来实例化并加
入到“MyChat”这个对等组中。一旦成为对等组的成员之后,Pear可以使用对等组的环
境所提供的服务。
广告实际上是P2P网络中的“名片”,P2P网络中的任何资源,包括Peer、对等组、
管道等都可以用广告来描述,目前是在P2P网络中标志资源,并且可以相互找到; 大多
数JXTA广告的编码是使用UTF-8,它是对Unicode的一种ASCII编码方式,UTF-8使用的是8
位编码,Unicode使用的是16位编码,因此可以节省一半的空间,只有在消息体中间可能
会使用到完全的Unicode编码,在消息体里可以指定使用Unicode或者其他的字符集作为
编码方式。
6、Message(消息)
在JXTA中,有两种方式来处理消息。一种是使用XML格式,数据都遵循XML标准被包
装到消息里;另外一种是使用二进制格式。尽管希望对所有的JXTA消息都使用XML格式,
可是由于大量的消息需要传送,使用XML格式的消息会导致效率较低,而且由于消息通常
是在程序之间传送的,所以可以规范的消息内容使用二进制的格式;对于其他的仍然采
用XML格式。
在一个XML协议中使用二进制消息看起来似乎不太合理,但事实上使用二进制消息,
除了可以得到紧凑的格式之外还有很多其他优点。首先数据可以使用一些标准技术进行
压缩,对文本等数据的压缩可以节省大量的传输时间;另外,许多消息本身就是二进制
的格式,例如文件共享程序中共享的文档可能就是二进制的,因此可以直接使用二进制
的格式;还有一个问题就是加密,为了加密可以把数据转化成为二进制,然后直接使用
二进制的消息来传输。
7、Rendezvous Peer(集合点)
一个集合点首先是一个Peer,而且是一个能够处理来自其他Peer请求的Peer。集合
点也可以将请求委托给其他Peer,当然那些Peer也必须是集合点。使用集合点的一个主
要目的就是为了方便在本地网络之外搜索广告。集合点通常拥有更多资源,并且可以存
储大量的有关它周围Peer的信息。
集合点也可以作为搜索的传递者。集合点可以转发发现请求到其他的集合点(原集合
点通过与其他Peer的广告交互而得到了被转发集合点的信息)。每一个集合点如果本身没
有被请求的信息它都会转发该请求。
Peer3 防火墙
* * * TCP
IP多播 * TCP * HTTP * 返回45678的结果
通过TCP返回结果 * * *
Peer2---------------Peer1 返回45678 集合点4----------Peer8
IP多播 的结果 *
TCP * TCP
请求 * 返回567的结果
集合点5
* *
* *
Peer6 Peer7
图2 通过集合点进行Peer搜索的过程
图2说明了一个典型搜索过程。远程搜索从Peer1开始,它首先通过IP多播(IP
Multicast)询问本地的Peer2和Peer3,Peer2和Peer3很可能和Peerl处于同一个局域网
内,所以很快收到了搜索请求。接下来,如果Peer2和Peer3没有所搜索的特定资源,搜
索将通过集合点进行,Peer1会向它的集合点Peer发出搜索请求,如果该集合点Peer也没
有所需的广告信息,该集合点Peer会向它所知道的集合点Peer发出搜索请求。需要注意
的是,除了和提出查询请求的Peer处于同一局域网内的Peer收到查询请求外,在局域网
外只有集合点才会收到查询请求。
IP多播(IP Muhicast)是一个一到多的消息传输协议。IP多播用来发送数据的副本到
一组地址。在P2P应用程序中,IP多播有两个好处。首先,因为多播使用一个组地址而不
是使用IP地址,一个Peer可以在不知道接收者地址的情况下发送消息。这样做的结果是
在多播网络中的所有Peer都可以响应发出请求的Peer,将有关查询的结果信息、甚至是
自己的IP地址(用于与请求Peer直接通信)发送回去。
IP多播的第二个好处是减少使用带宽。因为所有的Peer都可以看到一个单一的消
息,没有必要向每一个Peer发送消息的一个副本。当发送大量的数据到一组Peer时,这
一点是非常重要的。使用多播的一个缺点是一些防火墙和路由器会阻塞多播的消息。在
因特网提供商之间通过因特网主干网可以支持多播消息,不过这种服务是需要额外付钱
的。还存在其他IP多播的障碍,比如个人防火墙、子网路由器。这就是为什么JXTA不是
仅仅支持IP多播的原因。一般情况下,只要在防火墙后能够支持多播对于大多数的P2P网
络就足够了。你可以这样来利用本地的多播,先将消息发送到每一个网络的某一个特定
的Peer上,然后该Peer又通过本地的多播将消息发送给本地的Peer。
只有集合点允许进行超出局域网的搜索。一个Peer可以选择成为一个集合点,但这
不是必须的,作为集合点好的一面是集合点可以缓存的形式保留从其他集合点得到的查
询结果的副本;不好的一面是,该Peer将占用很多的内存和带宽。由于请求数量可能很
多并且大量的广告数据会消耗很多的计算机资源,在这种情况下我们可以选择将计算机
作为专用的集合点。集合点同时可以作为企业内部网的网关和路由器,其效果和使用传
统的路由器是一致的。在每一个子网内也需要使用一个集合点,是否选择使用专用的集
合点Peer取决于安全性的要求和使用的P2P应用的范围。P2P网络的拓扑结构需要通过多
个的例子来进行测试并且需要定期监控。特别要注意的是:当P2P网络的服务在大量Peer
上存有副本时,P2P网络的效率更高。有些时候并不是额外的集合点就可以提高网络的效
率。
当一个Peer在搜索广告时或者是其他服务使用集合点机制来路由消息时,集合点才
被使用,因此一个Peer对集合点的需要不是持续的;为了能够更好地发挥作用,一个连
接到因特网的集合点最好尽可能地暴露给网络上的多个Peer,在防火墙内把所有的Peer
都配置为集合点不一定能够发挥很大的作用。
8、RouterPeer(路由Peer)
JXTA中的一个路由Peer是一个支持Peer端点协议的Peer,不是所有的Peer都需要实
现该协议,因为和传统的网络路由器一样,我们只需要少数几个路由器去支持一个大网
络,JXTA路由器和传统的路由器非常相像,最主要的区别是P2P不是非常固定并且包括了
很多非静态地址。
9、GatewayPeer(网关Peer)
JXTA中的一个网关Peer是一个作为通信中继的Peer。网关Peer和集合点的不同之处
在于,网关是用来在Peer间传递消息,而集合点是用来传递请求的,网关Peer就像是无
线电转发器或者说是Peer间的一个中介,它传递消息,因为有防火墙、NAT设备和代理服
务器的存在,网关对网络的连通具有决定性的作用,网关可以存储消息,并且等待希望
得到这些消息的接收者来收集它们。
网关的存在是因为因特网非常混乱。混乱的原因是有各种各样的用于防止Peer间通
过公用访问方法通信的安全保障和障碍物,另一个原因是各个Peer所支持的协议是不同
的,一些Peer可能使用TCP,另一些可能使用HTTP。在无线情况下,我们需要使用无线应
用协议(WAP),网关尽可能多地支持这些协议,因此它可以作为不同类型协议间的中介,
JXTA目前支持TCP和HTTP,不过对其他协议的支持正在开发中。
在因特网上网关是与大多数安全机制交互的关键,防火墙、代理服务器和NAT设备是
主要的安全屏障。
Peer1
* TCP管道
因特网 *
网关对等机2
*
防火墙或NAT的边界 *
--------------------------------*------------------------
局域网 * HTTP管道
*
Peer3
图3 通过网关对等机进行Peer间的通信
图3说明网关Peer2是怎样作为Peer1和Peer3之间的交互接口的。网关将从Peer1来的TCP
消息转换成HTTP消息传递给Peer3。当消息从Peer1发出时,是通过TCP发往网关Peer2,
网关Peer2存储了这个消息,直到Peer3向它发出获得消息的HTTP请求。
三、JXTA协议
有六个协议构成了JXTA的核心,JXTA通过这六个协议来完成Peer之间的通信,彼此之间
的资源的发布和发现,信息的传递和路由,协议本身并不是应用程序,需要添加更多的
代码来开发有用的应用,协议隐藏了很多细节,这样使得编写JXTA应用程序比从空白开
发P2P应用要容易得多。
JXTA在JXTA协议规范中定义了它的协议。此规范描述了Peer间如何通信和交互,它
并未描述实现的细节或如何编写P2P应用程序,下面是JXTA协议的列表,其中包含了协议
名称的首字母缩略词,这六个协议如图4所示。
Peer Discovery Pipe Binding Peer Information
Protocol Protocol
Peer Resolver Protocol
Peer Endpoint Rendezvous
Protocol Protocol
图4 JXTA的核心协议
1、对等机发现协议Peer Discovery Protocol(PDP):主要用来发布自己的广告信
息,并且从其他Peer处获得广告。PDP允许一个Peer发现其他Peer的广告(包括Peer广
告、对等组广告、服务广告,或者是管道广告)。该协议通过指定一种广告类型(如
Peer、对等组)、一个XML标签名、一个匹配这个XML标签所表示数据的字符串来定义查
询。它使用Peer Resolver Protocol来发送和传播搜索广告的请求。
2、管道绑定协议Pipe Binding Protocol(PBP):允许Peer之间建立虚拟的通信通
道。
该协议首要关注的是通过Peer端点路由协议提供的路由连接Peer。它使用Peer
Resolver Protocol来发送和传播搜索广告的请求。
3、对等机信息协议Peer Information Protocol(PIP):用来获得其他Peer的状态信
息,包括更新时间、状态等等。该协议有时被用做ping命令,有时被用来获得一个Peer
的基本状态信息,PIP消息的正文是自由格式的,它允许询问特定的Peer信息。此外,这
种能力可以被扩展以提供控制能力,它使用Peer Resolver Protocol来发送和传播搜索
广告的请求。
4、对等机解析协议Peer Resolver Protocol(PRP):允许Peer发送更一般的请求,
并可以接收到该请求的回应;同时可以将请求分发到组内的一个或者多个匹配的处理
器,Peer解析协议是一个基础通信协议,它按照一种请求/响应格式来进行,要使用这个
协议,需要提供一个查询的Peer和一个包含能被目标Peer理解的XML请求消息,该协议被
用来支持JXTA中的其他协议(PDP、PBP和PIP),而且允许传播查询,例如,如果一个Peer
收到一个查询并且不知道答案,解析协议就会将该查询发送给别的Peer。
5、端点路由协议Peer Endpoint Protocol(PEP):通过该协议Peer以发送消息的形
式获得一条路由路径。它使用Peer间的网关来建立一条包含一个或多个适合建立管道的
管道协议组成的通路。管道绑定协议借助此Peer列表来建立Peer间的路由。一般情况下
传统的路由器和DNS服务器会因为防火墙、代理服务器和NAT设备等原因而无法建立连
接,而端点路由协议通过寻找网关来穿越诸如防火墙等障碍来建立连接。端点路由协议
还可以同时帮助相互不支持对方使用协议的Peer进行通信。例如,如果你连接支持TCP的
Peer-A和只支持HTTP的Peer-B,端点路由协议既可以选择一个可以支持此传输的网关,
又可以选择多个并且相互协议兼容的一组网关。
6、集合点协议Rendezvous Protocol(RVP):通过该协议Peer可以对一个服务订阅或
者被订阅。集合点协议负责在JXTA对等组内传播消息,它为Peer在组内接收和发送消息
并且控制消息如何传播定义了一个基本的协议。
从编写P2P应用程序的角度而言,可以简单地划分上述协议的主要用途:
Peer Discovery----搜索资源
Peer Resolver----一般查询服务
Peer Information----监控
Pipe Binding----可寻址的消息传递
Rendezvous----消息传播
PeerEndpoint----路由
四、JXTA的应用与发展
一)JXTA的应用
1、即时通信和文件共享(myJXTA)
myJXTA是在J2SE平台上的一个JXTA演示程序,主要为展示JXTA项目和P2P的一些概念,它
提供了一些功能,诸如安全的一对一的交谈、组内的交谈、组内文档的共享、搜索和下
载等。myJXTA使用JXTA平台的核心服务,完成发现组、加入组和创建组的功能;还有在
两个Peer 间创建连接,完成一对一的交谈;或者在组内建立连接,完成组内的交谈以及
组内文件的搜索和下载。该程序的主要目的是未了展示基于JXTA协议的P2P的工作方式。
2、网络游戏(Chess)
JXTA技术已在许多游戏应用方面得到了展示,一个互动式的国际象棋比赛的应用程
序使用JXTA来传递两个棋手间的对奕过程,并将它展现给观众,国际象棋游戏和“tic-
tac-toe"游戏都可以用来展示JXTA在小型设备上的应用,一个游戏者可以创建一个新的
JXTAPeer组并邀请全世界其他游戏者加入他的游戏,当然也可以限制他人进入他的游戏
组。
3、协同工作
JXTA技术已经展示它在协同工作应用程序中的能力。用JXTA开发出来的集成开发环境可
以允许一个以上的开发者同时开发一个软件程序;另外一个协作式的JXTA应用程序允许
几个人同时编辑同一个电子数据表。其他JXTA项目中开发的合作开发工具包则利用了
JXTA进行会话、共享浏览和文件共享。
由于具有通话功能,JXTA技术在合作开发中拥有这样一个优点:一个应用程序的开
发不需依赖于服务器或其他中央管理系统。JXTA处理新发现的节点,并保证路线通畅,
在用户和交互式应用程序间交换消息。
4、聊天程序
JXTA非常适合编写聊天程序,而且可以有多种实现方法,包括完全的集中式、代理方式
到完全非集中式。而且一个非常有意思的情况是,用JXTA来实现一个集中式的聊天程序
非常困难,而实现完全非集中式的聊天程序反而简单,因为JXTA平台本身已经完全解决
了底层Peer之间的发现和通信问题。在现有的JXTA项目中已经有许多聊天程序的例子,
包括myJXTA应用程序(原先称为InstantP2P)、JXTA shell中的Talk命令、HotWire应用程
序和其他几个编程指南。
5、JXTA 社区
JXTA是一个开放源代码的项目,它是由JXTA社区http://www.jxta.org在推动发展。在这
个站点上可以获取最新的JXTA文档和程序代码,而且你可以注册并加入到正在进行中的
JXTA项目,参与并推动项目的进展;这些项目分类存放,为用户展示了JXTA各方面的功
能;此外,站点上还有邮件列表,都是JXTA开发人员和P2P参与者就感兴趣的问题的讨
论。
二)JXTA的发展
1、各种语言的实现
目前JXTA只有Java的实现版本,以至于大家谈到JXTA都认为它是用Java开发的一套P2P框
架,而忽略了JXTA的实质只是一套独立于各种平台和语言的协议。因此在各种语言上实
现JXTA成为一项非常重要的工作。只有这样,因特网上的用各种各样语言实现的应用软
件就可以只需改写网络部分的代码而转换到JXTA平台上来。这不但大大地节省了工作
量,而且将会吸引大量因为各种原因无法采用Java语言的软件加入到JXTA中来,从而大
大促进JXTA协议的发展。现在正在进行的其他语言的实现有C,Perl,Python,
Smalltalk等等,显然这还远远不够,也许我们将来需要看到用Pascal,VB,C#实现的版
本。
2、各种平台的实现
跨平台,这是Java已经实现了的目标,但是并不表示JXTA就无事可做,一个真正的P2P网
络不仅仅是包括PC这个大家目前已经熟悉的设备,它还应该包含各种现在以及将来能够
连到因特网上的设备。头一个目标显然是PDA和手机这种移动设备,JXTA for J2ME以及
PocketJxta都已经在进行中,而且已经可以使用;但是,我们还要考虑到将来的各种设
备,这其中主要是各种各样的嵌人式设备。如果这些设备都运行JXTA平台,那么我们将
看到一个真正的P2P世界。
3、各种应用
有好的应用,一个平台是不可能流行起来的。目前在jxta.org上登记的应用开发项目有
多个,相比现实世界中的各种网络软件的数目,这个数字实在是很小。目前的JXTA应用
主要集中在即时通信和文件共享上面,这似乎成了P2P的代名词。但是如果只局限于这些
应用,JXTA的应用范围将会很有限。
4、Service
Service在JXTA中扮演着极其重要的角色,所有JXTA协议的实现都是以Service的形式存
在着的。除了几个核心服务外,目前JXTA上有多个关于Service的项目正在开展着,从某
种程度上来说,Service比Application更重要;如果没有好的Service,也就产生不了多
少好的应用,在这些进行中的Service中,Search是其中关键的环节,在没有中心服务器
的P2P网络中,如何有效地进行查找成为一个关键问题,与此同时,还需做到尽可能地减
少占用的带宽。
发表评论
-
Nagle's algorithm
2012-06-17 20:45 926Nagle's algorithm From Wiki ... -
ADSL上网速度慢 都是帐号限速惹的祸
2011-11-12 10:59 3571全方位解读帐号限速? ADSL宽带Modem中显示的带宽 ... -
UTC和GMT时间
2011-08-24 18:16 1076每个地区都有自己的本地时间,在网上以及无线电通信中时间转换的问 ... -
网络远程通讯总结
2011-06-06 23:00 845文章引自www.51cto.com基本 ... -
SNMP v1,v2,v3 的比较
2010-09-06 15:32 2436在SNMP发展历史上,TCP/IP ... -
AdventNet
2009-05-21 10:25 1544词条简介 [ 编辑本段 ] AdventNet公司成立了 ... -
OSS
2009-05-21 10:20 1595运营支撑系统(OSS),是一个综合的业务运营和管理平台,同时也 ... -
网元管理系统(EMS)
2009-05-21 10:14 2776Element Management Systems 网元管 ... -
P2P的Jxta解决方案
2008-07-10 17:58 1984P2P的Jxta解决方案 使 ...
相关推荐
JXTA 2.0协议作为分布式计算领域的里程碑,不仅为互联网应用提供了新的视角,也为未来网络技术的发展开辟了道路。其独特的去中心化特性,使其在安全性、可扩展性和灵活性方面展现出巨大的潜力。随着技术的不断进步,...
JXTA 平台是 P2P 技术的进一步发展, 它给开发人员提供了一套统一的灵活的标准协议和类库。 使用 JXTA 平台, 开发人员可以从具体的 P2P 技术底层细节中解脱出来, 从而更加专注于应用程序的功能实现。
JXTA是美国sun公司在JAVA领域里推出的新技术,目的是为P2P(peer-to-peer)的网络应用开发提供一个统一的平台 而贝为了鼓励和支持该技术的发展,JxTA项目采用了...吸引了大量业界人士参与到JXTA技术的研究与应用当中。
### 基于JXTA的CMS内容共享深入解析 #### 引言 在现代互联网技术的迅猛发展中,P2P(点对点)...通过深入理解CMS的工作原理及其与内容广告的关系,开发者可以更好地设计和实现P2P应用,推动信息技术的进一步发展。
### JXTA学习手册:P2P与Java技术解析 #### 一、P2P技术概览 近年来,分布式计算领域发展迅速,新技术层出不穷。其中,P2P(Peer-to-Peer)技术作为一项重要的技术趋势,使得用户可以直接连接到其他用户的计算机上...
《JXTA技术详解:基于jxta-lib-2.4.zip的深入解析》 JXTA(JavaXTraordinaire)是一项开放源码的P2P(Peer-to-Peer)技术,它允许网络上的设备之间进行直接通信,无需中心服务器。在"jxta-lib-2.4.zip"这个压缩包中...
当用户启动应用并接入WiFi网络后,系统会加入JXTA网络,搜索集合点并获取对等体列表。聊天功能通过预设的管道服务实现,而文件共享则需要用户向集合点请求资源列表,选定目标节点后发起文件传输请求。整个通信流程...
值得注意的是,随着技术的发展,后续版本可能会引入新的特性和改进,这可能与本书所讨论的内容有所不同。 ### 结论 综上所述,JXTA作为一种先进的P2P技术框架,在分布式计算领域展现出了巨大的潜力。通过采用去...
《深入解析JXTA协议:P2P...随着技术的不断进步和应用场景的日益丰富,JXTA协议将继续发挥其独特的优势,推动P2P技术向更广阔的应用领域拓展。无论是学术研究还是商业应用,JXTA协议都是一个值得深入了解和探索的领域。
JXTA技术作为一种新型的网络编程和计算平台,广泛应用于点对点(P2P)计算领域,旨在解决现代分布式计算中存在的问题。传统的客户机/服务器(C/S)模式在网络资源利用上存在诸多局限性,例如信息资源未被充分挖掘、...
#### 四、JXTA 的实践应用与未来发展 - **完整样本应用**:书中提供了基于 JXTA 构建的完整示例应用程序。这些示例不仅展示了 JXTA 的各种功能,还提供了实际操作中的具体实现细节。 - **未来展望**:讨论了 JXTA ...
通过上述分析可以看出,《基于JXTA平台的P2P文件共享系统的设计与实现》不仅详细介绍了系统的架构和实现方法,还展示了JXTA技术在P2P文件共享领域的强大应用能力。未来,随着P2P技术的不断发展和完善,此类系统有望...
本文通过研究和实验将JXTA技术应用到点云处理中,通过JXTA平台提供的服务和协议,实现了点云数据的分布式处理。研究者指出了应用中存在的问题,比如网络延迟、数据同步和安全性问题等,并提出了未来改进的方向。 ...
2. **对等协议栈**:JXTA提供了全面的协议栈,包括对等发现、消息传递、服务发布与发现、管道(Pipe)通信等,这些都是构建P2P应用的基础。 3. **服务导向架构**:JXTA支持服务导向的编程模型,使得开发人员可以...
通过对Symbian平台JXTA对等网络协议的研究与实现,不仅解决了原生JXTA在特定平台上的应用难题,还为移动设备提供了一种全新的资源共享模式。JXTA2Symbian的实现不仅提高了资源共享的效率和可靠性,也为未来移动设备...
《基于JXTA的P2P框架系统:构建局域网聊天、文件共享与白板应用》 在当今互联网技术的快速发展中,P2P(Peer-to-Peer)技术因其分布式、去中心化的特性,逐渐成为构建高效、灵活网络应用的重要手段。JXTA(Java XML...
- **背景**:随着P2P技术的发展,各种软件公司纷纷投入P2P应用的研发,Sun Microsystems推出的JXTA技术便是其中之一。 - **定义**:JXTA是一组开放的协议集,用于构建基于Java的P2P应用程序。 - **功能**: - 支持...