在2001年,Sun Microsystems 提出了一个名为 JXTA (Juxtapose) 的开源点对点(P2P)协议规范。这些协议透过一系列 XML 消息定义,让任何连接到网路的设备都能独立于底层网路拓扑而进行信息交换与协作。 JXTA 的基础在于开源 XML 协定,使得其能够在多种现代电脑语言中实现,包括 Java SE、C/C++、C# 和 Java ME。
JXTA 不仅能够穿透防火墙和 NAT,还能够在不同的网路传输中实现互联互通,展示出强大的适应性。
在 JXTA 的运作中,P2P 之间会建立一个虚拟的覆盖网路,使得即使一些 P2P 和资源位于防火墙和 NAT 之后,它们仍然可以互动。每个资源都会通过一个独特的 ID 来识别,这是一个 160 位的 SHA-1 URN(在 Java 绑定版中),使得 P2P 能够在变更地点地址时,保持不变的识别号码。
随着时间的推移,JXTA 的发展却遭遇了瓶颈。 2010 年 11 月,Oracle 官方宣布撤回 JXTA 项目。至 2011 年 8 月,JXTA 项目并未再度启动,且对于将源码转移至 Apache 2.0 许可的请求,Oracle 也未作出回应。
JXTA 定义了几个重要的协议,包括:
在 JXTA 中,P2P 分为两个主要类别:边缘 P2P 和超级 P2P。超级 P2P 可进一步细分为会合 P2P 和中继 P2P。每个P2P 在JXTA P2P 模型中拥有明确的角色,其中边缘P2P 通常被定义为具有瞬时、低带宽网路连接的节点,这些节点往往隐藏在企业防火墙之后或通过非专用的连接来存取网路。
会合 P2P 是特殊用途的 P2P,负责协调 JXTA 网路中的其他 P2P,并提供消息传播所需的范畴。
中继 P2P 则允许那些位于防火墙或 NAT 系统后的 P2P 参与 JXTA 网路,这通常是通过可以穿透防火墙的协议来实现,例如 HTTP。所有参与 JXTA 网路的 P2P 只需要满足相应的凭证或网路/存储/内存/CPU 要求,就可以成为会合或中继 P2P。
在 JXTA 中,广告是描述 P2P 网路中资源(如 P2P、群组、管道、服务等)的 XML 文件。 JXTA 网路中的通信,可以看作是广告的交换。此外,管道是一种虚拟通信通道,用于在 JXTA 中交换消息和数据,具有异步、不可靠和单向的特性。
根据功能,存在三种基本的管道:单播管道、单播安全管道和传播管道。每个管道的设计旨在提供灵活的通信机制,满足各种需求。
在 JXTA 中,P2P 群组提供了消息传播的范畴以及逻辑上的 P2P 聚类。每个 P2P 都是默认群组 NetPeerGroup 的成员,但同时也可以成为多个子群组的成员。值得注意的是,P2P 在不同群组中可以担任不同的角色;在一个群组中可能是边缘 P2P,而在另一个群组中却是会合 P2P。
会合 P2P 具有优化的路由机制,能够高效地传播边缘 P2P 推送的消息。其运作基于一种宽松一致性的网路模型,每个会合 P2P 都维护着一个会合 P2P 视图(RPV),以已知会合 P2P 的清单有序排列。由于没有机制来强制所有 RPV 在 JXTA 网路中保持一致,因此某一 RPV 可能对其他会合 P2P 的视图是暂时或永久不一致的。当边缘 P2P 发布广告时,该广告的索引会透过称为共享资源分散索引(SRDI)的系统推送到会合 P2P。
每当一个边缘 P2P 发布了广告,会合 P2P 将利用分散哈希表(DHT)功能以转发该索引至其他 P2P。
透过随机漫游的过程,若无法找到负责广告的 P2P,查询将被转发或中止,直至找到匹配项或达到 RPV 列表的限制。这项技术不仅展示了 JXTA 的灵活性,也暗示了未来 P2P 网路发展中可能的挑战与机会。
在未来的数位世界中,P2P 技术是否能够进一步优化,以应对更加复杂的网路环境与安全要求呢?