From Gnutella Developers
Gnutella is a protocol for distributed search and digital distribution. Although the Gnutella protocol supports a traditional client/centralized server search paradigm, Gnutella’s distinction is its peer-to-peer, decentralized model.
In this model, every client is a server, and vice versa. These so-called Gnutella servents perform tasks normally associated with both clients and servers. They provide client-side interfaces through which users can issue queries and view search results, while at the same time they also accept queries from other servents, check for matches against their local data set, and respond with applicable results. Due to its distributed nature, a network of servents that implements the Gnutella protocol is highly fault-tolerant, as operation of the network will not be interrupted if a subset of servents goes offline. - Philippe Verdy
This document is intended for readers with a fair knowledge of network programming but does not require any previous Gnutella experience. Still, other implementations of this protocol will give useful information about implementation techniques that are not included in this document. A list of Gnutella programs can be found at http://www.gnutelliums.com