Determining Characteristics of the Gnutella Network


Sponsor Ellen Zegura and Richard Liston
ewz@cc.gatech.edu
liston@cc.gatech.edu
GCATT (Ellen)
Area Networking

Problem
Gnutella is a distributed application designed for file sharing and discovery. It has recently been widely discussed in the media in the wake of the Napster controversy. In contrast to Napster, which is a centralized file sharing mechanism, Gnutella is completely decentralized. The topological makeup of the Gnutella network is highly dynamic; users may join and leave at will. The purpose of this project is to probe members of the Gnutella network in order to discover characteristics of the network - e.g., how many users there tend to be at any point in time; how long users tend to participate; how many files they tend to share and any other interesting tidbits of information that you uncover about the network during the course of this project. If more than one person works on this project at one time, you should work together in order to share information and make more significant progress.

Background
In order to share files, a user specifies which files will be shared, joins the already existing network and begins discovering other users on the network. A request for files is made by the user to his/her neighbors. This request is forwarded by the neighbors to their neighbors, etc., and the responses collected. The user also forwards the requests made by his/her neighbors. When the desired files are discovered as being shared by another network member, a request is made to that member to send the file back to the user.

At the network level Gnutella operates via a communications protocol defined for discovering network participants, making connections to network neighbors, sharing files, making queries and propagating requests. There are a number of implementations of this protocol. One implementation in the C language will be provided for use with this project.

A good deal of information is available at the Gnutella home page - http://gnutella.wego.com/. Don't spend too much time there - just jump into the code.

Deliverables
You must first learn how the Gnutella implementation provided operates (we have some knowledge of this code, so we will be able to help out). You will then manipulate the source code to probe the Gnutella network and discover properties of the network as described above. You will deliver a report on the findings, including any supporting figures and graphs which may be useful in describing the network properties.

Evaluation
You will receive an 'A' for this project as long as you learn as much as you can during the allotted time, and write a decent report.