Demo between Monday, December 10 and Wednesday, December 12.
Note: For questions concerning this assignment, please email to both the instructor and the TA.
This is an open assignment, which means you can choose to work on something that you have particular interests in. For those who don't want to bother with it, four default choices are given below. For this assignment, you can choose to work in a team of two if the scope justifies that. If you are not sure if your project warrants a two-person group, please contact the instructor.
Turn-in:
For this assignment, you should turn in your source files, a makefile if needed,
and a README file. The README should clearly describe your overall design, any
implementation detail that you deem interesting, how your programs should be
compiled and run, and what each member of your group has done. When appropriate
(for some assignments), you should also describe the analysis result for the
assignment.
Demo:
Additionally, you need to set up a 30-minute demo with the TA by
email. In the demo you need to show us how your project works (or partially works)
with your own test cases. (Prepare the testing cases before
the demo!) We may ask you to run some of our own test cases and ask
some questions about your design & implementation. The demo should occur between
December 10th and December 12th.
The rest of this page describes the default assignment. You do NOT need to read it if you choose an open assignment.
Choice 1: Wide-area Network Bandwidth Measurement
Requirements: You task is to develop a tool to measure the network bandwidth between
any two nodes in the wide-area network. Your tool should tolerate the unstable nature
of wide-area networks. In other words, although the network itself is not stable (with
packets loss and cross traffic that affects your measurements), the measured bandwidth
between the same two nodes should NOT diverge too much during different runs of your
tool and it should correspond well to the actual available bandwidth between the two nodes.
References:
Choice 2: Query Sniffing and Analysis in Gnutella Network
Requirements: You first need to get a machine in the department lab connected to the
global Gnutella Network. Then you need to monitor all the queries forwarded to your
machine. Last but not least, after you record a large number of queries, you need to
analyze them (using whatever method) and find out if there is any interesting
information you can extract from them. For example, do the queries follow any patterns?
50% of your grade will be based on the results/findings of your analysis.
Choice 3: Web Data Crawling and Collecting
Requirements: You are asked to build a Web crawler capable of operating in two modes:
1) run at a rate of N pages/second; 2) run at a rate of N bytes/second. With
a given starting Web page, your crawler should crawl that page, then follow its hyperlinks
to crawl more pages and so on. It should recursively follow the hyperlinks until you
stop it or there is no more linked pages to read. In the demo, we will randomly specify
a starting page. You should be very carefully in controlling the bandwidth your crawler may use.
To avoid undesirable impact on other Web sites, you should not test on pages outside the
department until you are quite sure that your program can run properly in the two required
modes. After you fetch the pages, you should save them to the local hard drive, e.g., a
sub-directory in the "/tmp" partition. Please delete them after you are done
with your tests.
Warning: there are some web sites that do NOT welcome
crawlers. Before your program tries to crawl on a web site (e.g., www.google.com), it
should check if there is a robots.txt file on that site (e.g., www.google.com/robots.txt).
See the Robot Exclusion
Standard for more information about how robots.txt works.
Choice 4: Implementation of a Multi-cast Routing Protocol based on RPF and pruning
The requirements are similar to those of Assignment #2, but instead of a unicast routing
protocol, you should implement: