From Academic Kids

(Redirected from GNUtella)

Gnutella (pronounced with a silent "g") is a file sharing network used primarily to exchange music, films and software. It is a true peer-to-peer network; it operates without a central server. Files are exchanged directly between users.

Gnutella client programs connect to the network and share files. Search queries are passed from one node to another in round-robin fashion. Gnutella clients are available for a number of platforms.

According to the file sharing website, Gnutella is the fourth most popular file sharing network in the Internet, following eDonkey 2000, BitTorrent, and FastTrack. While figures vary from hour to hour and day to day, Gnutella is thought to host on average approximately 1.8 million users. [1] (



The first client was developed by Justin Frankel and Tom Pepper of Nullsoft, in early 2000, soon after the company's acquisition by AOL. On March 14, the program was made available for download on Nullsoft's servers. The event was prematurely announced on Slashdot, and thousands downloaded the program that day. The source code was to be released later, supposedly under the GNU General Public License (GPL).

The next day, AOL stopped the availability of the program over legal concerns and restrained Nullsoft from doing any further work on the project. This did not stop Gnutella; after a few days, the protocol had been reverse engineered, and compatible open-source clones began to appear. This parallel development of different clients by different groups remains the modus operandi of Gnutella development today.

The Gnutella network is a fully distributed alternative to such semi-centralized systems as FastTrack (KaZaA) and such centralized systems as Napster. Initial popularity of the network was spurred on by Napster's threatened legal demise in early 2001. This growing surge in popularity revealed the limits of the initial protocol's scalability. In early 2001, variations on the protocol (first implemented in closed-source clients) allowed somewhat of an improvement in scalability. Instead of treating every user as client and server, some users were now treated as "ultrapeers", routing search requests and responses for users connected to them.

This allowed the network to grow in popularity. In late 2001, the Gnutella client LimeWire became open source. In February 2002, Morpheus, a commercial file-sharing group, abandoned its FastTrack-based peer-to-peer software and released a new client based on the open source Gnutella client Gnucleus.

The word "Gnutella" refers not to any one project or piece of software, but to the open protocol used by the various clients. Since various parties are developing new clients, and the protocol will likely continue to evolve, it is hard to say what the word 'Gnutella' will come to mean in the future.

The name is a portmanteau of GNU and Nutella: supposedly, Frankel and Pepper ate a lot of Nutella working on the original project, and intended to license their finished program under the GNU General Public License. Gnutella is not associated with the GNU project; see GNUnet for the GNU project's equivalent.

How it works

To envision how Gnutella works, imagine a large circle of users (called nodes), who each have Gnutella client software. The client software on the initial use must bootstrap and find at least one of those other nodes. Different methods have been used for this, including a pre-existing list of possibly working node addresses shipped with the software, using Gwebcache sites on the web to find nodes, as well as using IRC to find nodes. Chances are at least one node (call it B) will work. Once it has connected, node B will send node A its own list of working nodes. Node A will try to connect to the nodes it was shipped with, as well as nodes it receives from other nodes, until it reaches a certain quota, usually user-specifiable. It will only connect to that many nodes, but it keeps the nodes it has not yet tried. (It discards ones that it tries but did not work.)

Now, when user A wants to do a search, it sends the request to each node it is actively connected to. It is possible that some of them will no longer work, in which case user A tries to connect to the nodes it has saved as backups. The number of actively connected nodes for user A is usually quite small (around 5), so each node then forwards the request to all the nodes it is connected to, and they in turn forward the request, and so on. In theory, the request will eventually find its way to every user on the Gnutella network.

If a search request turns up a result, the node that had the result contacts the searcher (whose IP address was included with the search request) directly. They negotiate the file transfer and the transfer proceeds. If more than one copy of the same file is found, the searcher can perform a "swarm" download - download pieces of the file from different nodes. This results in increased download rates.

Finally, when user A disconnects, the client software saves the list of nodes that it was actively connected to, and that it was keeping as a backup, for use next time it connects.

In practice, searching on the Gnutella network is often unreliable. Each node is a regular computer user; as such, they are constantly connecting and disconnecting, so the network is never completely stable. Since individual users' bandwidth are likely to be limited, some search requests may be dropped before they reach the whole network (which averages around 1,000,000 nodes at any time). As a result most queries will never reach more than 50% of the network.

The real benefit of having Gnutella so decentralized is to make it very difficult to shut the network down. Unlike Napster, where the entire network relied on the central server, Gnutella cannot be shut down by shutting down any one node. As long as there are at least two users, Gnutella will continue to exist.

Protocol features and extensions

Gnutella operates on a query flooding protocol. The outdated Gnutella version 0.4 network protocol employs five different packet types, namely

  • ping: discover hosts on network
  • pong: reply to ping
  • query: search for a file
  • query hit: reply to query
  • push: download request for firewalled servents

These are mainly concerned with searching the Gnutella network. File transfers are handled using HTTP.

The development of the Gnutella protocol is currently led by the GDF (Gnutella Developer Forum). Many protocol extensions have been and are being developed by the software vendors and free Gnutella developers of the GDF. These extensions include intelligent query routing, SHA-1 checksums, query hit transmission via UDP, querying via UDP, dynamic queries via TCP, file transfers via UDP, XML meta data, source exchange a.k.a "the download mesh" and parallel downloading in slices (swarming).

There are efforts to finalize these protocol extensions in the Gnutella 0.6 specification at the Gnutella protocol development website. The Gnutella 0.4 standard, although being still the latest protocol specification since all extensions only exist as proposals so far, is outdated. In fact, it is hard to impossible to connect today with the 0.4 handshake.

The Gnutella protocol remains under development and in spite of attempts to make a clean break with the complexity inherited from the old Gnutella 0.4 and to design a clean new message architecture (see Gnutella2), it is still the most successful, openly developed file-sharing protocol to date.


Some popular Gnutella clients are

  • LimeWire (Cross-Platform in Java), GPL open-source
  • Cabos ( (Cross-Platform in Java), GPL open-source based on LimeWire
  • BearShare (Microsoft Windows), closed-source
  • Shareaza (Microsoft Windows), GPL open-source
  • Gnucleus (Microsoft Windows), GPL open-source GUI, GnucDNA LGPL open-source core
  • gtk-gnutella (Unix-like platforms), GPL open-source
  • Acquisitionx (Mac OS X), based on LimeWire open-source core
  • Poisoned (Mac OS X)
  • Mutella ( (Unix-like platforms), Terminal mode Gnutella client, open-source
  • Phex (Cross-Platform in Java), open-source
  • Qtella ( (GNU/Linux)
  • XNap (Cross-Platform in Java), Open Source.
  • CocoGnut ( (RISC OS), closed-source

See also

  • Freenet, which focuses on anonymization and distributed storage,
  • MUTE, which provides anonymity of participants and their shared content, routing network traffic by an algorithm adopted from ant-behaviour,
  • WASTE,
  • Bitzi, an open content file catalog integrated with some Gnutella clients,
  • GnuFU, Gnutella For Users: A description of the inner workings of the network in User-Friendly Style.
  • Gnutella crawler, used to gather information from the network

External links

  • ( - A comprehensive directory of Gnutella clients for Windows, Linux/Unix, and Macintosh
  • Gnutella News (
  • Gnutella Forums (
  • GnuFU: Gnutella For Users ( – A guide to Gnutella in Userfriendly style
  • Pytella ( – A collection of bits of Gnutella 0.4 related Python code

Papers on Gnutella and Filesharing

es:Gnutella it:Gnutella lt:Gnutella ms:Gnutella ja:Gnutella ru:Gnutella fr:Gnutella


Academic Kids Menu

  • Art and Cultures
    • Art (
    • Architecture (
    • Cultures (
    • Music (
    • Musical Instruments (
  • Biographies (
  • Clipart (
  • Geography (
    • Countries of the World (
    • Maps (
    • Flags (
    • Continents (
  • History (
    • Ancient Civilizations (
    • Industrial Revolution (
    • Middle Ages (
    • Prehistory (
    • Renaissance (
    • Timelines (
    • United States (
    • Wars (
    • World History (
  • Human Body (
  • Mathematics (
  • Reference (
  • Science (
    • Animals (
    • Aviation (
    • Dinosaurs (
    • Earth (
    • Inventions (
    • Physical Science (
    • Plants (
    • Scientists (
  • Social Studies (
    • Anthropology (
    • Economics (
    • Government (
    • Religion (
    • Holidays (
  • Space and Astronomy
    • Solar System (
    • Planets (
  • Sports (
  • Timelines (
  • Weather (
  • US States (


  • Home Page (
  • Contact Us (

  • Clip Art (
Personal tools