在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 技術是否能夠進一步優化,以應對更加複雜的網路環境與安全要求呢?