Gnutella2 ( G2 short ) is a distributed peer-to -peer network protocol that is used among other things for file sharing. It was published in 2002 by Michael Stokes and is the successor of gnutella. All but the old handshake of the gnutella protocol was developed from scratch. Thus, a new system has emerged, which has other package formats, a different search algorithm and a much improved metadata system. Gnutella2 has 250000-300000 users depending on time of day and is primarily known for its mostly utilized client Shareaza.


In November 2002, Michael Stokes announced the Gnutella2 protocol in Gnutella Developers Forum. Immediately after, there was a long debate among developers. Some were of the opinion that the ultimate goal of Gnutella2 was to completely break with the old gnutella -0.6 protocol and thus, now overcome many of the things that were present as a workaround finally. Others, however, expressed the opinion (mainly members of the LimeWire and BearShare bearings) that this was just a publicity stunt and failed all technical assistance. This group refuses to some extent have to name the network Gnutella2 and speaks only of " Mike's Protocol". Another argument which this group against the protocol is that the name ( through the attached 2) suggests, the protocol is a follow-up version of the older Gnutella protocol which does not agree with its otherness.

Oddly enough, the Gnutella2 protocol uses the old " Gnutella CONNECT/0.6 " handshake identifier for connection establishment. This is the identifier, as documented in the gnutella -0.6 specification. Here too there is a difference of opinion among the developers. While some see this as a step to maintain backward compatibility with the old protocol so that gnutella clients can integrate the new protocol step by step in their code, others from the GDF criticize this as an attempt at the expense of the gnutella network a new, completely without relation to the old network standing to establish standard.

Once the developers were stuck to its position, was fairly quickly flamewar, mainly through and around the leading BearShare developer Vincent Falco, so the contrarian pages have been further cemented.

The design with the specification was published on 26 March 2003, after that followed a few more detailed and more concrete specifications. Gnutella2 (G2 ) is not supported by most of the "old" Gnutella clients. In contrast, there is a great support for the new Gnutella2 clients for the old Gnutella network. Many claim Gnutella2 advocate that this is so for political reasons, gnutella ( 1) - people counter, however, that there are technical reasons for this.


Gnutella2 divides the nodes into two groups. Leaves (English original leaves ) and hubs. The leaves maintain only one or two connections to the hubs, while hubs hold hundreds of links to the leaves and other hubs. Now, if a search is done, try - if not yet available - the node first and foremost a list of hubs to get and then contacted the hubs in this list. He remembers which hubs have already been visited. This is continued until the list has been processed or a predefined search limit has been exceeded. This ensures that a user can find to overload easily and without the power a widely used file. Theoretically, it would be somewhere in the network to detect even able a single ( unique ) file.

The hubs may cause an index and thus know which files offered by each leaf. The index, called Query Routing Table, is a hash table of the search terms. This list of keywords loads the sheet to the hub high, the hub uses them to generate a combined version with all the key word lists of the leaves, which he oversees. Sending this combined list is now at his Nachbarhubs so as to reduce the number of the forwarded searches. Thus, the stroke can reduce the bandwidth needed because search requests are forwarded only to certain hubs or leaves now.

Gnutella2 used extensively the User Datagram Protocol ( UDP) instead of Transmission Control Protocol (TCP), for his search request packets. The data overhead, which would be available through TCP would make a random motion search system impossible, although, of course, also has UDP disadvantages, such as that the sender does not receive information that the recipient has received a message. However, this can be avoided by sending response packets.

Protocol features

Gnutella2 uses an extensible binary XML -like packet format. This is intended as a response to the many workarounds in gnutella and will allow future enhancements to the network and extensions to be added by each client, without creating dysfunction in the other or old clients. Many developers claim that it would therefore be easier to develop a Gnutella2 client, as a gnutella client. However, other developers see the Gnutella Generic Extension Protocol ( EGEP ) as already existing adequate solution to the above problem addressed.

Gnutella2 is SHA1 hashsum to the file identification. Furthermore, even Tiger Tree hashes are used, the result that one single file from multiple sources ( Multi-source-downloading/swarming ) can be downloaded reliable parallel. Even so, the reliable uploading file parts during the file loading is possible.

Moreover, in order to offer a robust, complete search system, are used in Gnutella2 metadata for improved identification and assessment of the content. This diverse quality information in the search results may be listed, than would be possible by the mere filename. Nodes can even pass on this information when they no longer have the file reviewed. Thus, the user can select viruses or worms and provide this information to other users, should keep a copy of this without viruses or worms on your computer.

Additionally Gnutella2 uses data compression, so as to reduce the bandwidth required for the connections.


Some Gnutella2 clients:

  • Shareaza (Windows), open source C under the GPL, mostly unused G2 client with about 93 % market share.
  • Sharelin (Unix), open source C under the GPL
  • Morpheus (Windows), proprietary.
  • Gnucleus (Windows), Open source core in C / C under the LGPL.
  • Set Adagio ( platform independent ), Open source Ada under the GPL Development July 2004
  • FileScope ( platform independent ), open source C # under the GPL
  • MLDonkey up to version 2.8.7 ( platform independent ), open source under the GPL OCaml

Footnotes and References