Programming Assignment 1
Objective
The objective of this assignment is to familiarize yourself with the Unix
environment and the socket API, learn how to write a client/server program,
and learn basic performance measurements.
Assignment: Performance Measurements
You will write both a client and server application (C or C++), where
the client will send probe packets to the server in order to measure the
network latencies (round-trip times) and bandwidth. You may find the
function gettimeofday() to be useful in measuring time. Run your client
and server applications on two different machines and describe your results
in a brief report (see below). Each client application should provide
a number of input parameters, including the IP address of the server machine,
the type of measurement (RTT or bandwidth), the number of packets
exchanged (in the case of RTT) or how long the experiment runs (in the case
of the bandwidth test). The report should provide information such as
machine names and IP addresses, the day and time the experiments were
performed, the average RTT and bandwidth values and the minima/maxima for both. Provide two different implementations, one based on TCP, the other one on UDP.
Compare the results of your measurements for TCP and UDP in your report.
Extra Credit
You can receive 5% extra credit if you change the program to support
host names (e.g., wizard.cse.nd.edu) instead of IP addresses (e.g.,
129.72.72.15). You can receive another 5% extra credit if you submit only one
server and one client application, i.e., both TCP and UDP versions of the
server and client are implemented as one single application, respectively.
Submission
The due date for this assignment is February 3rd, 2009, 11am EST.
You will use the drop-off boxes in the course directory
(you will find a box with your login name). Make
a directory called "project1" and place all required files into this directory
(either individually or as one tar file). Only one team member has to do this!
The required files are: all source
files, a Makefile, run scripts for one or more sample test cases, and a document
called README (ASCII file) or readme.ps or readme.pdf (postscript file), which
describes a project summary, your solution approach, any encountered problems
and how you solved them, any unresolved issues, an evaluation with the output
of the program for the test cases you used, and a usage explanation. The
document should be not more than 2 pages. Make sure to provide the names
of all team members on the project summary.
Late submissions will not be accepted.