CocoGnut - Peer-to-peer Filesharing for RISC OS

User Manual

Quick Start


Gnutella Info
'Thank You's
Virus Warning

What Is Gnutella?

Gnutella is a decentralised peer-to-peer file sharing network developed in the early 2000 by Justin Frankel's Nullsoft (AOL subsidiary and the company that created the WinAMP MP3 player). Gnutella's development was halted shortly after its results were made public, and the actual protocol was reverse engineered using the code that was downloaded from Nullsoft's website just before its closure. Today, there are numerous applications, referred to as Gnutella servents, that employ the Gnutella protocol in their own individual way, and that allow their users to access the Gnutella network. CocoGnut is one of these.

Many improvements and extensions to the protocol have been made since then by a group of developers and researchers. Although the basic Gnutella protocol is still very similar to what it was in 2000, there are additions to it which make it a much more reliable system than it once was. It had previously suffered from problems such as download failures, scalability problems and unnecessary network traffic, but today, because of protocol improvements, these problems are far less severe.

How Does It Work?

Gnutella servents (SERVer and cliENTs), such as CocoGnut, find other servents on the Gnutella network to connect to. When another servent is discovered, a connection is made and the two servents talk 'Gnutella' to each other. These other servents are known as Ultrapeers and allow around 100 leaves to connect to them. These Ultrapeers connect to other Ultrapeers with other leaves, which makes a losely knit, two-tiered network of Gnutella nodes.

When a leaf connects to an Ultrapeer, it sends a hash table which essentially contains the words which correspond to the names of files that the leaf is sharing. When you send a search, a Query message is sent to all the Ultrapeers you are connected to. These, in turn, will forward your query message to any leaves that potentially hold the file you are searching for. When another leaf receives this Query, it will check to see whether it has the file, and if it does, a QueryHit message will be sent back, through the Ultrapeer, to reach your node.

When you receive a QueryHit message, it will be displayed in CocoGnut's search window. From there, you can select what file, and from what node, you wish to download. CocoGnut will attempt to connect directly to this computer and a download will take place. This is a very simplified view of the Gnutella topology. For more information, see Gnutella For Users.

Gnutella Message Types

  • Ping - Used to find more servents on the Gnutella network
  • Pong - Contains information on servents in response to a Ping
  • Query - A search, which will be sent to all connected servents
  • QueryHit - The result of a search from an individual servent
  • Push - Message sent to a firewalled servent in order for it to send you a certain file
  • QRP - A large message that contains the hash table corresponding to all the individual words of each file that is being shared

CocoGnut by Marc Warne of Alpha Programming