Peer-to-peer networking means networking where, in contrast to the client-server paradigm, each node is both a "client" and a "server". That is, each peer can provide "services" to other peers on the networks. Many peer-to-peer schemes are thought of as a meta-network running on top of an existing network (such as the Internet).

One difficulty that peer-to-peer networks try to solve is dealing with situations that arise when nodes are intermittently available, or when nodes disappear and reappear at different locations on the underlying network. For example, many PCs on the internet have dynamic IP addresses. This can make it difficult for these PCs to run servers (or, rather, they can run a server but no one will be able to access the server if the IP address of the server changes faster than the DNS system can propagate the change).

There are many application-specific peer-to-peer networks. Examples are GnuTella? (file sharing), FreeNet (file sharing), UseNet (message propagation), ICQ (instant messaging; partially centralized), and various distributed computing systems.

However, perhaps more interesting are the newer application-agnostic peer-to-peer networking systems. These are systems which, like the internet itself, define protocols for peers to network together, but allow those peers to make use of the network for arbitrary applications.

Other overviews of peer-to-peer networking

Application-agnostic peer-to-peer networking systems


JXTA is a featureful, mature1 system from Sun. It is language-independent (not just for Java, although of course Sun's reference implementation is in Java).

Aspects of JXTA

"JXTA modules are an abstraction used to represent any piece of "code" used to implement a behavior in the JXTA world…For instance, modules can be used to represent different implementations of a network service on different platforms, such as the Java platform, Microsoft Windows, or the Solaris Operating Environment
Modules provides a generic abstraction to allow a peer to instantiate a new behavior. As peers browse or join a new peer group, they may find new behaviors that they may want to instantiate. For example, when joining a peer group, a peer may have to learn a new search service that is only used in this peer group. In order to join this group, the peer must instantiate this new search service." 3

Other interesting notes about JXTA

Interestingly, part of the JXTA implementation includes a distributed hash table (DHT), that is, a key-value lookup data structure spread over the entire network in a semi-redundant fashion. Details about how this is done can be found in this readable article.

Further reading


A lightweight alternative to JXTA is P2PS (peer-to-peer simplified):


Other links

See also DistributedWiki, MeatBall:PeerToPeer, MeatBall:PeerToPeerWiki



1. at least, it sounds like it is mature to BayleShanks after a brief web search; it has gone through multiple major revisions and has implementations in a bunch of languages
2. assuming I’m understand it correctly
3. quotation from JXTA Programmer’s Guide

Define external redirect: GnuTella CategoryNetworkingTechnology

EditNearLinks: FreeNet UseNet


The same page elsewhere: