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, mature system from Sun. It is language-independent (not just for Java, although of course Sun's reference implementation is in Java).
Aspects of JXTA
- Peer IDs: JXTA provides an addressing system for peers on the network
- Peer groups: subnetworks within the larger network. Peer groups can replace some core network services with their own variants, have their own security and access-restriction policies, etc. Peer groups can also restrict their membership. For example, you might have a GnuTella?-like "peer group" within a larger JXTA network.
- Advertising & discovery: a peer can advertise services that it provides, and then other peers can try to "discover" peers providing a desired service.
- Peer group services: services can be provided by a single peer, or provided in a distributed fashion by an entire peer group
- Access control: Peers and peer groups can restrict access to services that they provide.
- Monitoring: Peers can monitor other peers for heartbeats, traffic introspection, etc.
- Routing, pipes, and messages: JXTA provides a system for routing messages between peers even though the peers may not be directly connected on the underlying network. JXTA allows peers to establish pipes or message-based connections to each other.
- "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."
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.
A lightweight alternative to JXTA is P2PS (peer-to-peer simplified):
See also DistributedWiki, MeatBall:PeerToPeer, MeatBall:PeerToPeerWiki