Programming Assignment 5
Objective
The objective of this assignment is to extend the P2P network implemented in
assignment 4. Your task is to
propose an extension, implement it, and evaluate it.
Assignment: "X-P2P"
In this assignment you will use your P2P application from assignment 4 and
extend it with additional functionality or modify it to follow a different
model, etc. Your task is to propose such an extension (i.e., replace the 'X'
in X-P2P with a topic of your choice, e.g., Secure P2P, Real-Time P2P,
Multimedia P2P, ...), implement it, and possibly evaluate it.
You are required to submit a
proposal (at most one page) to the instructor (via email) by April 7 (11.59pm); the instructor will try to respond to each proposal within 24 hours. You are advised to submit a proposal as soon as possible. Your proposal has to specify the
enhancement/modification/improvement you suggest, any relevant implementation
details (protocols, language, or existing software used, algorithms, etc.),
and how you will evaluate your implementation. If you have not successfully
completed assignment 4, you can obtain working source code from one of your
class mates.
Project Suggestions/Hints
The following list may help you in defining a suitable project that fits
your interests:
- Identify one or more short-comings of the Napster-style P2P network
implemented in assignment 4, and suggest and implement improvements (e.g.,
scalability problem, firewall problem, etc.)
- Similar to the previous point, change the Napster-style P2P network to
work according to a different file sharing model, e.g., the ones used in
Gnutella, Kazaa, or Chord.
- Multimedia P2P: modify your P2P application to support streaming
video or audio instead of simple file downloads.
- 'Split' P2P: change the P2P network to support simultaneous download
of a file from multiple peers (e.g., 1000 bytes from peer A, then 1000 bytes
from peer B, then again 1000 bytes from peer A, etc.).
- Kernel P2P: a kernel-level P2P network may be useful for distributed
operating systems or distributed kernel services. Port your existing P2P
network into an OS kernel (e.g., Linux or BSD).
- Secure P2P: add authentication and/or encryption to your P2P network.
- Mobile P2P: change your P2P network such that problems with connectivity
are addressed, e.g., if a peer you are downloading from is suddenly out of
reach (transmission stops), the P2P network switches to another peer,
transparent to the user, and continues the donwload.
- GUI: Build a graphical user interface for your P2P network that allows you to join a network, publish files, and fetch and download files.
- Change your P2P network to add peer monitoring information (e.g.,
the current CPU load and memory usage, both obtainable from /proc) to the
ALIVE messages, such that the registry maintains a load statistic for each
peer, allowing clients to select a peer with lowest (estimated) load. The
period for ALIVE messages should be shortened to allow for more accurate
information.
- Change your P2P network such that a client can specify a minimum download speed and the actual download speed form a peer is monitored and if it falls
below the minimum, the client switches to another peer.
- Change your P2P network such that if a file has been downloaded from a peer,
the client updates the information at the registry to reflect the availability
of the file at the client.
- Change your P2P file sharing network to a resource sharing network, by
letting peers register their available resources (e.g., 40% idle CPU,
60% idle memory, etc., again, obtainable from /proc) with the registry, together
with a guest password. Peers can then obtain the password from the registry
and contact other peers which then execute tasks on behalf of the first. For
simplicity, you can let the peer execute simple tasks such as 'ps', 'ls', etc.,
returning the output to the first peer.
Grading
The grading will be according to the grading policy on the course webpage. However, the difficulty will be taken into consideration. That is, for 'easier'
assignments, errors will be graded stricter, for more difficult projects,
the grading will be more lenient. The purpose
is to encourage you to tackle trickier problems in your area of interest.
Submission
The due date for this assignment is April 25, 2005, 11.59pm EST.
You will use the drop-off boxes (you will find a box with your login name). Make
a directory called "project5" and place all required files into this directory
(either individually or as one tar file). The required files are: all source
files, a Makefile, a README file, and any other files you may consider relevant
to the project (test files, etc.). The README file is of particular importance,
use it to describe the project, all problems faced, the solutions used, any
difficulties encountered, etc. This will help the instructor in judging the
difficulty of a project. There is no page limit for the document. No late
submissions will be accepted!