Gnutella Protocol Development

Our blue logo

Gnutella Protocol Development

Home :: Developer :: Press :: Research :: Servents

Source - Some parts of this section are taken from the latest draft.

1.1 Background

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 do 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

1.2 Terminology and Network Management

Servent          A program participating in the Gnutella network is
                 called a servent, as a contraction of "SERVer" 
                 and "cliENT". The words "peer", "node" and "host"
                 have similar meanings, but refer to a network 
                 participant rather than a program. When a servent
                 has a clear client or server role the words "client"
                 or "server" may be used. The word "client" is also
                 sometimes used as a synonym for servent. Some other
                 documents use the word "servant" instead of servent.

Message          Messages are the entity in which information is 
                 transmitted over the network. Sometimes the word 
                 "packet" is used with the same meaning. 
                 Some other documents use the word "descriptor".

GUID             Globally Unique IDentifier. This is a 16-byte long 
                 value made of random bytes, whose purpose it is to
                 identify servents and messages. This identification
                 is not a signature, just a way to identify network
                 entities in a unique manner. 

Gnutella network The Gnutella network is made of interconnected 
                 hosts implementing the Gnutella protocol.
                 Sometimes also called the GNet.

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [34].

1.3 Characteristics

Gnutella is a decentralized peer-to-peer system. It allows the
participants to share resources from their system for others to
see and get, and locate resources shared by others on the network.

Resources can be anything: mappings to other resources, cryptographic
keys, files of any type, meta-information on keyable resources, etc.
However, the semantics for locating and handling resources other than
plain files are not specified in this document.

Each participant launches a Gnutella program, which will seek out 
other Gnutella nodes to which to connect. This set of connected nodes 
carries the Gnutella traffic, which is essentially made of queries, 
replies to those queries, and also other control messages to 
facilitate the discovery of other nodes.

Users interact with the nodes by supplying them with the list of
resources they wish to share on the network, can enter searches for
other's resources, will hopefully get results from those searches,
and can then select those resources amongst the results: if those
resources are files, for instance, they can download them.  But one
can imagine other types of resources that, once fetched, will bring
more than their content value.

Resource data exchanges between nodes are negotiated using the 
standard HTTP protocol.  The Gnutella network is only used to locate 
the nodes sharing those resources.

1.4 Extending the protocol

This document is the definition of the current Gnutella protocol. 
Servents MAY extend the protocol or even change parts of it (for 
example by compressing or encrypting the messages), but servents 
MUST always stay compatible with servents that follow this 
specification. 

If a servent, for example, wants to compress the Gnutella messages, 
it MUST first make sure the remote host of a connection can 
decompress the stream (during handshake), and otherwise leave the 
messages uncompressed. Servents MAY choose not to accept a connection
with a servent that does not support a feature, but MUST always make 
sure that the Gnutella network is not split into separate networks. 

Separate networks for special purposes are, of course, allowed but 
then it is no longer the Gnutella network, but another network. 

This protocol also allows for extensions inside many messages. Such 
extensions can pass through servents that do not know about the 
extension to reach servents that do.

 

 

 

Home :: Developer :: Press :: Research :: Servents

SourceForge.net Logo