Assignment 2: Distributed File Sharing System
Distributed Peer-to-Peer File Sharing System
The goal of this assignment is to design and implement a simple
Gnutella-like file sharing system. There will no longer be a
centralized indexing server that keeps track of what files are
available at what nodes. Instead, the system would be truly
distributed and each query for a file requires a distributed search
through the network.
The Gnutella protocol is specified in the following document . You can vastly simplify
the specification for this assignment. The only requirement is that
the design should not include a centralized entity for keeping track
of system state. You can assume that there is an out-of-band
mechanism for determining some set of initial candidates for Gnutella
neighbors that a Gnutella node could connect to.
Queries and other messages are propagated
from a node to its neighbors. Here are some
other guidelines to lower the message count while implementing the system:
You are free to use any programming language (C, C++, Java, etc.) and
any mechanism for communicating between machines (such as TCP, UDP,
RPCs, etc.). You do not have to implement the PUSH message specified
in the protocol. Also, Gnutella assumes that HTTP is used to finally
download a file once its location has been determined. You are free
to use the raw-TCP-based file fetch mechanism that you had developed
for the first assignment.