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.